summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYRIGHT.txt2
-rw-r--r--core/config/project_settings.cpp6
-rw-r--r--core/input/input_map.cpp54
-rw-r--r--core/input/input_map.h2
-rw-r--r--core/math/transform_2d.cpp22
-rw-r--r--core/math/transform_2d.h27
-rw-r--r--core/variant/variant_call.cpp3
-rw-r--r--core/variant/variant_construct.cpp1
-rw-r--r--core/variant/variant_utility.cpp43
-rw-r--r--doc/classes/@GlobalScope.xml5
-rw-r--r--doc/classes/AABB.xml2
-rw-r--r--doc/classes/AStar.xml2
-rw-r--r--doc/classes/AStar2D.xml2
-rw-r--r--doc/classes/AcceptDialog.xml2
-rw-r--r--doc/classes/AnimatableBody2D.xml4
-rw-r--r--doc/classes/AnimatableBody3D.xml4
-rw-r--r--doc/classes/AnimatedSprite2D.xml2
-rw-r--r--doc/classes/AnimatedSprite3D.xml2
-rw-r--r--doc/classes/AnimationNodeAdd2.xml4
-rw-r--r--doc/classes/AnimationNodeAdd3.xml4
-rw-r--r--doc/classes/AnimationNodeAnimation.xml4
-rw-r--r--doc/classes/AnimationNodeBlend2.xml4
-rw-r--r--doc/classes/AnimationNodeBlend3.xml4
-rw-r--r--doc/classes/AnimationNodeBlendSpace1D.xml2
-rw-r--r--doc/classes/AnimationNodeOutput.xml4
-rw-r--r--doc/classes/AnimationNodeStateMachine.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachinePlayback.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachineTransition.xml2
-rw-r--r--doc/classes/AnimationNodeTimeScale.xml4
-rw-r--r--doc/classes/AnimationNodeTimeSeek.xml4
-rw-r--r--doc/classes/AnimationNodeTransition.xml2
-rw-r--r--doc/classes/AnimationRootNode.xml4
-rw-r--r--doc/classes/AnimationTrackEditPlugin.xml4
-rw-r--r--doc/classes/Array.xml2
-rw-r--r--doc/classes/ArrayMesh.xml2
-rw-r--r--doc/classes/AspectRatioContainer.xml2
-rw-r--r--doc/classes/AtlasTexture.xml4
-rw-r--r--doc/classes/AudioBusLayout.xml4
-rw-r--r--doc/classes/AudioEffect.xml4
-rw-r--r--doc/classes/AudioEffectAmplify.xml4
-rw-r--r--doc/classes/AudioEffectBandLimitFilter.xml4
-rw-r--r--doc/classes/AudioEffectBandPassFilter.xml4
-rw-r--r--doc/classes/AudioEffectCapture.xml2
-rw-r--r--doc/classes/AudioEffectChorus.xml2
-rw-r--r--doc/classes/AudioEffectCompressor.xml4
-rw-r--r--doc/classes/AudioEffectDelay.xml4
-rw-r--r--doc/classes/AudioEffectDistortion.xml2
-rw-r--r--doc/classes/AudioEffectEQ.xml2
-rw-r--r--doc/classes/AudioEffectEQ10.xml4
-rw-r--r--doc/classes/AudioEffectEQ21.xml4
-rw-r--r--doc/classes/AudioEffectEQ6.xml4
-rw-r--r--doc/classes/AudioEffectFilter.xml2
-rw-r--r--doc/classes/AudioEffectHighPassFilter.xml4
-rw-r--r--doc/classes/AudioEffectHighShelfFilter.xml4
-rw-r--r--doc/classes/AudioEffectInstance.xml4
-rw-r--r--doc/classes/AudioEffectLimiter.xml4
-rw-r--r--doc/classes/AudioEffectLowPassFilter.xml4
-rw-r--r--doc/classes/AudioEffectLowShelfFilter.xml4
-rw-r--r--doc/classes/AudioEffectNotchFilter.xml4
-rw-r--r--doc/classes/AudioEffectPanner.xml4
-rw-r--r--doc/classes/AudioEffectPhaser.xml4
-rw-r--r--doc/classes/AudioEffectPitchShift.xml2
-rw-r--r--doc/classes/AudioEffectRecord.xml2
-rw-r--r--doc/classes/AudioEffectReverb.xml4
-rw-r--r--doc/classes/AudioEffectSpectrumAnalyzer.xml2
-rw-r--r--doc/classes/AudioEffectStereoEnhance.xml4
-rw-r--r--doc/classes/AudioListener2D.xml2
-rw-r--r--doc/classes/AudioListener3D.xml2
-rw-r--r--doc/classes/AudioStream.xml2
-rw-r--r--doc/classes/AudioStreamGenerator.xml4
-rw-r--r--doc/classes/AudioStreamGeneratorPlayback.xml2
-rw-r--r--doc/classes/AudioStreamMicrophone.xml4
-rw-r--r--doc/classes/AudioStreamPlayback.xml2
-rw-r--r--doc/classes/AudioStreamPlaybackResampled.xml4
-rw-r--r--doc/classes/AudioStreamPlayer2D.xml2
-rw-r--r--doc/classes/AudioStreamRandomPitch.xml4
-rw-r--r--doc/classes/BackBufferCopy.xml2
-rw-r--r--doc/classes/BitMap.xml2
-rw-r--r--doc/classes/Bone2D.xml2
-rw-r--r--doc/classes/BoneAttachment3D.xml2
-rw-r--r--doc/classes/BoxMesh.xml4
-rw-r--r--doc/classes/BoxShape3D.xml4
-rw-r--r--doc/classes/ButtonGroup.xml2
-rw-r--r--doc/classes/Callable.xml2
-rw-r--r--doc/classes/CallbackTweener.xml2
-rw-r--r--doc/classes/CameraEffects.xml4
-rw-r--r--doc/classes/CameraTexture.xml4
-rw-r--r--doc/classes/CanvasGroup.xml4
-rw-r--r--doc/classes/CanvasItemMaterial.xml2
-rw-r--r--doc/classes/CanvasLayer.xml2
-rw-r--r--doc/classes/CanvasModulate.xml4
-rw-r--r--doc/classes/CanvasTexture.xml4
-rw-r--r--doc/classes/CapsuleMesh.xml4
-rw-r--r--doc/classes/CapsuleShape2D.xml4
-rw-r--r--doc/classes/CapsuleShape3D.xml4
-rw-r--r--doc/classes/CenterContainer.xml4
-rw-r--r--doc/classes/CharFXTransform.xml10
-rw-r--r--doc/classes/CharacterBody3D.xml2
-rw-r--r--doc/classes/CheckBox.xml4
-rw-r--r--doc/classes/CheckButton.xml4
-rw-r--r--doc/classes/CircleShape2D.xml4
-rw-r--r--doc/classes/ClassDB.xml2
-rw-r--r--doc/classes/CodeHighlighter.xml2
-rw-r--r--doc/classes/CollisionPolygon2D.xml2
-rw-r--r--doc/classes/CollisionPolygon3D.xml4
-rw-r--r--doc/classes/CollisionShape2D.xml4
-rw-r--r--doc/classes/CollisionShape3D.xml2
-rw-r--r--doc/classes/ColorPickerButton.xml2
-rw-r--r--doc/classes/ColorRect.xml4
-rw-r--r--doc/classes/ConcavePolygonShape2D.xml4
-rw-r--r--doc/classes/ConcavePolygonShape3D.xml2
-rw-r--r--doc/classes/ConfigFile.xml2
-rw-r--r--doc/classes/ConfirmationDialog.xml2
-rw-r--r--doc/classes/ConvexPolygonShape2D.xml2
-rw-r--r--doc/classes/ConvexPolygonShape3D.xml4
-rw-r--r--doc/classes/Crypto.xml2
-rw-r--r--doc/classes/CryptoKey.xml2
-rw-r--r--doc/classes/Cubemap.xml4
-rw-r--r--doc/classes/CubemapArray.xml4
-rw-r--r--doc/classes/Curve2D.xml2
-rw-r--r--doc/classes/Curve3D.xml2
-rw-r--r--doc/classes/CurveTexture.xml2
-rw-r--r--doc/classes/CurveXYZTexture.xml4
-rw-r--r--doc/classes/CylinderMesh.xml4
-rw-r--r--doc/classes/CylinderShape3D.xml4
-rw-r--r--doc/classes/DTLSServer.xml2
-rw-r--r--doc/classes/DampedSpringJoint2D.xml4
-rw-r--r--doc/classes/Dictionary.xml2
-rw-r--r--doc/classes/DirectionalLight2D.xml4
-rw-r--r--doc/classes/DirectionalLight3D.xml2
-rw-r--r--doc/classes/Directory.xml2
-rw-r--r--doc/classes/EditorCommandPalette.xml2
-rw-r--r--doc/classes/EditorDebuggerPlugin.xml2
-rw-r--r--doc/classes/EditorExportPlugin.xml2
-rw-r--r--doc/classes/EditorFileSystem.xml2
-rw-r--r--doc/classes/EditorFileSystemDirectory.xml2
-rw-r--r--doc/classes/EditorImportPlugin.xml2
-rw-r--r--doc/classes/EditorInspector.xml4
-rw-r--r--doc/classes/EditorInspectorPlugin.xml2
-rw-r--r--doc/classes/EditorInterface.xml2
-rw-r--r--doc/classes/EditorNode3DGizmo.xml2
-rw-r--r--doc/classes/EditorNode3DGizmoPlugin.xml2
-rw-r--r--doc/classes/EditorPaths.xml2
-rw-r--r--doc/classes/EditorProperty.xml2
-rw-r--r--doc/classes/EditorResourceConversionPlugin.xml2
-rw-r--r--doc/classes/EditorResourcePicker.xml2
-rw-r--r--doc/classes/EditorResourcePreview.xml2
-rw-r--r--doc/classes/EditorResourcePreviewGenerator.xml2
-rw-r--r--doc/classes/EditorSceneImporterMesh.xml2
-rw-r--r--doc/classes/EditorSceneImporterMeshNode3D.xml4
-rw-r--r--doc/classes/EditorScenePostImport.xml2
-rw-r--r--doc/classes/EditorScript.xml2
-rw-r--r--doc/classes/EditorScriptPicker.xml4
-rw-r--r--doc/classes/EditorSelection.xml2
-rw-r--r--doc/classes/EditorSpinSlider.xml4
-rw-r--r--doc/classes/EditorSyntaxHighlighter.xml2
-rw-r--r--doc/classes/EditorTranslationParserPlugin.xml2
-rw-r--r--doc/classes/EditorVCSInterface.xml2
-rw-r--r--doc/classes/EncodedObjectAsID.xml4
-rw-r--r--doc/classes/Engine.xml2
-rw-r--r--doc/classes/EngineDebugger.xml2
-rw-r--r--doc/classes/Expression.xml2
-rw-r--r--doc/classes/FileSystemDock.xml2
-rw-r--r--doc/classes/Font.xml2
-rw-r--r--doc/classes/FontData.xml2
-rw-r--r--doc/classes/GPUParticlesAttractor3D.xml4
-rw-r--r--doc/classes/GPUParticlesAttractorBox.xml4
-rw-r--r--doc/classes/GPUParticlesAttractorSphere.xml4
-rw-r--r--doc/classes/GPUParticlesAttractorVectorField.xml4
-rw-r--r--doc/classes/GPUParticlesCollision3D.xml4
-rw-r--r--doc/classes/GPUParticlesCollisionBox.xml4
-rw-r--r--doc/classes/GPUParticlesCollisionHeightField.xml2
-rw-r--r--doc/classes/GPUParticlesCollisionSDF.xml2
-rw-r--r--doc/classes/GPUParticlesCollisionSphere.xml4
-rw-r--r--doc/classes/Geometry3D.xml2
-rw-r--r--doc/classes/Gradient.xml2
-rw-r--r--doc/classes/GradientTexture.xml4
-rw-r--r--doc/classes/GraphEdit.xml2
-rw-r--r--doc/classes/GridContainer.xml4
-rw-r--r--doc/classes/GrooveJoint2D.xml4
-rw-r--r--doc/classes/HBoxContainer.xml4
-rw-r--r--doc/classes/HMACContext.xml2
-rw-r--r--doc/classes/HScrollBar.xml4
-rw-r--r--doc/classes/HSeparator.xml4
-rw-r--r--doc/classes/HSlider.xml4
-rw-r--r--doc/classes/HSplitContainer.xml4
-rw-r--r--doc/classes/HeightMapShape3D.xml4
-rw-r--r--doc/classes/ImageTexture.xml2
-rw-r--r--doc/classes/ImageTexture3D.xml2
-rw-r--r--doc/classes/ImageTextureLayered.xml2
-rw-r--r--doc/classes/ImmediateMesh.xml2
-rw-r--r--doc/classes/InputEvent.xml2
-rw-r--r--doc/classes/InputEventAction.xml4
-rw-r--r--doc/classes/InputEventFromWindow.xml4
-rw-r--r--doc/classes/InputEventGesture.xml4
-rw-r--r--doc/classes/InputEventJoypadButton.xml4
-rw-r--r--doc/classes/InputEventJoypadMotion.xml4
-rw-r--r--doc/classes/InputEventKey.xml2
-rw-r--r--doc/classes/InputEventMIDI.xml4
-rw-r--r--doc/classes/InputEventMagnifyGesture.xml4
-rw-r--r--doc/classes/InputEventMouse.xml4
-rw-r--r--doc/classes/InputEventMouseButton.xml4
-rw-r--r--doc/classes/InputEventMouseMotion.xml4
-rw-r--r--doc/classes/InputEventPanGesture.xml4
-rw-r--r--doc/classes/InputEventScreenDrag.xml4
-rw-r--r--doc/classes/InputEventScreenTouch.xml4
-rw-r--r--doc/classes/InputEventShortcut.xml4
-rw-r--r--doc/classes/InputEventWithModifiers.xml4
-rw-r--r--doc/classes/InputMap.xml2
-rw-r--r--doc/classes/InstancePlaceholder.xml2
-rw-r--r--doc/classes/IntervalTweener.xml4
-rw-r--r--doc/classes/JNISingleton.xml4
-rw-r--r--doc/classes/JSON.xml2
-rw-r--r--doc/classes/JavaClass.xml4
-rw-r--r--doc/classes/JavaClassWrapper.xml2
-rw-r--r--doc/classes/JavaScript.xml2
-rw-r--r--doc/classes/JavaScriptObject.xml4
-rw-r--r--doc/classes/Joint2D.xml4
-rw-r--r--doc/classes/Joint3D.xml4
-rw-r--r--doc/classes/KinematicCollision2D.xml2
-rw-r--r--doc/classes/KinematicCollision3D.xml2
-rw-r--r--doc/classes/LightOccluder2D.xml4
-rw-r--r--doc/classes/LightmapGI.xml2
-rw-r--r--doc/classes/LightmapGIData.xml2
-rw-r--r--doc/classes/LightmapProbe.xml4
-rw-r--r--doc/classes/Lightmapper.xml4
-rw-r--r--doc/classes/LightmapperRD.xml4
-rw-r--r--doc/classes/MarginContainer.xml4
-rw-r--r--doc/classes/Marshalls.xml2
-rw-r--r--doc/classes/MenuButton.xml2
-rw-r--r--doc/classes/MeshDataTool.xml2
-rw-r--r--doc/classes/MeshInstance2D.xml4
-rw-r--r--doc/classes/MeshInstance3D.xml2
-rw-r--r--doc/classes/MeshLibrary.xml2
-rw-r--r--doc/classes/MeshTexture.xml4
-rw-r--r--doc/classes/MethodTweener.xml2
-rw-r--r--doc/classes/MultiMeshInstance2D.xml4
-rw-r--r--doc/classes/MultiMeshInstance3D.xml4
-rw-r--r--doc/classes/MultiplayerAPI.xml2
-rw-r--r--doc/classes/Mutex.xml2
-rw-r--r--doc/classes/NavigationAgent2D.xml2
-rw-r--r--doc/classes/NavigationAgent3D.xml2
-rw-r--r--doc/classes/NavigationMeshGenerator.xml2
-rw-r--r--doc/classes/NavigationObstacle2D.xml4
-rw-r--r--doc/classes/NavigationObstacle3D.xml4
-rw-r--r--doc/classes/NavigationPolygon.xml2
-rw-r--r--doc/classes/NavigationRegion2D.xml4
-rw-r--r--doc/classes/NavigationRegion3D.xml2
-rw-r--r--doc/classes/NavigationServer2D.xml2
-rw-r--r--doc/classes/NavigationServer3D.xml2
-rw-r--r--doc/classes/Node2D.xml2
-rw-r--r--doc/classes/Node3DGizmo.xml4
-rw-r--r--doc/classes/NodePath.xml2
-rw-r--r--doc/classes/ORMMaterial3D.xml4
-rw-r--r--doc/classes/OS.xml10
-rw-r--r--doc/classes/Occluder3D.xml4
-rw-r--r--doc/classes/OccluderInstance3D.xml2
-rw-r--r--doc/classes/OccluderPolygon2D.xml2
-rw-r--r--doc/classes/OmniLight3D.xml2
-rw-r--r--doc/classes/OptimizedTranslation.xml2
-rw-r--r--doc/classes/OptionButton.xml2
-rw-r--r--doc/classes/PCKPacker.xml2
-rw-r--r--doc/classes/PackedByteArray.xml2
-rw-r--r--doc/classes/PackedColorArray.xml2
-rw-r--r--doc/classes/PackedDataContainer.xml2
-rw-r--r--doc/classes/PackedDataContainerRef.xml2
-rw-r--r--doc/classes/PackedFloat32Array.xml2
-rw-r--r--doc/classes/PackedFloat64Array.xml2
-rw-r--r--doc/classes/PackedInt32Array.xml2
-rw-r--r--doc/classes/PackedInt64Array.xml2
-rw-r--r--doc/classes/PackedStringArray.xml2
-rw-r--r--doc/classes/PackedVector2Array.xml2
-rw-r--r--doc/classes/PackedVector3Array.xml2
-rw-r--r--doc/classes/PacketPeer.xml2
-rw-r--r--doc/classes/PacketPeerStream.xml4
-rw-r--r--doc/classes/PacketPeerUDP.xml2
-rw-r--r--doc/classes/Panel.xml2
-rw-r--r--doc/classes/PanelContainer.xml4
-rw-r--r--doc/classes/PanoramaSkyMaterial.xml4
-rw-r--r--doc/classes/ParallaxBackground.xml4
-rw-r--r--doc/classes/ParallaxLayer.xml4
-rw-r--r--doc/classes/Path2D.xml4
-rw-r--r--doc/classes/Path3D.xml4
-rw-r--r--doc/classes/PathFollow2D.xml4
-rw-r--r--doc/classes/PathFollow3D.xml2
-rw-r--r--doc/classes/PhysicalBone2D.xml2
-rw-r--r--doc/classes/PhysicalSkyMaterial.xml4
-rw-r--r--doc/classes/PhysicsBody2D.xml2
-rw-r--r--doc/classes/PhysicsBody3D.xml2
-rw-r--r--doc/classes/PhysicsDirectBodyState2D.xml2
-rw-r--r--doc/classes/PhysicsDirectBodyState3D.xml2
-rw-r--r--doc/classes/PhysicsDirectSpaceState2D.xml2
-rw-r--r--doc/classes/PhysicsDirectSpaceState3D.xml2
-rw-r--r--doc/classes/PhysicsMaterial.xml4
-rw-r--r--doc/classes/PhysicsShapeQueryParameters2D.xml4
-rw-r--r--doc/classes/PhysicsShapeQueryParameters3D.xml4
-rw-r--r--doc/classes/PhysicsTestMotionResult2D.xml4
-rw-r--r--doc/classes/PhysicsTestMotionResult3D.xml4
-rw-r--r--doc/classes/PinJoint2D.xml4
-rw-r--r--doc/classes/PlaneMesh.xml4
-rw-r--r--doc/classes/PointLight2D.xml4
-rw-r--r--doc/classes/PointMesh.xml4
-rw-r--r--doc/classes/Polygon2D.xml2
-rw-r--r--doc/classes/PolygonPathFinder.xml2
-rw-r--r--doc/classes/Popup.xml4
-rw-r--r--doc/classes/PopupMenu.xml2
-rw-r--r--doc/classes/PopupPanel.xml4
-rw-r--r--doc/classes/Position2D.xml4
-rw-r--r--doc/classes/Position3D.xml4
-rw-r--r--doc/classes/PrimitiveMesh.xml2
-rw-r--r--doc/classes/PrismMesh.xml4
-rw-r--r--doc/classes/ProceduralSkyMaterial.xml4
-rw-r--r--doc/classes/ProgressBar.xml4
-rw-r--r--doc/classes/ProjectSettings.xml4
-rw-r--r--doc/classes/PropertyTweener.xml2
-rw-r--r--doc/classes/ProxyTexture.xml4
-rw-r--r--doc/classes/QuadMesh.xml4
-rw-r--r--doc/classes/RDAttachmentFormat.xml4
-rw-r--r--doc/classes/RDFramebufferPass.xml2
-rw-r--r--doc/classes/RDPipelineColorBlendState.xml4
-rw-r--r--doc/classes/RDPipelineColorBlendStateAttachment.xml2
-rw-r--r--doc/classes/RDPipelineDepthStencilState.xml4
-rw-r--r--doc/classes/RDPipelineMultisampleState.xml4
-rw-r--r--doc/classes/RDPipelineRasterizationState.xml4
-rw-r--r--doc/classes/RDPipelineSpecializationConstant.xml4
-rw-r--r--doc/classes/RDSamplerState.xml4
-rw-r--r--doc/classes/RDShaderFile.xml2
-rw-r--r--doc/classes/RDShaderSPIRV.xml2
-rw-r--r--doc/classes/RDShaderSource.xml2
-rw-r--r--doc/classes/RDTextureFormat.xml2
-rw-r--r--doc/classes/RDTextureView.xml4
-rw-r--r--doc/classes/RDUniform.xml2
-rw-r--r--doc/classes/RDVertexAttribute.xml4
-rw-r--r--doc/classes/RID.xml2
-rw-r--r--doc/classes/RandomNumberGenerator.xml2
-rw-r--r--doc/classes/Range.xml2
-rw-r--r--doc/classes/RayCast2D.xml2
-rw-r--r--doc/classes/RayCast3D.xml2
-rw-r--r--doc/classes/Rect2.xml2
-rw-r--r--doc/classes/Rect2i.xml2
-rw-r--r--doc/classes/RectangleShape2D.xml4
-rw-r--r--doc/classes/RefCounted.xml2
-rw-r--r--doc/classes/ReferenceRect.xml4
-rw-r--r--doc/classes/ReflectionProbe.xml2
-rw-r--r--doc/classes/RemoteTransform2D.xml2
-rw-r--r--doc/classes/RemoteTransform3D.xml2
-rw-r--r--doc/classes/Resource.xml2
-rw-r--r--doc/classes/ResourceFormatSaver.xml2
-rw-r--r--doc/classes/ResourceImporter.xml2
-rw-r--r--doc/classes/ResourcePreloader.xml2
-rw-r--r--doc/classes/RibbonTrailMesh.xml2
-rw-r--r--doc/classes/RichTextEffect.xml2
-rw-r--r--doc/classes/RootMotionView.xml4
-rw-r--r--doc/classes/SceneTree.xml6
-rw-r--r--doc/classes/SceneTreeTimer.xml4
-rw-r--r--doc/classes/Script.xml2
-rw-r--r--doc/classes/ScriptCreateDialog.xml2
-rw-r--r--doc/classes/ScriptEditor.xml2
-rw-r--r--doc/classes/ScriptEditorBase.xml2
-rw-r--r--doc/classes/ScrollBar.xml4
-rw-r--r--doc/classes/ScrollContainer.xml2
-rw-r--r--doc/classes/SegmentShape2D.xml4
-rw-r--r--doc/classes/Semaphore.xml2
-rw-r--r--doc/classes/SeparationRayShape2D.xml4
-rw-r--r--doc/classes/SeparationRayShape3D.xml4
-rw-r--r--doc/classes/Separator.xml4
-rw-r--r--doc/classes/ShaderGlobalsOverride.xml4
-rw-r--r--doc/classes/ShaderMaterial.xml2
-rw-r--r--doc/classes/Shape2D.xml2
-rw-r--r--doc/classes/Shape3D.xml2
-rw-r--r--doc/classes/Shortcut.xml2
-rw-r--r--doc/classes/Signal.xml2
-rw-r--r--doc/classes/Skeleton2D.xml2
-rw-r--r--doc/classes/SkeletonIK3D.xml2
-rw-r--r--doc/classes/SkeletonModification2D.xml2
-rw-r--r--doc/classes/SkeletonModification2DCCDIK.xml2
-rw-r--r--doc/classes/SkeletonModification2DFABRIK.xml2
-rw-r--r--doc/classes/SkeletonModification2DJiggle.xml2
-rw-r--r--doc/classes/SkeletonModification2DLookAt.xml2
-rw-r--r--doc/classes/SkeletonModification2DPhysicalBones.xml2
-rw-r--r--doc/classes/SkeletonModification2DStackHolder.xml2
-rw-r--r--doc/classes/SkeletonModification2DTwoBoneIK.xml2
-rw-r--r--doc/classes/SkeletonModification3D.xml2
-rw-r--r--doc/classes/SkeletonModification3DCCDIK.xml2
-rw-r--r--doc/classes/SkeletonModification3DFABRIK.xml2
-rw-r--r--doc/classes/SkeletonModification3DJiggle.xml2
-rw-r--r--doc/classes/SkeletonModification3DLookAt.xml2
-rw-r--r--doc/classes/SkeletonModification3DStackHolder.xml2
-rw-r--r--doc/classes/SkeletonModification3DTwoBoneIK.xml2
-rw-r--r--doc/classes/SkeletonModificationStack2D.xml2
-rw-r--r--doc/classes/SkeletonModificationStack3D.xml2
-rw-r--r--doc/classes/Skin.xml2
-rw-r--r--doc/classes/SkinReference.xml2
-rw-r--r--doc/classes/Sky.xml2
-rw-r--r--doc/classes/Slider.xml4
-rw-r--r--doc/classes/SphereMesh.xml4
-rw-r--r--doc/classes/SphereShape3D.xml4
-rw-r--r--doc/classes/SpinBox.xml5
-rw-r--r--doc/classes/SpotLight3D.xml4
-rw-r--r--doc/classes/SpringArm3D.xml2
-rw-r--r--doc/classes/Sprite2D.xml2
-rw-r--r--doc/classes/Sprite3D.xml4
-rw-r--r--doc/classes/SpriteFrames.xml2
-rw-r--r--doc/classes/StandardMaterial3D.xml4
-rw-r--r--doc/classes/StaticBody2D.xml4
-rw-r--r--doc/classes/StaticBody3D.xml4
-rw-r--r--doc/classes/StreamCubemap.xml4
-rw-r--r--doc/classes/StreamCubemapArray.xml4
-rw-r--r--doc/classes/StreamPeer.xml2
-rw-r--r--doc/classes/StreamPeerBuffer.xml2
-rw-r--r--doc/classes/StreamTexture2D.xml2
-rw-r--r--doc/classes/StreamTexture2DArray.xml4
-rw-r--r--doc/classes/StreamTexture3D.xml2
-rw-r--r--doc/classes/StreamTextureLayered.xml2
-rw-r--r--doc/classes/String.xml2
-rw-r--r--doc/classes/StringName.xml2
-rw-r--r--doc/classes/StyleBox.xml2
-rw-r--r--doc/classes/StyleBoxEmpty.xml4
-rw-r--r--doc/classes/StyleBoxFlat.xml2
-rw-r--r--doc/classes/StyleBoxLine.xml4
-rw-r--r--doc/classes/SubViewport.xml2
-rw-r--r--doc/classes/SubViewportContainer.xml4
-rw-r--r--doc/classes/SyntaxHighlighter.xml2
-rw-r--r--doc/classes/TCPServer.xml2
-rw-r--r--doc/classes/TextServer.xml6
-rw-r--r--doc/classes/TextServerManager.xml2
-rw-r--r--doc/classes/Texture.xml4
-rw-r--r--doc/classes/Texture2D.xml2
-rw-r--r--doc/classes/Texture2DArray.xml4
-rw-r--r--doc/classes/Texture3D.xml2
-rw-r--r--doc/classes/TextureButton.xml2
-rw-r--r--doc/classes/TextureRect.xml2
-rw-r--r--doc/classes/TileData.xml2
-rw-r--r--doc/classes/TileSetAtlasSource.xml2
-rw-r--r--doc/classes/TileSetScenesCollectionSource.xml2
-rw-r--r--doc/classes/TileSetSource.xml2
-rw-r--r--doc/classes/Transform2D.xml46
-rw-r--r--doc/classes/Translation.xml2
-rw-r--r--doc/classes/TranslationServer.xml2
-rw-r--r--doc/classes/TriangleMesh.xml4
-rw-r--r--doc/classes/TubeTrailMesh.xml4
-rw-r--r--doc/classes/Tweener.xml4
-rw-r--r--doc/classes/UDPServer.xml2
-rw-r--r--doc/classes/VBoxContainer.xml4
-rw-r--r--doc/classes/VScrollBar.xml4
-rw-r--r--doc/classes/VSeparator.xml4
-rw-r--r--doc/classes/VSlider.xml4
-rw-r--r--doc/classes/VSplitContainer.xml4
-rw-r--r--doc/classes/Variant.xml4
-rw-r--r--doc/classes/VehicleBody3D.xml4
-rw-r--r--doc/classes/VehicleWheel3D.xml2
-rw-r--r--doc/classes/VelocityTracker3D.xml2
-rw-r--r--doc/classes/VideoPlayer.xml2
-rw-r--r--doc/classes/VideoStream.xml4
-rw-r--r--doc/classes/ViewportTexture.xml4
-rw-r--r--doc/classes/VisibleOnScreenEnabler2D.xml2
-rw-r--r--doc/classes/VisibleOnScreenEnabler3D.xml2
-rw-r--r--doc/classes/VisibleOnScreenNotifier2D.xml2
-rw-r--r--doc/classes/VisibleOnScreenNotifier3D.xml2
-rw-r--r--doc/classes/VisualInstance3D.xml2
-rw-r--r--doc/classes/VisualScriptCustomNodes.xml2
-rw-r--r--doc/classes/VisualShaderNodeBillboard.xml2
-rw-r--r--doc/classes/VisualShaderNodeBooleanConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeBooleanUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeClamp.xml2
-rw-r--r--doc/classes/VisualShaderNodeColorConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeColorFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeColorOp.xml2
-rw-r--r--doc/classes/VisualShaderNodeColorUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeComment.xml4
-rw-r--r--doc/classes/VisualShaderNodeCompare.xml2
-rw-r--r--doc/classes/VisualShaderNodeConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeCubemap.xml2
-rw-r--r--doc/classes/VisualShaderNodeCubemapUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeCurveTexture.xml4
-rw-r--r--doc/classes/VisualShaderNodeCurveXYZTexture.xml4
-rw-r--r--doc/classes/VisualShaderNodeCustom.xml2
-rw-r--r--doc/classes/VisualShaderNodeDeterminant.xml4
-rw-r--r--doc/classes/VisualShaderNodeDotProduct.xml4
-rw-r--r--doc/classes/VisualShaderNodeExpression.xml4
-rw-r--r--doc/classes/VisualShaderNodeFaceForward.xml4
-rw-r--r--doc/classes/VisualShaderNodeFloatConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeFloatFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeFloatOp.xml2
-rw-r--r--doc/classes/VisualShaderNodeFloatUniform.xml2
-rw-r--r--doc/classes/VisualShaderNodeFresnel.xml4
-rw-r--r--doc/classes/VisualShaderNodeGlobalExpression.xml4
-rw-r--r--doc/classes/VisualShaderNodeGroupBase.xml2
-rw-r--r--doc/classes/VisualShaderNodeIf.xml4
-rw-r--r--doc/classes/VisualShaderNodeInput.xml2
-rw-r--r--doc/classes/VisualShaderNodeIntConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeIntFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeIntOp.xml2
-rw-r--r--doc/classes/VisualShaderNodeIntUniform.xml2
-rw-r--r--doc/classes/VisualShaderNodeIs.xml2
-rw-r--r--doc/classes/VisualShaderNodeMix.xml2
-rw-r--r--doc/classes/VisualShaderNodeMultiplyAdd.xml2
-rw-r--r--doc/classes/VisualShaderNodeOuterProduct.xml4
-rw-r--r--doc/classes/VisualShaderNodeOutput.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleAccelerator.xml2
-rw-r--r--doc/classes/VisualShaderNodeParticleBoxEmitter.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleConeVelocity.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleEmit.xml2
-rw-r--r--doc/classes/VisualShaderNodeParticleEmitter.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleOutput.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleRandomness.xml2
-rw-r--r--doc/classes/VisualShaderNodeParticleRingEmitter.xml4
-rw-r--r--doc/classes/VisualShaderNodeParticleSphereEmitter.xml4
-rw-r--r--doc/classes/VisualShaderNodeResizableBase.xml4
-rw-r--r--doc/classes/VisualShaderNodeSDFRaymarch.xml4
-rw-r--r--doc/classes/VisualShaderNodeSDFToScreenUV.xml4
-rw-r--r--doc/classes/VisualShaderNodeSample3D.xml2
-rw-r--r--doc/classes/VisualShaderNodeScalarDerivativeFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeScreenUVToSDF.xml4
-rw-r--r--doc/classes/VisualShaderNodeSmoothStep.xml2
-rw-r--r--doc/classes/VisualShaderNodeStep.xml2
-rw-r--r--doc/classes/VisualShaderNodeSwitch.xml2
-rw-r--r--doc/classes/VisualShaderNodeTexture.xml2
-rw-r--r--doc/classes/VisualShaderNodeTexture2DArray.xml4
-rw-r--r--doc/classes/VisualShaderNodeTexture2DArrayUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeTexture3D.xml4
-rw-r--r--doc/classes/VisualShaderNodeTexture3DUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeTextureSDF.xml4
-rw-r--r--doc/classes/VisualShaderNodeTextureSDFNormal.xml4
-rw-r--r--doc/classes/VisualShaderNodeTextureUniform.xml2
-rw-r--r--doc/classes/VisualShaderNodeTextureUniformTriplanar.xml4
-rw-r--r--doc/classes/VisualShaderNodeTransformCompose.xml4
-rw-r--r--doc/classes/VisualShaderNodeTransformConstant.xml4
-rw-r--r--doc/classes/VisualShaderNodeTransformDecompose.xml4
-rw-r--r--doc/classes/VisualShaderNodeTransformFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeTransformOp.xml2
-rw-r--r--doc/classes/VisualShaderNodeTransformUniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeTransformVecMult.xml2
-rw-r--r--doc/classes/VisualShaderNodeUVFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeUniform.xml2
-rw-r--r--doc/classes/VisualShaderNodeUniformRef.xml4
-rw-r--r--doc/classes/VisualShaderNodeVec3Constant.xml4
-rw-r--r--doc/classes/VisualShaderNodeVec3Uniform.xml4
-rw-r--r--doc/classes/VisualShaderNodeVectorCompose.xml4
-rw-r--r--doc/classes/VisualShaderNodeVectorDecompose.xml4
-rw-r--r--doc/classes/VisualShaderNodeVectorDerivativeFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeVectorDistance.xml4
-rw-r--r--doc/classes/VisualShaderNodeVectorFunc.xml2
-rw-r--r--doc/classes/VisualShaderNodeVectorLen.xml4
-rw-r--r--doc/classes/VisualShaderNodeVectorOp.xml2
-rw-r--r--doc/classes/VisualShaderNodeVectorRefract.xml4
-rw-r--r--doc/classes/VoxelGIData.xml2
-rw-r--r--doc/classes/WeakRef.xml2
-rw-r--r--doc/classes/World2D.xml4
-rw-r--r--doc/classes/World3D.xml4
-rw-r--r--doc/classes/WorldBoundaryShape2D.xml4
-rw-r--r--doc/classes/WorldBoundaryShape3D.xml4
-rw-r--r--doc/classes/WorldEnvironment.xml4
-rw-r--r--doc/classes/X509Certificate.xml2
-rw-r--r--doc/classes/XRAnchor3D.xml2
-rw-r--r--doc/classes/XRCamera3D.xml4
-rw-r--r--doc/classes/XRController3D.xml2
-rw-r--r--doc/classes/XRInterfaceExtension.xml2
-rw-r--r--doc/classes/XROrigin3D.xml4
-rw-r--r--doc/classes/bool.xml2
-rw-r--r--doc/classes/float.xml2
-rw-r--r--doc/classes/int.xml2
-rw-r--r--editor/action_map_editor.cpp47
-rw-r--r--editor/action_map_editor.h2
-rw-r--r--editor/code_editor.cpp9
-rw-r--r--editor/code_editor.h2
-rw-r--r--editor/debugger/script_editor_debugger.cpp3
-rw-r--r--editor/doc_tools.cpp167
-rw-r--r--editor/editor_data.cpp4
-rw-r--r--editor/editor_node.cpp124
-rw-r--r--editor/editor_resource_picker.cpp20
-rw-r--r--editor/editor_resource_picker.h4
-rw-r--r--editor/editor_settings.cpp60
-rw-r--r--editor/editor_settings.h1
-rw-r--r--editor/import/resource_importer_obj.h3
-rw-r--r--editor/import/resource_importer_texture_atlas.cpp4
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp75
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.h18
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp32
-rw-r--r--editor/plugins/script_editor_plugin.cpp42
-rw-r--r--editor/plugins/script_editor_plugin.h2
-rw-r--r--editor/plugins/script_text_editor.cpp34
-rw-r--r--editor/settings_config_dialog.cpp4
-rw-r--r--editor/translations/af.po324
-rw-r--r--editor/translations/ar.po722
-rw-r--r--editor/translations/az.po350
-rw-r--r--editor/translations/bg.po985
-rw-r--r--editor/translations/bn.po366
-rw-r--r--editor/translations/br.po316
-rw-r--r--editor/translations/ca.po368
-rw-r--r--editor/translations/cs.po399
-rw-r--r--editor/translations/da.po329
-rw-r--r--editor/translations/de.po454
-rw-r--r--editor/translations/editor.pot315
-rw-r--r--editor/translations/el.po387
-rw-r--r--editor/translations/eo.po552
-rw-r--r--editor/translations/es.po460
-rw-r--r--editor/translations/es_AR.po803
-rw-r--r--editor/translations/et.po329
-rw-r--r--editor/translations/eu.po322
-rw-r--r--editor/translations/fa.po369
-rw-r--r--editor/translations/fi.po1160
-rw-r--r--editor/translations/fil.po317
-rw-r--r--editor/translations/fr.po515
-rw-r--r--editor/translations/ga.po316
-rw-r--r--editor/translations/gl.po373
-rw-r--r--editor/translations/he.po364
-rw-r--r--editor/translations/hi.po329
-rw-r--r--editor/translations/hr.po349
-rw-r--r--editor/translations/hu.po346
-rw-r--r--editor/translations/id.po816
-rw-r--r--editor/translations/is.po321
-rw-r--r--editor/translations/it.po587
-rw-r--r--editor/translations/ja.po1453
-rw-r--r--editor/translations/ka.po324
-rw-r--r--editor/translations/km.po316
-rw-r--r--editor/translations/ko.po1996
-rw-r--r--editor/translations/lt.po324
-rw-r--r--editor/translations/lv.po323
-rw-r--r--editor/translations/mi.po315
-rw-r--r--editor/translations/mk.po315
-rw-r--r--editor/translations/ml.po316
-rw-r--r--editor/translations/mr.po316
-rw-r--r--editor/translations/ms.po355
-rw-r--r--editor/translations/nb.po362
-rw-r--r--editor/translations/nl.po387
-rw-r--r--editor/translations/or.po315
-rw-r--r--editor/translations/pl.po1372
-rw-r--r--editor/translations/pr.po326
-rw-r--r--editor/translations/pt.po1374
-rw-r--r--editor/translations/pt_BR.po532
-rw-r--r--editor/translations/ro.po334
-rw-r--r--editor/translations/ru.po440
-rw-r--r--editor/translations/si.po318
-rw-r--r--editor/translations/sk.po331
-rw-r--r--editor/translations/sl.po329
-rw-r--r--editor/translations/sq.po327
-rw-r--r--editor/translations/sr_Cyrl.po368
-rw-r--r--editor/translations/sr_Latn.po324
-rw-r--r--editor/translations/sv.po355
-rw-r--r--editor/translations/ta.po320
-rw-r--r--editor/translations/te.po315
-rw-r--r--editor/translations/th.po383
-rw-r--r--editor/translations/tr.po763
-rw-r--r--editor/translations/tt.po315
-rw-r--r--editor/translations/tzm.po315
-rw-r--r--editor/translations/uk.po434
-rw-r--r--editor/translations/ur_PK.po324
-rw-r--r--editor/translations/vi.po483
-rw-r--r--editor/translations/zh_CN.po524
-rw-r--r--editor/translations/zh_HK.po331
-rw-r--r--editor/translations/zh_TW.po387
-rw-r--r--main/main.cpp8
-rw-r--r--misc/dist/document_icons/shader.svg1
-rw-r--r--misc/dist/document_icons/shader_extra_small.svg1
-rw-r--r--misc/dist/document_icons/shader_small.svg1
-rw-r--r--misc/dist/osx_tools.app/Contents/Info.plist36
-rw-r--r--misc/dist/osx_tools.app/Contents/Resources/Shader.icnsbin0 -> 162062 bytes
-rw-r--r--modules/csg/doc_classes/CSGBox3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGCombiner3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGCylinder3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGMesh3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGPolygon3D.xml2
-rw-r--r--modules/csg/doc_classes/CSGPrimitive3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGSphere3D.xml4
-rw-r--r--modules/csg/doc_classes/CSGTorus3D.xml4
-rw-r--r--modules/enet/doc_classes/ENetMultiplayerPeer.xml2
-rw-r--r--modules/fbx/doc_classes/EditorSceneImporterFBX.xml4
-rw-r--r--modules/gdnative/doc_classes/GDNative.xml2
-rw-r--r--modules/gdnative/doc_classes/GDNativeLibrary.xml2
-rw-r--r--modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml4
-rw-r--r--modules/gdnative/doc_classes/NativeScript.xml2
-rw-r--r--modules/gdnative/doc_classes/PacketPeerGDNative.xml4
-rw-r--r--modules/gdnative/doc_classes/PluginScript.xml2
-rw-r--r--modules/gdnative/doc_classes/StreamPeerGDNative.xml4
-rw-r--r--modules/gdnative/doc_classes/VideoStreamGDNative.xml2
-rw-r--r--modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml4
-rw-r--r--modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml4
-rw-r--r--modules/gdscript/doc_classes/GDScript.xml2
-rw-r--r--modules/gdscript/editor/gdscript_highlighter.cpp8
-rw-r--r--modules/gdscript/editor/gdscript_highlighter.h4
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp1
-rw-r--r--modules/gdscript/gdscript_editor.cpp3
-rw-r--r--modules/gdscript/gdscript_parser.cpp35
-rw-r--r--modules/gdscript/gdscript_parser.h3
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.cpp7
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.h1
-rw-r--r--modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd2
-rw-r--r--modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out2
-rw-r--r--modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd2
-rw-r--r--modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd3
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/brace_syntax.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd5
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd13
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd6
-rw-r--r--modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/export_variable.gd7
-rw-r--r--modules/gdscript/tests/scripts/parser/features/export_variable.out3
-rw-r--r--modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd5
-rw-r--r--modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd5
-rw-r--r--modules/gdscript/tests/scripts/parser/features/function_many_parameters.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_callable.gd4
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_callable.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd4
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd10
-rw-r--r--modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out3
-rw-r--r--modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd5
-rw-r--r--modules/gdscript/tests/scripts/parser/features/nested_function_calls.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd22
-rw-r--r--modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out10
-rw-r--r--modules/gdscript/tests/scripts/parser/features/signal_declaration.gd20
-rw-r--r--modules/gdscript/tests/scripts/parser/features/signal_declaration.out2
-rw-r--r--modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd11
-rw-r--r--modules/gdscript/tests/scripts/parser/features/single_line_declaration.out3
-rw-r--r--modules/gdscript/tests/scripts/parser/features/typed_arrays.gd5
-rw-r--r--modules/gdscript/tests/scripts/parser/features/typed_arrays.out3
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/recursion.gd19
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/recursion.out125
-rw-r--r--modules/gltf/doc_classes/EditorSceneImporterGLTF.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFAccessor.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFAnimation.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFBufferView.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFCamera.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFDocument.xml2
-rw-r--r--modules/gltf/doc_classes/GLTFLight.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFMesh.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFNode.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFSkeleton.xml2
-rw-r--r--modules/gltf/doc_classes/GLTFSkin.xml2
-rw-r--r--modules/gltf/doc_classes/GLTFSpecGloss.xml4
-rw-r--r--modules/gltf/doc_classes/GLTFState.xml2
-rw-r--r--modules/gltf/doc_classes/GLTFTexture.xml4
-rw-r--r--modules/gltf/gltf_document.cpp2
-rw-r--r--modules/lightmapper_rd/lm_compute.glsl73
-rw-r--r--modules/minimp3/doc_classes/AudioStreamMP3.xml4
-rw-r--r--modules/mobile_vr/doc_classes/MobileVRInterface.xml4
-rw-r--r--modules/mobile_vr/mobile_vr_interface.cpp30
-rw-r--r--modules/mobile_vr/mobile_vr_interface.h46
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs6
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs94
-rw-r--r--modules/ogg/doc_classes/OGGPacketSequence.xml2
-rw-r--r--modules/ogg/doc_classes/OGGPacketSequencePlayback.xml4
-rw-r--r--modules/opensimplex/doc_classes/NoiseTexture.xml4
-rw-r--r--modules/opensimplex/doc_classes/OpenSimplexNoise.xml2
-rw-r--r--modules/raycast/raycast_occlusion_cull.cpp123
-rw-r--r--modules/raycast/raycast_occlusion_cull.h17
-rw-r--r--modules/regex/doc_classes/RegEx.xml2
-rw-r--r--modules/regex/doc_classes/RegExMatch.xml2
-rw-r--r--modules/text_server_adv/SCsub1
-rw-r--r--modules/text_server_adv/text_server_adv.cpp22
-rw-r--r--modules/theora/doc_classes/VideoStreamTheora.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScript.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml22
-rw-r--r--modules/visual_script/doc_classes/VisualScriptClassConstant.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptComment.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptComposeArray.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptCondition.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptConstant.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptConstructor.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptDeconstruct.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptEmitSignal.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptExpression.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunction.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunctionCall.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptFunctionState.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIndexGet.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIndexSet.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptInputAction.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptIterator.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptLists.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptLocalVar.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptMathConstant.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptNode.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptOperator.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPreload.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPropertyGet.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptPropertySet.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptResourcePath.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptReturn.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSceneNode.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSceneTree.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSelect.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSelf.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSequence.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSubCall.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptSwitch.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptTypeCast.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptVariableGet.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptVariableSet.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptWhile.xml4
-rw-r--r--modules/visual_script/doc_classes/VisualScriptYield.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptYieldSignal.xml2
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp15
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.h1
-rw-r--r--modules/visual_script/visual_script_editor.cpp13
-rw-r--r--modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml4
-rw-r--r--modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml4
-rw-r--r--modules/webm/doc_classes/VideoStreamWebm.xml2
-rw-r--r--modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml2
-rw-r--r--modules/websocket/doc_classes/WebSocketClient.xml2
-rw-r--r--modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml2
-rw-r--r--modules/websocket/doc_classes/WebSocketServer.xml2
-rw-r--r--modules/webxr/doc_classes/WebXRInterface.xml2
-rw-r--r--modules/webxr/webxr_interface_js.cpp2
-rw-r--r--modules/webxr/webxr_interface_js.h2
-rw-r--r--platform/javascript/audio_driver_javascript.cpp141
-rw-r--r--platform/javascript/audio_driver_javascript.h157
-rw-r--r--platform/javascript/godot_audio.h7
-rw-r--r--platform/javascript/js/libs/audio.worklet.js49
-rw-r--r--platform/javascript/js/libs/library_godot_audio.js118
-rw-r--r--platform/javascript/os_javascript.cpp19
-rw-r--r--platform/javascript/os_javascript.h2
-rw-r--r--platform/windows/display_server_windows.cpp16
-rw-r--r--platform/windows/display_server_windows.h1
-rw-r--r--platform/windows/os_windows.cpp23
-rw-r--r--scene/animation/animation_blend_tree.cpp15
-rw-r--r--scene/animation/animation_tree.cpp2
-rw-r--r--scene/gui/code_edit.cpp23
-rw-r--r--scene/gui/code_edit.h2
-rw-r--r--scene/gui/container.cpp5
-rw-r--r--scene/gui/label.cpp102
-rw-r--r--scene/gui/menu_button.cpp8
-rw-r--r--scene/gui/rich_text_effect.cpp8
-rw-r--r--scene/gui/rich_text_effect.h14
-rw-r--r--scene/gui/rich_text_label.cpp161
-rw-r--r--scene/gui/rich_text_label.h3
-rw-r--r--scene/gui/spin_box.cpp31
-rw-r--r--scene/gui/spin_box.h6
-rw-r--r--scene/gui/tab_container.cpp2
-rw-r--r--scene/main/viewport.cpp17
-rw-r--r--scene/resources/canvas_item_material.cpp3
-rw-r--r--scene/resources/canvas_item_material.h1
-rw-r--r--scene/resources/font.cpp51
-rw-r--r--scene/resources/material.cpp9
-rw-r--r--scene/resources/material.h1
-rw-r--r--scene/resources/packed_scene.cpp3
-rw-r--r--scene/resources/particles_material.cpp3
-rw-r--r--scene/resources/particles_material.h1
-rw-r--r--servers/rendering/renderer_scene_occlusion_cull.h24
-rw-r--r--servers/rendering/shader_language.cpp9
-rw-r--r--servers/text_server.cpp2
-rw-r--r--servers/text_server.h1
-rw-r--r--servers/xr/xr_interface.h2
-rw-r--r--servers/xr/xr_interface_extension.cpp4
-rw-r--r--servers/xr/xr_interface_extension.h6
-rw-r--r--servers/xr_server.cpp4
-rw-r--r--servers/xr_server.h6
-rw-r--r--tests/test_code_edit.h2255
-rw-r--r--tests/test_macros.h37
-rw-r--r--thirdparty/README.md4
-rw-r--r--thirdparty/harfbuzz/COPYING4
-rw-r--r--thirdparty/harfbuzz/NEWS2457
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-common.hh11
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh16
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh21
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout.cc13
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-ltag-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-algs.hh42
-rw-r--r--thirdparty/harfbuzz/src/hb-array.hh51
-rw-r--r--thirdparty/harfbuzz/src/hb-bimap.hh5
-rw-r--r--thirdparty/harfbuzz/src/hb-bit-page.hh203
-rw-r--r--thirdparty/harfbuzz/src/hb-bit-set-invertible.hh354
-rw-r--r--thirdparty/harfbuzz/src/hb-bit-set.hh808
-rw-r--r--thirdparty/harfbuzz/src/hb-blob.cc123
-rw-r--r--thirdparty/harfbuzz/src/hb-blob.h10
-rw-r--r--thirdparty/harfbuzz/src/hb-blob.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh1189
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh1437
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.cc99
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.hh17
-rw-r--r--thirdparty/harfbuzz/src/hb-cache.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-cff-interp-common.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-common.cc33
-rw-r--r--thirdparty/harfbuzz/src/hb-common.h14
-rw-r--r--thirdparty/harfbuzz/src/hb-config.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-coretext.cc50
-rw-r--r--thirdparty/harfbuzz/src/hb-debug.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-deprecated.h3
-rw-r--r--thirdparty/harfbuzz/src/hb-directwrite.cc264
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-face.cc102
-rw-r--r--thirdparty/harfbuzz/src/hb-font.cc79
-rw-r--r--thirdparty/harfbuzz/src/hb-ft.cc48
-rw-r--r--thirdparty/harfbuzz/src/hb-gdi.cc6
-rw-r--r--thirdparty/harfbuzz/src/hb-glib.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-gobject-structs.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-graphite2.cc13
-rw-r--r--thirdparty/harfbuzz/src/hb-icu.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-iter.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-machinery.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-map.cc7
-rw-r--r--thirdparty/harfbuzz/src/hb-map.hh26
-rw-r--r--thirdparty/harfbuzz/src/hb-meta.hh31
-rw-r--r--thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc177
-rw-r--r--thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh96
-rw-r--r--thirdparty/harfbuzz/src/hb-mutex.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-null.hh20
-rw-r--r--thirdparty/harfbuzz/src/hb-object.hh25
-rw-r--r--thirdparty/harfbuzz/src/hb-open-file.hh68
-rw-r--r--thirdparty/harfbuzz/src/hb-open-type.hh146
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff-common.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff1-table.hh7
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cmap-table.hh256
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh890
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh101
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh127
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh10
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-face-table-list.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-font.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-gasp-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-glyf-table.hh140
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh36
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-common.hh641
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh42
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh622
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh322
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh643
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh32
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.cc184
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.hh3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-map.cc36
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math-table.hh44
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-maxp-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-meta-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name-table.hh17
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name.cc9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-os2-table.hh25
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh130
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-post-table.hh36
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh12
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh38
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc42
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh665
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc7
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh1034
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh76
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape.cc88
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape.hh1
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-stat-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-tag-table.hh27
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-tag.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh42
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-vorg-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-pool.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-priority-queue.hh151
-rw-r--r--thirdparty/harfbuzz/src/hb-repacker.hh769
-rw-r--r--thirdparty/harfbuzz/src/hb-sanitize.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-serialize.hh146
-rw-r--r--thirdparty/harfbuzz/src/hb-set-digest.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-set.cc62
-rw-r--r--thirdparty/harfbuzz/src/hb-set.h6
-rw-r--r--thirdparty/harfbuzz/src/hb-set.hh875
-rw-r--r--thirdparty/harfbuzz/src/hb-shape-plan.cc20
-rw-r--r--thirdparty/harfbuzz/src/hb-shape-plan.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-shape.cc16
-rw-r--r--thirdparty/harfbuzz/src/hb-shaper.cc16
-rw-r--r--thirdparty/harfbuzz/src/hb-static.cc1
-rw-r--r--thirdparty/harfbuzz/src/hb-style.cc64
-rw-r--r--thirdparty/harfbuzz/src/hb-style.h42
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff-common.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff-common.hh13
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff1.cc14
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff2.cc8
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-input.cc328
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-input.hh55
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.cc380
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.hh25
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.cc227
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.h123
-rw-r--r--thirdparty/harfbuzz/src/hb-ucd-table.hh6580
-rw-r--r--thirdparty/harfbuzz/src/hb-ucd.cc10
-rw-r--r--thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh72
-rw-r--r--thirdparty/harfbuzz/src/hb-unicode.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-unicode.hh11
-rw-r--r--thirdparty/harfbuzz/src/hb-uniscribe.cc249
-rw-r--r--thirdparty/harfbuzz/src/hb-vector.hh11
-rw-r--r--thirdparty/harfbuzz/src/hb-version.h6
-rw-r--r--thirdparty/harfbuzz/src/hb.hh40
1015 files changed, 38904 insertions, 26241 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index e46cc6f3f4..da60213038 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -1379,7 +1379,7 @@ License: HarfBuzz
Copyright (C) 2009 Keith Stribley
Copyright (C) 2009 Martin Hosken and SIL International
Copyright (C) 2007 Chris Wilson
- Copyright (C) 2006 Behdad Esfahbod
+ Copyright (C) 2005,2006,2020,2021 Behdad Esfahbod
Copyright (C) 2005 David Turner
Copyright (C) 2004,2007,2008,2009,2010 Red Hat, Inc.
Copyright (C) 1998-2004 David Turner and Werner Lemberg
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index 03892d1d4f..09f9f84728 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -55,11 +55,7 @@ String ProjectSettings::get_resource_path() const {
const String ProjectSettings::IMPORTED_FILES_PATH("res://.godot/imported");
String ProjectSettings::localize_path(const String &p_path) const {
- if (resource_path == "") {
- return p_path; //not initialized yet
- }
-
- if (p_path.begins_with("res://") || p_path.begins_with("user://") ||
+ if (resource_path.is_empty() || p_path.begins_with("res://") || p_path.begins_with("user://") ||
(p_path.is_absolute_path() && !p_path.begins_with(resource_path))) {
return p_path.simplify_path();
}
diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp
index c6db7be53a..8bec80a99e 100644
--- a/core/input/input_map.cpp
+++ b/core/input/input_map.cpp
@@ -33,6 +33,7 @@
#include "core/config/project_settings.h"
#include "core/input/input.h"
#include "core/os/keyboard.h"
+#include "core/os/os.h"
InputMap *InputMap::singleton = nullptr;
@@ -699,34 +700,57 @@ const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() {
return default_builtin_cache;
}
-void InputMap::load_default() {
+const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins_with_feature_overrides_applied() {
+ if (default_builtin_with_overrides_cache.size() > 0) {
+ return default_builtin_with_overrides_cache;
+ }
+
OrderedHashMap<String, List<Ref<InputEvent>>> builtins = get_builtins();
- // List of Builtins which have an override for macOS.
- Vector<String> macos_builtins;
+ // Get a list of all built in inputs which are valid overrides for the OS
+ // Key = builtin name (e.g. ui_accept)
+ // Value = override/feature names (e.g. macos, if it was defined as "ui_accept.macos" and the platform supports that feature)
+ Map<String, Vector<String>> builtins_with_overrides;
for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) {
- if (String(E.key()).ends_with(".macos")) {
- // Strip .macos from name: some_input_name.macos -> some_input_name
- macos_builtins.push_back(String(E.key()).split(".")[0]);
+ String fullname = E.key();
+
+ Vector<String> split = fullname.split(".");
+ String name = split[0];
+ String override_for = split.size() > 1 ? split[1] : String();
+
+ if (override_for != String() && OS::get_singleton()->has_feature(override_for)) {
+ builtins_with_overrides[name].push_back(override_for);
}
}
for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) {
String fullname = E.key();
- String name = fullname.split(".")[0];
- String override_for = fullname.split(".").size() > 1 ? fullname.split(".")[1] : "";
-#ifdef APPLE_STYLE_KEYS
- if (macos_builtins.has(name) && override_for != "macos") {
- // Name has `macos` builtin but this particular one is for non-macOS systems - so skip.
+ Vector<String> split = fullname.split(".");
+ String name = split[0];
+ String override_for = split.size() > 1 ? split[1] : String();
+
+ if (builtins_with_overrides.has(name) && override_for == String()) {
+ // Builtin has an override but this particular one is not an override, so skip.
continue;
}
-#else
- if (override_for == "macos") {
- // Override for macOS - not needed on non-macOS platforms.
+
+ if (override_for != String() && !OS::get_singleton()->has_feature(override_for)) {
+ // OS does not support this override - skip.
continue;
}
-#endif
+
+ default_builtin_with_overrides_cache.insert(name, E.value());
+ }
+
+ return default_builtin_with_overrides_cache;
+}
+
+void InputMap::load_default() {
+ OrderedHashMap<String, List<Ref<InputEvent>>> builtins = get_builtins_with_feature_overrides_applied();
+
+ for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) {
+ String name = E.key();
add_action(name);
diff --git a/core/input/input_map.h b/core/input/input_map.h
index c724fdb142..8bef722089 100644
--- a/core/input/input_map.h
+++ b/core/input/input_map.h
@@ -56,6 +56,7 @@ private:
mutable OrderedHashMap<StringName, Action> input_map;
OrderedHashMap<String, List<Ref<InputEvent>>> default_builtin_cache;
+ OrderedHashMap<String, List<Ref<InputEvent>>> default_builtin_with_overrides_cache;
List<Ref<InputEvent>>::Element *_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool p_exact_match = false, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr) const;
@@ -93,6 +94,7 @@ public:
String get_builtin_display_name(const String &p_name) const;
// Use an Ordered Map so insertion order is preserved. We want the elements to be 'grouped' somewhat.
const OrderedHashMap<String, List<Ref<InputEvent>>> &get_builtins();
+ const OrderedHashMap<String, List<Ref<InputEvent>>> &get_builtins_with_feature_overrides_applied();
InputMap();
~InputMap();
diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp
index 16934d67df..060b619892 100644
--- a/core/math/transform_2d.cpp
+++ b/core/math/transform_2d.cpp
@@ -63,7 +63,7 @@ Transform2D Transform2D::affine_inverse() const {
return inv;
}
-void Transform2D::rotate(real_t p_phi) {
+void Transform2D::rotate(const real_t p_phi) {
*this = Transform2D(p_phi, Vector2()) * (*this);
}
@@ -72,7 +72,7 @@ real_t Transform2D::get_skew() const {
return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5;
}
-void Transform2D::set_skew(float p_angle) {
+void Transform2D::set_skew(const real_t p_angle) {
real_t det = basis_determinant();
elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length();
}
@@ -81,7 +81,7 @@ real_t Transform2D::get_rotation() const {
return Math::atan2(elements[0].y, elements[0].x);
}
-void Transform2D::set_rotation(real_t p_rot) {
+void Transform2D::set_rotation(const real_t p_rot) {
Size2 scale = get_scale();
real_t cr = Math::cos(p_rot);
real_t sr = Math::sin(p_rot);
@@ -92,7 +92,7 @@ void Transform2D::set_rotation(real_t p_rot) {
set_scale(scale);
}
-Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) {
+Transform2D::Transform2D(const real_t p_rot, const Vector2 &p_pos) {
real_t cr = Math::cos(p_rot);
real_t sr = Math::sin(p_rot);
elements[0][0] = cr;
@@ -102,6 +102,14 @@ Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) {
elements[2] = p_pos;
}
+Transform2D::Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos) {
+ elements[0][0] = Math::cos(p_rot) * p_scale.x;
+ elements[1][1] = Math::cos(p_rot + p_skew) * p_scale.y;
+ elements[1][0] = -Math::sin(p_rot + p_skew) * p_scale.y;
+ elements[0][1] = Math::sin(p_rot) * p_scale.x;
+ elements[2] = p_pos;
+}
+
Size2 Transform2D::get_scale() const {
real_t det_sign = SGN(basis_determinant());
return Size2(elements[0].length(), det_sign * elements[1].length());
@@ -126,7 +134,7 @@ void Transform2D::scale_basis(const Size2 &p_scale) {
elements[1][1] *= p_scale.y;
}
-void Transform2D::translate(real_t p_tx, real_t p_ty) {
+void Transform2D::translate(const real_t p_tx, const real_t p_ty) {
translate(Vector2(p_tx, p_ty));
}
@@ -231,7 +239,7 @@ Transform2D Transform2D::translated(const Vector2 &p_offset) const {
return copy;
}
-Transform2D Transform2D::rotated(real_t p_phi) const {
+Transform2D Transform2D::rotated(const real_t p_phi) const {
Transform2D copy = *this;
copy.rotate(p_phi);
return copy;
@@ -241,7 +249,7 @@ real_t Transform2D::basis_determinant() const {
return elements[0].x * elements[1].y - elements[0].y * elements[1].x;
}
-Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, real_t p_c) const {
+Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, const real_t p_c) const {
//extract parameters
Vector2 p1 = get_origin();
Vector2 p2 = p_transform.get_origin();
diff --git a/core/math/transform_2d.h b/core/math/transform_2d.h
index 34cfd0c1a9..6ed3af2ba7 100644
--- a/core/math/transform_2d.h
+++ b/core/math/transform_2d.h
@@ -68,17 +68,17 @@ struct Transform2D {
void affine_invert();
Transform2D affine_inverse() const;
- void set_rotation(real_t p_rot);
+ void set_rotation(const real_t p_rot);
real_t get_rotation() const;
real_t get_skew() const;
- void set_skew(float p_angle);
- _FORCE_INLINE_ void set_rotation_and_scale(real_t p_rot, const Size2 &p_scale);
- _FORCE_INLINE_ void set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew);
- void rotate(real_t p_phi);
+ void set_skew(const real_t p_angle);
+ _FORCE_INLINE_ void set_rotation_and_scale(const real_t p_rot, const Size2 &p_scale);
+ _FORCE_INLINE_ void set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew);
+ void rotate(const real_t p_phi);
void scale(const Size2 &p_scale);
void scale_basis(const Size2 &p_scale);
- void translate(real_t p_tx, real_t p_ty);
+ void translate(const real_t p_tx, const real_t p_ty);
void translate(const Vector2 &p_translation);
real_t basis_determinant() const;
@@ -92,7 +92,7 @@ struct Transform2D {
Transform2D scaled(const Size2 &p_scale) const;
Transform2D basis_scaled(const Size2 &p_scale) const;
Transform2D translated(const Vector2 &p_offset) const;
- Transform2D rotated(real_t p_phi) const;
+ Transform2D rotated(const real_t p_phi) const;
Transform2D untranslated() const;
@@ -110,7 +110,7 @@ struct Transform2D {
void operator*=(const real_t p_val);
Transform2D operator*(const real_t p_val) const;
- Transform2D interpolate_with(const Transform2D &p_transform, real_t p_c) const;
+ Transform2D interpolate_with(const Transform2D &p_transform, const real_t p_c) const;
_FORCE_INLINE_ Vector2 basis_xform(const Vector2 &p_vec) const;
_FORCE_INLINE_ Vector2 basis_xform_inv(const Vector2 &p_vec) const;
@@ -123,7 +123,7 @@ struct Transform2D {
operator String() const;
- Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) {
+ Transform2D(const real_t xx, const real_t xy, const real_t yx, const real_t yy, const real_t ox, const real_t oy) {
elements[0][0] = xx;
elements[0][1] = xy;
elements[1][0] = yx;
@@ -138,7 +138,10 @@ struct Transform2D {
elements[2] = p_origin;
}
- Transform2D(real_t p_rot, const Vector2 &p_pos);
+ Transform2D(const real_t p_rot, const Vector2 &p_pos);
+
+ Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos);
+
Transform2D() {
elements[0][0] = 1.0;
elements[1][1] = 1.0;
@@ -185,14 +188,14 @@ Rect2 Transform2D::xform(const Rect2 &p_rect) const {
return new_rect;
}
-void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) {
+void Transform2D::set_rotation_and_scale(const real_t p_rot, const Size2 &p_scale) {
elements[0][0] = Math::cos(p_rot) * p_scale.x;
elements[1][1] = Math::cos(p_rot) * p_scale.y;
elements[1][0] = -Math::sin(p_rot) * p_scale.y;
elements[0][1] = Math::sin(p_rot) * p_scale.x;
}
-void Transform2D::set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew) {
+void Transform2D::set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew) {
elements[0][0] = Math::cos(p_rot) * p_scale.x;
elements[1][1] = Math::cos(p_rot + p_skew) * p_scale.y;
elements[1][0] = -Math::sin(p_rot + p_skew) * p_scale.y;
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index 7bce060044..c3fe4117ac 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -1704,6 +1704,7 @@ static void _register_variant_builtin_methods() {
bind_method(Transform2D, get_rotation, sarray(), varray());
bind_method(Transform2D, get_origin, sarray(), varray());
bind_method(Transform2D, get_scale, sarray(), varray());
+ bind_method(Transform2D, get_skew, sarray(), varray());
bind_method(Transform2D, orthonormalized, sarray(), varray());
bind_method(Transform2D, rotated, sarray("phi"), varray());
bind_method(Transform2D, scaled, sarray("scale"), varray());
@@ -1713,6 +1714,8 @@ static void _register_variant_builtin_methods() {
bind_method(Transform2D, interpolate_with, sarray("xform", "weight"), varray());
bind_method(Transform2D, is_equal_approx, sarray("xform"), varray());
bind_method(Transform2D, set_rotation, sarray("rotation"), varray());
+ bind_method(Transform2D, set_scale, sarray("scale"), varray());
+ bind_method(Transform2D, set_skew, sarray("skew"), varray());
bind_method(Transform2D, looking_at, sarray("target"), varray(Vector2()));
/* Basis */
diff --git a/core/variant/variant_construct.cpp b/core/variant/variant_construct.cpp
index a1a2bec369..4317b9dc98 100644
--- a/core/variant/variant_construct.cpp
+++ b/core/variant/variant_construct.cpp
@@ -114,6 +114,7 @@ void Variant::_register_variant_constructors() {
add_constructor<VariantConstructNoArgs<Transform2D>>(sarray());
add_constructor<VariantConstructor<Transform2D, Transform2D>>(sarray("from"));
add_constructor<VariantConstructor<Transform2D, float, Vector2>>(sarray("rotation", "position"));
+ add_constructor<VariantConstructor<Transform2D, float, Size2, float, Vector2>>(sarray("rotation", "scale", "skew", "position"));
add_constructor<VariantConstructor<Transform2D, Vector2, Vector2, Vector2>>(sarray("x_axis", "y_axis", "origin"));
add_constructor<VariantConstructNoArgs<Plane>>(sarray());
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index 232054d0ca..55c1376031 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -487,10 +487,6 @@ struct VariantUtilityFunctions {
}
static inline void print(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
- if (p_arg_count < 1) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 1;
- }
String str;
for (int i = 0; i < p_arg_count; i++) {
String os = p_args[i]->operator String();
@@ -506,11 +502,29 @@ struct VariantUtilityFunctions {
r_error.error = Callable::CallError::CALL_OK;
}
- static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
- if (p_arg_count < 1) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 1;
+ static inline void print_verbose(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
+ if (OS::get_singleton()->is_stdout_verbose()) {
+ String str;
+ for (int i = 0; i < p_arg_count; i++) {
+ String os = p_args[i]->operator String();
+
+ if (i == 0) {
+ str = os;
+ } else {
+ str += os;
+ }
+ }
+
+ // No need to use `print_verbose()` as this call already only happens
+ // when verbose mode is enabled. This avoids performing string argument concatenation
+ // when not needed.
+ print_line(str);
}
+
+ r_error.error = Callable::CallError::CALL_OK;
+ }
+
+ static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
String str;
for (int i = 0; i < p_arg_count; i++) {
String os = p_args[i]->operator String();
@@ -527,10 +541,6 @@ struct VariantUtilityFunctions {
}
static inline void printt(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
- if (p_arg_count < 1) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 1;
- }
String str;
for (int i = 0; i < p_arg_count; i++) {
if (i) {
@@ -544,10 +554,6 @@ struct VariantUtilityFunctions {
}
static inline void prints(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
- if (p_arg_count < 1) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 1;
- }
String str;
for (int i = 0; i < p_arg_count; i++) {
if (i) {
@@ -561,10 +567,6 @@ struct VariantUtilityFunctions {
}
static inline void printraw(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
- if (p_arg_count < 1) {
- r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
- r_error.argument = 1;
- }
String str;
for (int i = 0; i < p_arg_count; i++) {
String os = p_args[i]->operator String();
@@ -1246,6 +1248,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDVARARGV(printt, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(prints, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(printraw, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
+ FUNCBINDVARARGV(print_verbose, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(push_error, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(push_warning, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index c47ce81651..0334bab32a 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -556,6 +556,11 @@
[b]Note:[/b] Consider using [method push_error] and [method push_warning] to print error and warning messages instead of [method print]. This distinguishes them from print messages used for debugging purposes, while also displaying a stack trace when an error or warning is printed.
</description>
</method>
+ <method name="print_verbose" qualifiers="vararg">
+ <description>
+ If verbose mode is enabled ([method OS.is_stdout_verbose] returning [code]true[/code]), converts one or more arguments of any type to string in the best way possible and prints them to the console.
+ </description>
+ </method>
<method name="printerr" qualifiers="vararg">
<description>
Prints one or more arguments to strings in the best way possible to standard error line.
diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml
index 818d159d36..5d18f69409 100644
--- a/doc/classes/AABB.xml
+++ b/doc/classes/AABB.xml
@@ -234,6 +234,4 @@
If the size is negative, you can use [method abs] to fix it.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AStar.xml b/doc/classes/AStar.xml
index 3e91184a65..11c0fc33b8 100644
--- a/doc/classes/AStar.xml
+++ b/doc/classes/AStar.xml
@@ -326,6 +326,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AStar2D.xml b/doc/classes/AStar2D.xml
index 453e8b6315..43e7d59665 100644
--- a/doc/classes/AStar2D.xml
+++ b/doc/classes/AStar2D.xml
@@ -297,6 +297,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AcceptDialog.xml b/doc/classes/AcceptDialog.xml
index 077c062d6b..c753b341d2 100644
--- a/doc/classes/AcceptDialog.xml
+++ b/doc/classes/AcceptDialog.xml
@@ -90,8 +90,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="panel" data_type="style" type="StyleBox">
Panel that fills up the background of the window.
diff --git a/doc/classes/AnimatableBody2D.xml b/doc/classes/AnimatableBody2D.xml
index 731c702549..e58f4bd692 100644
--- a/doc/classes/AnimatableBody2D.xml
+++ b/doc/classes/AnimatableBody2D.xml
@@ -10,13 +10,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync_to_physics" type="bool" setter="set_sync_to_physics" getter="is_sync_to_physics_enabled" default="false">
If [code]true[/code], the body's movement will be synchronized to the physics frame. This is useful when animating movement via [AnimationPlayer], for example on moving platforms. Do [b]not[/b] use together with [method PhysicsBody2D.move_and_collide].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimatableBody3D.xml b/doc/classes/AnimatableBody3D.xml
index 8192f26057..71a48a5aa6 100644
--- a/doc/classes/AnimatableBody3D.xml
+++ b/doc/classes/AnimatableBody3D.xml
@@ -13,13 +13,9 @@
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync_to_physics" type="bool" setter="set_sync_to_physics" getter="is_sync_to_physics_enabled" default="false">
If [code]true[/code], the body's movement will be synchronized to the physics frame. This is useful when animating movement via [AnimationPlayer], for example on moving platforms. Do [b]not[/b] use together with [method PhysicsBody3D.move_and_collide].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml
index 14e19b4c9a..b468e1d109 100644
--- a/doc/classes/AnimatedSprite2D.xml
+++ b/doc/classes/AnimatedSprite2D.xml
@@ -74,6 +74,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml
index 6b3d426cef..59d7553ef4 100644
--- a/doc/classes/AnimatedSprite3D.xml
+++ b/doc/classes/AnimatedSprite3D.xml
@@ -56,6 +56,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeAdd2.xml b/doc/classes/AnimationNodeAdd2.xml
index 63127ade9a..20ee33209b 100644
--- a/doc/classes/AnimationNodeAdd2.xml
+++ b/doc/classes/AnimationNodeAdd2.xml
@@ -9,13 +9,9 @@
<tutorials>
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeAdd3.xml b/doc/classes/AnimationNodeAdd3.xml
index 0e49ac7bbf..26738499bb 100644
--- a/doc/classes/AnimationNodeAdd3.xml
+++ b/doc/classes/AnimationNodeAdd3.xml
@@ -14,13 +14,9 @@
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml
index 75dae6a48e..668a35226f 100644
--- a/doc/classes/AnimationNodeAnimation.xml
+++ b/doc/classes/AnimationNodeAnimation.xml
@@ -11,13 +11,9 @@
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&amp;&quot;&quot;">
Animation to use as an output. It is one of the animations provided by [member AnimationTree.anim_player].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeBlend2.xml b/doc/classes/AnimationNodeBlend2.xml
index e509a2df6c..1f7a4c91c8 100644
--- a/doc/classes/AnimationNodeBlend2.xml
+++ b/doc/classes/AnimationNodeBlend2.xml
@@ -11,13 +11,9 @@
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeBlend3.xml b/doc/classes/AnimationNodeBlend3.xml
index 7c81b37663..ed827e2535 100644
--- a/doc/classes/AnimationNodeBlend3.xml
+++ b/doc/classes/AnimationNodeBlend3.xml
@@ -13,13 +13,9 @@
<tutorials>
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeBlendSpace1D.xml b/doc/classes/AnimationNodeBlendSpace1D.xml
index c47d84fe37..6e55a79fd2 100644
--- a/doc/classes/AnimationNodeBlendSpace1D.xml
+++ b/doc/classes/AnimationNodeBlendSpace1D.xml
@@ -80,6 +80,4 @@
Label of the virtual axis of the blend space.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeOutput.xml b/doc/classes/AnimationNodeOutput.xml
index c4150d7e82..34c96d13ea 100644
--- a/doc/classes/AnimationNodeOutput.xml
+++ b/doc/classes/AnimationNodeOutput.xml
@@ -10,8 +10,4 @@
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeStateMachine.xml b/doc/classes/AnimationNodeStateMachine.xml
index 9921e157f2..17ef565b3a 100644
--- a/doc/classes/AnimationNodeStateMachine.xml
+++ b/doc/classes/AnimationNodeStateMachine.xml
@@ -187,6 +187,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml
index 5c11adfaf0..15c6c96302 100644
--- a/doc/classes/AnimationNodeStateMachinePlayback.xml
+++ b/doc/classes/AnimationNodeStateMachinePlayback.xml
@@ -74,6 +74,4 @@
<members>
<member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" />
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml
index 7f07afecee..763bba6e93 100644
--- a/doc/classes/AnimationNodeStateMachineTransition.xml
+++ b/doc/classes/AnimationNodeStateMachineTransition.xml
@@ -7,8 +7,6 @@
<tutorials>
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&amp;&quot;&quot;">
Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]:
diff --git a/doc/classes/AnimationNodeTimeScale.xml b/doc/classes/AnimationNodeTimeScale.xml
index 2ce8309418..5b40b39bca 100644
--- a/doc/classes/AnimationNodeTimeScale.xml
+++ b/doc/classes/AnimationNodeTimeScale.xml
@@ -10,8 +10,4 @@
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeTimeSeek.xml b/doc/classes/AnimationNodeTimeSeek.xml
index 171d65fbe0..d927c663c8 100644
--- a/doc/classes/AnimationNodeTimeSeek.xml
+++ b/doc/classes/AnimationNodeTimeSeek.xml
@@ -29,8 +29,4 @@
<tutorials>
<link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationNodeTransition.xml b/doc/classes/AnimationNodeTransition.xml
index 8c859e43be..b297832ac0 100644
--- a/doc/classes/AnimationNodeTransition.xml
+++ b/doc/classes/AnimationNodeTransition.xml
@@ -47,6 +47,4 @@
Cross-fading time (in seconds) between each animation connected to the inputs.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationRootNode.xml b/doc/classes/AnimationRootNode.xml
index 46759b7f4d..056edbd230 100644
--- a/doc/classes/AnimationRootNode.xml
+++ b/doc/classes/AnimationRootNode.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AnimationTrackEditPlugin.xml b/doc/classes/AnimationTrackEditPlugin.xml
index 7b96808581..4a4c7157d2 100644
--- a/doc/classes/AnimationTrackEditPlugin.xml
+++ b/doc/classes/AnimationTrackEditPlugin.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml
index 84e123d712..44e27643bb 100644
--- a/doc/classes/Array.xml
+++ b/doc/classes/Array.xml
@@ -550,6 +550,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml
index 670a25ab83..49ce2588c5 100644
--- a/doc/classes/ArrayMesh.xml
+++ b/doc/classes/ArrayMesh.xml
@@ -203,6 +203,4 @@
<member name="shadow_mesh" type="ArrayMesh" setter="set_shadow_mesh" getter="get_shadow_mesh">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AspectRatioContainer.xml b/doc/classes/AspectRatioContainer.xml
index 7b41133139..4c0af0b997 100644
--- a/doc/classes/AspectRatioContainer.xml
+++ b/doc/classes/AspectRatioContainer.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="alignment_horizontal" type="int" setter="set_alignment_horizontal" getter="get_alignment_horizontal" enum="AspectRatioContainer.AlignMode" default="1">
Specifies the horizontal relative position of child controls.
diff --git a/doc/classes/AtlasTexture.xml b/doc/classes/AtlasTexture.xml
index b49c0e4278..3435bbec59 100644
--- a/doc/classes/AtlasTexture.xml
+++ b/doc/classes/AtlasTexture.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="atlas" type="Texture2D" setter="set_atlas" getter="get_atlas">
The texture that contains the atlas. Can be any [Texture2D] subtype.
@@ -25,6 +23,4 @@
The AtlasTexture's used region.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioBusLayout.xml b/doc/classes/AudioBusLayout.xml
index 09746913bd..b7e8d8932c 100644
--- a/doc/classes/AudioBusLayout.xml
+++ b/doc/classes/AudioBusLayout.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffect.xml b/doc/classes/AudioEffect.xml
index 955285bd2e..fd2bab073f 100644
--- a/doc/classes/AudioEffect.xml
+++ b/doc/classes/AudioEffect.xml
@@ -9,8 +9,4 @@
<tutorials>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml
index 1334a81661..7fcfe24d97 100644
--- a/doc/classes/AudioEffectAmplify.xml
+++ b/doc/classes/AudioEffectAmplify.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db" default="0.0">
Amount of amplification in decibels. Positive values make the sound louder, negative values make it quieter. Value can range from -80 to 24.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml
index e8b398c8f4..ed0a33deb1 100644
--- a/doc/classes/AudioEffectBandLimitFilter.xml
+++ b/doc/classes/AudioEffectBandLimitFilter.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml
index ad3dbc5256..642b70428e 100644
--- a/doc/classes/AudioEffectBandPassFilter.xml
+++ b/doc/classes/AudioEffectBandPassFilter.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectCapture.xml b/doc/classes/AudioEffectCapture.xml
index 8e46acbd07..6aecaa170a 100644
--- a/doc/classes/AudioEffectCapture.xml
+++ b/doc/classes/AudioEffectCapture.xml
@@ -61,6 +61,4 @@
Length of the internal ring buffer, in seconds. Setting the buffer length will have no effect if already initialized.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectChorus.xml b/doc/classes/AudioEffectChorus.xml
index cc93a8fc03..e3ab141e3d 100644
--- a/doc/classes/AudioEffectChorus.xml
+++ b/doc/classes/AudioEffectChorus.xml
@@ -171,6 +171,4 @@
The effect's processed signal.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml
index 4e924bcb65..28a5587377 100644
--- a/doc/classes/AudioEffectCompressor.xml
+++ b/doc/classes/AudioEffectCompressor.xml
@@ -14,8 +14,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us" default="20.0">
Compressor's reaction time when the signal exceeds the threshold, in microseconds. Value can range from 20 to 2000.
@@ -39,6 +37,4 @@
The level above which compression is applied to the audio. Value can range from -60 to 0.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml
index e55e0cb2ad..96bd43bc3b 100644
--- a/doc/classes/AudioEffectDelay.xml
+++ b/doc/classes/AudioEffectDelay.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="dry" type="float" setter="set_dry" getter="get_dry" default="1.0">
Output percent of original sound. At 0, only delayed sounds are output. Value can range from 0 to 1.
@@ -52,6 +50,4 @@
Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to 1 (fully right).
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml
index 24a145b0f3..600ca93028 100644
--- a/doc/classes/AudioEffectDistortion.xml
+++ b/doc/classes/AudioEffectDistortion.xml
@@ -11,8 +11,6 @@
<tutorials>
<link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="drive" type="float" setter="set_drive" getter="get_drive" default="0.0">
Distortion power. Value can range from 0 to 1.
diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml
index ddc1af0618..9d84f87cbe 100644
--- a/doc/classes/AudioEffectEQ.xml
+++ b/doc/classes/AudioEffectEQ.xml
@@ -32,6 +32,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml
index c9fb03e23c..be89a0c4d6 100644
--- a/doc/classes/AudioEffectEQ10.xml
+++ b/doc/classes/AudioEffectEQ10.xml
@@ -20,8 +20,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml
index 7ff8a1756e..0b1a8b2a1d 100644
--- a/doc/classes/AudioEffectEQ21.xml
+++ b/doc/classes/AudioEffectEQ21.xml
@@ -31,8 +31,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml
index b47da5ed2a..9f7efad375 100644
--- a/doc/classes/AudioEffectEQ6.xml
+++ b/doc/classes/AudioEffectEQ6.xml
@@ -16,8 +16,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml
index 293848d204..5b43646077 100644
--- a/doc/classes/AudioEffectFilter.xml
+++ b/doc/classes/AudioEffectFilter.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff" default="2000.0">
Threshold frequency for the filter, in Hz.
diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml
index 82a3c74941..e1bd7a3ff5 100644
--- a/doc/classes/AudioEffectHighPassFilter.xml
+++ b/doc/classes/AudioEffectHighPassFilter.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml
index 4ba31f9fc8..c572824448 100644
--- a/doc/classes/AudioEffectHighShelfFilter.xml
+++ b/doc/classes/AudioEffectHighShelfFilter.xml
@@ -8,8 +8,4 @@
<tutorials>
<link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectInstance.xml b/doc/classes/AudioEffectInstance.xml
index 9ab6028901..f9836226fc 100644
--- a/doc/classes/AudioEffectInstance.xml
+++ b/doc/classes/AudioEffectInstance.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml
index 2fbea06aed..813429e42f 100644
--- a/doc/classes/AudioEffectLimiter.xml
+++ b/doc/classes/AudioEffectLimiter.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db" default="-0.1">
The waveform's maximum allowed value, in decibels. Value can range from -20 to -0.1.
@@ -24,6 +22,4 @@
Threshold from which the limiter begins to be active, in decibels. Value can range from -30 to 0.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml
index e7a66d03bd..ece2e57c96 100644
--- a/doc/classes/AudioEffectLowPassFilter.xml
+++ b/doc/classes/AudioEffectLowPassFilter.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml
index 078e7bf1a1..e78dbf9732 100644
--- a/doc/classes/AudioEffectLowShelfFilter.xml
+++ b/doc/classes/AudioEffectLowShelfFilter.xml
@@ -8,8 +8,4 @@
<tutorials>
<link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml
index 2393674a2e..f5e4abae96 100644
--- a/doc/classes/AudioEffectNotchFilter.xml
+++ b/doc/classes/AudioEffectNotchFilter.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml
index 19c4cd1457..858c48c3b6 100644
--- a/doc/classes/AudioEffectPanner.xml
+++ b/doc/classes/AudioEffectPanner.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="pan" type="float" setter="set_pan" getter="get_pan" default="0.0">
Pan position. Value can range from -1 (fully left) to 1 (fully right).
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml
index b1d229e150..2855d12d51 100644
--- a/doc/classes/AudioEffectPhaser.xml
+++ b/doc/classes/AudioEffectPhaser.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0">
Governs how high the filter frequencies sweep. Low value will primarily affect bass frequencies. High value can sweep high into the treble. Value can range from 0.1 to 4.
@@ -28,6 +26,4 @@
Adjusts the rate in Hz at which the effect sweeps up and down across the frequency range.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml
index 9c28a01650..0c323fd85c 100644
--- a/doc/classes/AudioEffectPitchShift.xml
+++ b/doc/classes/AudioEffectPitchShift.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="fft_size" type="int" setter="set_fft_size" getter="get_fft_size" enum="AudioEffectPitchShift.FFTSize" default="3">
The size of the [url=https://en.wikipedia.org/wiki/Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values smooth out the effect over time, but have greater latency. The effects of this higher latency are especially noticeable on sounds that have sudden amplitude changes.
diff --git a/doc/classes/AudioEffectRecord.xml b/doc/classes/AudioEffectRecord.xml
index 9656718ee8..b32206726d 100644
--- a/doc/classes/AudioEffectRecord.xml
+++ b/doc/classes/AudioEffectRecord.xml
@@ -36,6 +36,4 @@
Specifies the format in which the sample will be recorded. See [enum AudioStreamSample.Format] for available formats.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml
index fbe68cde0e..d931720e88 100644
--- a/doc/classes/AudioEffectReverb.xml
+++ b/doc/classes/AudioEffectReverb.xml
@@ -10,8 +10,6 @@
<tutorials>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="damping" type="float" setter="set_damping" getter="get_damping" default="0.5">
Defines how reflective the imaginary room's walls are. Value can range from 0 to 1.
@@ -38,6 +36,4 @@
Output percent of modified sound. At 0, only original sound is outputted. Value can range from 0 to 1.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioEffectSpectrumAnalyzer.xml b/doc/classes/AudioEffectSpectrumAnalyzer.xml
index 10d29ff8ab..b2f2c55aa2 100644
--- a/doc/classes/AudioEffectSpectrumAnalyzer.xml
+++ b/doc/classes/AudioEffectSpectrumAnalyzer.xml
@@ -11,8 +11,6 @@
<link title="https://godotengine.org/asset-library/asset/528">Audio Spectrum Demo</link>
<link title="https://godotengine.org/article/godot-32-will-get-new-audio-features">Godot 3.2 will get new audio features</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="2.0">
The length of the buffer to keep (in seconds). Higher values keep data around for longer, but require more memory.
diff --git a/doc/classes/AudioEffectStereoEnhance.xml b/doc/classes/AudioEffectStereoEnhance.xml
index 663e3e982c..e82892f355 100644
--- a/doc/classes/AudioEffectStereoEnhance.xml
+++ b/doc/classes/AudioEffectStereoEnhance.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="pan_pullout" type="float" setter="set_pan_pullout" getter="get_pan_pullout" default="1.0">
</member>
@@ -16,6 +14,4 @@
<member name="time_pullout_ms" type="float" setter="set_time_pullout" getter="get_time_pullout" default="0.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioListener2D.xml b/doc/classes/AudioListener2D.xml
index 86dc870926..a7cdd0348c 100644
--- a/doc/classes/AudioListener2D.xml
+++ b/doc/classes/AudioListener2D.xml
@@ -30,6 +30,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioListener3D.xml b/doc/classes/AudioListener3D.xml
index ed1f7fcc8f..4a56071b57 100644
--- a/doc/classes/AudioListener3D.xml
+++ b/doc/classes/AudioListener3D.xml
@@ -35,6 +35,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml
index 32e51603ee..cff7199c4a 100644
--- a/doc/classes/AudioStream.xml
+++ b/doc/classes/AudioStream.xml
@@ -46,6 +46,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamGenerator.xml b/doc/classes/AudioStreamGenerator.xml
index 8464bc8a85..05406846ce 100644
--- a/doc/classes/AudioStreamGenerator.xml
+++ b/doc/classes/AudioStreamGenerator.xml
@@ -12,8 +12,6 @@
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
<link title="https://godotengine.org/article/godot-32-will-get-new-audio-features">Godot 3.2 will get new audio features</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="0.5">
The length of the buffer to generate (in seconds). Lower values result in less latency, but require the script to generate audio data faster, resulting in increased CPU usage and more risk for audio cracking if the CPU can't keep up.
@@ -24,6 +22,4 @@
According to the [url=https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], there is no quality difference to human hearing when going past 40,000 Hz (since most humans can only hear up to ~20,000 Hz, often less). If you are generating lower-pitched sounds such as voices, lower sample rates such as [code]32000[/code] or [code]22050[/code] may be usable with no loss in quality.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamGeneratorPlayback.xml b/doc/classes/AudioStreamGeneratorPlayback.xml
index d99d041053..7520d5d97a 100644
--- a/doc/classes/AudioStreamGeneratorPlayback.xml
+++ b/doc/classes/AudioStreamGeneratorPlayback.xml
@@ -50,6 +50,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamMicrophone.xml b/doc/classes/AudioStreamMicrophone.xml
index e73e50e3a9..13b0c2cd67 100644
--- a/doc/classes/AudioStreamMicrophone.xml
+++ b/doc/classes/AudioStreamMicrophone.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamPlayback.xml b/doc/classes/AudioStreamPlayback.xml
index 25f3e076b4..bcf0b55b31 100644
--- a/doc/classes/AudioStreamPlayback.xml
+++ b/doc/classes/AudioStreamPlayback.xml
@@ -51,6 +51,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamPlaybackResampled.xml b/doc/classes/AudioStreamPlaybackResampled.xml
index faa563fdd8..d60d1acb7a 100644
--- a/doc/classes/AudioStreamPlaybackResampled.xml
+++ b/doc/classes/AudioStreamPlaybackResampled.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml
index e36a428499..9c76eefbf9 100644
--- a/doc/classes/AudioStreamPlayer2D.xml
+++ b/doc/classes/AudioStreamPlayer2D.xml
@@ -87,6 +87,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/AudioStreamRandomPitch.xml b/doc/classes/AudioStreamRandomPitch.xml
index 7e93b3267c..0f580699e9 100644
--- a/doc/classes/AudioStreamRandomPitch.xml
+++ b/doc/classes/AudioStreamRandomPitch.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="audio_stream" type="AudioStream" setter="set_audio_stream" getter="get_audio_stream">
The current [AudioStream].
@@ -18,6 +16,4 @@
The intensity of random pitch variation.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/BackBufferCopy.xml b/doc/classes/BackBufferCopy.xml
index 55ee573811..6f1dd9fc76 100644
--- a/doc/classes/BackBufferCopy.xml
+++ b/doc/classes/BackBufferCopy.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="copy_mode" type="int" setter="set_copy_mode" getter="get_copy_mode" enum="BackBufferCopy.CopyMode" default="1">
Buffer mode. See [enum CopyMode] constants.
diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml
index 9a349c957f..0997896260 100644
--- a/doc/classes/BitMap.xml
+++ b/doc/classes/BitMap.xml
@@ -81,6 +81,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Bone2D.xml b/doc/classes/Bone2D.xml
index f9f3ea21f1..ef0778682f 100644
--- a/doc/classes/Bone2D.xml
+++ b/doc/classes/Bone2D.xml
@@ -90,6 +90,4 @@
Rest transform of the bone. You can reset the node's transforms to this value using [method apply_rest].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/BoneAttachment3D.xml b/doc/classes/BoneAttachment3D.xml
index b493002c70..a1670430e6 100644
--- a/doc/classes/BoneAttachment3D.xml
+++ b/doc/classes/BoneAttachment3D.xml
@@ -78,6 +78,4 @@
The name of the attached bone.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/BoxMesh.xml b/doc/classes/BoxMesh.xml
index dda5e2f1e5..af3365b6ea 100644
--- a/doc/classes/BoxMesh.xml
+++ b/doc/classes/BoxMesh.xml
@@ -10,8 +10,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3(2, 2, 2)">
The box's width, height and depth.
@@ -26,6 +24,4 @@
Number of extra edge loops inserted along the X axis.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/BoxShape3D.xml b/doc/classes/BoxShape3D.xml
index 5704de905b..3bfded6512 100644
--- a/doc/classes/BoxShape3D.xml
+++ b/doc/classes/BoxShape3D.xml
@@ -11,13 +11,9 @@
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3(2, 2, 2)">
The box's width, height and depth.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ButtonGroup.xml b/doc/classes/ButtonGroup.xml
index 302a213836..9229e69fa7 100644
--- a/doc/classes/ButtonGroup.xml
+++ b/doc/classes/ButtonGroup.xml
@@ -34,6 +34,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Callable.xml b/doc/classes/Callable.xml
index 5f5ef4f964..0a95836e96 100644
--- a/doc/classes/Callable.xml
+++ b/doc/classes/Callable.xml
@@ -168,6 +168,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CallbackTweener.xml b/doc/classes/CallbackTweener.xml
index fab5f06ba8..70709d269c 100644
--- a/doc/classes/CallbackTweener.xml
+++ b/doc/classes/CallbackTweener.xml
@@ -22,6 +22,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CameraEffects.xml b/doc/classes/CameraEffects.xml
index 7a874d31db..5cbd489143 100644
--- a/doc/classes/CameraEffects.xml
+++ b/doc/classes/CameraEffects.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="dof_blur_amount" type="float" setter="set_dof_blur_amount" getter="get_dof_blur_amount" default="0.1">
The amount of blur for both near and far depth-of-field effects. The amount of blur increases the radius of the blur effect, making the affected area blurrier. However, If the amount is too high, you might start to see lines appearing, especially when using a low quality blur.
@@ -40,6 +38,4 @@
If [code]true[/code], overrides the manual or automatic exposure defined in the [Environment] with the value in [member override_exposure].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CameraTexture.xml b/doc/classes/CameraTexture.xml
index c0730129a9..2030d3bb45 100644
--- a/doc/classes/CameraTexture.xml
+++ b/doc/classes/CameraTexture.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="camera_feed_id" type="int" setter="set_camera_feed_id" getter="get_camera_feed_id" default="0">
The ID of the [CameraFeed] for which we want to display the image.
@@ -22,6 +20,4 @@
Which image within the [CameraFeed] we want access to, important if the camera image is split in a Y and CbCr component.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CanvasGroup.xml b/doc/classes/CanvasGroup.xml
index ceeda6c3f5..e9b2c9a915 100644
--- a/doc/classes/CanvasGroup.xml
+++ b/doc/classes/CanvasGroup.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="clear_margin" type="float" setter="set_clear_margin" getter="get_clear_margin" default="10.0">
</member>
@@ -16,6 +14,4 @@
<member name="use_mipmaps" type="bool" setter="set_use_mipmaps" getter="is_using_mipmaps" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CanvasItemMaterial.xml b/doc/classes/CanvasItemMaterial.xml
index 780899bff7..3f9dd02e4c 100644
--- a/doc/classes/CanvasItemMaterial.xml
+++ b/doc/classes/CanvasItemMaterial.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="CanvasItemMaterial.BlendMode" default="0">
The manner in which a material's rendering is applied to underlying textures.
diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml
index 616fb24a6f..2f99f94893 100644
--- a/doc/classes/CanvasLayer.xml
+++ b/doc/classes/CanvasLayer.xml
@@ -45,6 +45,4 @@
The layer's transform.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CanvasModulate.xml b/doc/classes/CanvasModulate.xml
index 3540fa423f..d5f85132a5 100644
--- a/doc/classes/CanvasModulate.xml
+++ b/doc/classes/CanvasModulate.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color" default="Color(1, 1, 1, 1)">
The tint color to apply.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CanvasTexture.xml b/doc/classes/CanvasTexture.xml
index f7147d9f0b..28a62ae1e1 100644
--- a/doc/classes/CanvasTexture.xml
+++ b/doc/classes/CanvasTexture.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="diffuse_texture" type="Texture2D" setter="set_diffuse_texture" getter="get_diffuse_texture">
</member>
@@ -24,6 +22,4 @@
<member name="texture_repeat" type="int" setter="set_texture_repeat" getter="get_texture_repeat" enum="CanvasItem.TextureRepeat" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CapsuleMesh.xml b/doc/classes/CapsuleMesh.xml
index b8605ccaec..3b4e60ce93 100644
--- a/doc/classes/CapsuleMesh.xml
+++ b/doc/classes/CapsuleMesh.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="3.0">
Total height of the capsule mesh (including the hemispherical ends).
@@ -24,6 +22,4 @@
Number of rings along the height of the capsule.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CapsuleShape2D.xml b/doc/classes/CapsuleShape2D.xml
index 8ed7d56557..74db0da033 100644
--- a/doc/classes/CapsuleShape2D.xml
+++ b/doc/classes/CapsuleShape2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="30.0">
The capsule's height.
@@ -18,6 +16,4 @@
The capsule's radius.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CapsuleShape3D.xml b/doc/classes/CapsuleShape3D.xml
index c2b13224cf..8856ec3779 100644
--- a/doc/classes/CapsuleShape3D.xml
+++ b/doc/classes/CapsuleShape3D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="3.0">
The capsule's height.
@@ -19,6 +17,4 @@
The capsule's radius.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CenterContainer.xml b/doc/classes/CenterContainer.xml
index 435f4eb06b..8f8a978f9e 100644
--- a/doc/classes/CenterContainer.xml
+++ b/doc/classes/CenterContainer.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="use_top_left" type="bool" setter="set_use_top_left" getter="is_using_top_left" default="false">
If [code]true[/code], centers children relative to the [CenterContainer]'s top left corner.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml
index 1f63b530b1..b00031edf6 100644
--- a/doc/classes/CharFXTransform.xml
+++ b/doc/classes/CharFXTransform.xml
@@ -10,8 +10,6 @@
<link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel.html</link>
<link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)">
The color the character will be drawn with.
@@ -30,6 +28,12 @@
<member name="font" type="RID" setter="set_font" getter="get_font">
Font resource used to render glyph.
</member>
+ <member name="glyph_count" type="int" setter="set_glyph_count" getter="get_glyph_count" default="0">
+ Number of glyphs in the grapheme cluster. This value is set in the first glyph of a cluster. Setting this property won't affect drawing.
+ </member>
+ <member name="glyph_flags" type="int" setter="set_glyph_flags" getter="get_glyph_flags" default="0">
+ Glyph flags. See [enum TextServer.GraphemeFlag] for more info. Setting this property won't affect drawing.
+ </member>
<member name="glyph_index" type="int" setter="set_glyph_index" getter="get_glyph_index" default="0">
Font specific glyph index.
</member>
@@ -46,6 +50,4 @@
If [code]true[/code], the character will be drawn. If [code]false[/code], the character will be hidden. Characters around hidden characters will reflow to take the space of hidden characters. If this is not desired, set their [member color] to [code]Color(1, 1, 1, 0)[/code] instead.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml
index f08a2cafea..fab845fea4 100644
--- a/doc/classes/CharacterBody3D.xml
+++ b/doc/classes/CharacterBody3D.xml
@@ -128,6 +128,4 @@
Direction vector used to determine what is a wall and what is a floor (or a ceiling), rather than a wall, when calling [method move_and_slide]. Defaults to [code]Vector3.UP[/code]. If set to [code]Vector3(0, 0, 0)[/code], everything is considered a wall. This is useful for topdown games.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml
index f13a6ea34a..a674fa8339 100644
--- a/doc/classes/CheckBox.xml
+++ b/doc/classes/CheckBox.xml
@@ -9,14 +9,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" />
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="check_vadjust" data_type="constant" type="int" default="0">
The vertical offset used when rendering the check icons (in pixels).
diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml
index a0a05bcb79..12bd493ae1 100644
--- a/doc/classes/CheckButton.xml
+++ b/doc/classes/CheckButton.xml
@@ -9,14 +9,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" />
<member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="check_vadjust" data_type="constant" type="int" default="0">
The vertical offset used when rendering the toggle icons (in pixels).
diff --git a/doc/classes/CircleShape2D.xml b/doc/classes/CircleShape2D.xml
index db889b0f1b..3969734d3f 100644
--- a/doc/classes/CircleShape2D.xml
+++ b/doc/classes/CircleShape2D.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="10.0">
The circle's radius.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ClassDB.xml b/doc/classes/ClassDB.xml
index 62165a5fce..5f39fc48e0 100644
--- a/doc/classes/ClassDB.xml
+++ b/doc/classes/ClassDB.xml
@@ -199,6 +199,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CodeHighlighter.xml b/doc/classes/CodeHighlighter.xml
index 2b93188d10..064be0c29d 100644
--- a/doc/classes/CodeHighlighter.xml
+++ b/doc/classes/CodeHighlighter.xml
@@ -138,6 +138,4 @@
Sets the color for symbols.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CollisionPolygon2D.xml b/doc/classes/CollisionPolygon2D.xml
index 4607ab3fbd..cdaa0638ba 100644
--- a/doc/classes/CollisionPolygon2D.xml
+++ b/doc/classes/CollisionPolygon2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="build_mode" type="int" setter="set_build_mode" getter="get_build_mode" enum="CollisionPolygon2D.BuildMode" default="0">
Collision build mode. Use one of the [enum BuildMode] constants.
diff --git a/doc/classes/CollisionPolygon3D.xml b/doc/classes/CollisionPolygon3D.xml
index cf0e55e712..b70f517da1 100644
--- a/doc/classes/CollisionPolygon3D.xml
+++ b/doc/classes/CollisionPolygon3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0">
Length that the resulting collision extends in either direction perpendicular to its polygon.
@@ -25,6 +23,4 @@
[b]Note:[/b] The returned value is a copy of the original. Methods which mutate the size or properties of the return value will not impact the original polygon. To change properties of the polygon, assign it to a temporary variable and make changes before reassigning the [code]polygon[/code] member.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml
index c03eba82ff..5159b2b15b 100644
--- a/doc/classes/CollisionShape2D.xml
+++ b/doc/classes/CollisionShape2D.xml
@@ -12,8 +12,6 @@
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false">
A disabled collision shape has no effect in the world. This property should be changed with [method Object.set_deferred].
@@ -28,6 +26,4 @@
The actual shape owned by this collision shape.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CollisionShape3D.xml b/doc/classes/CollisionShape3D.xml
index 9184b672ff..84e362c38b 100644
--- a/doc/classes/CollisionShape3D.xml
+++ b/doc/classes/CollisionShape3D.xml
@@ -35,6 +35,4 @@
The actual shape owned by this collision shape.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml
index 6b5a9f2503..dcef1c55f7 100644
--- a/doc/classes/ColorPickerButton.xml
+++ b/doc/classes/ColorPickerButton.xml
@@ -52,8 +52,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="bg" data_type="icon" type="Texture2D">
The background of the color preview rect on the button.
diff --git a/doc/classes/ColorRect.xml b/doc/classes/ColorRect.xml
index 84955fed8a..db0dfc705e 100644
--- a/doc/classes/ColorRect.xml
+++ b/doc/classes/ColorRect.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color" default="Color(1, 1, 1, 1)">
The fill color.
@@ -24,6 +22,4 @@
[/codeblocks]
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConcavePolygonShape2D.xml b/doc/classes/ConcavePolygonShape2D.xml
index 50632cd2c8..2ace8c72d7 100644
--- a/doc/classes/ConcavePolygonShape2D.xml
+++ b/doc/classes/ConcavePolygonShape2D.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="segments" type="PackedVector2Array" setter="set_segments" getter="get_segments" default="PackedVector2Array()">
The array of points that make up the [ConcavePolygonShape2D]'s line segments.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConcavePolygonShape3D.xml b/doc/classes/ConcavePolygonShape3D.xml
index 907afa6367..ac569a8992 100644
--- a/doc/classes/ConcavePolygonShape3D.xml
+++ b/doc/classes/ConcavePolygonShape3D.xml
@@ -30,6 +30,4 @@
If set to [code]true[/code], collisions occur on both sides of the concave shape faces. Otherwise they occur only along the face normals.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml
index ce976e3d8b..4f6f099ebd 100644
--- a/doc/classes/ConfigFile.xml
+++ b/doc/classes/ConfigFile.xml
@@ -222,6 +222,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConfirmationDialog.xml b/doc/classes/ConfirmationDialog.xml
index 871082696c..352631da1d 100644
--- a/doc/classes/ConfirmationDialog.xml
+++ b/doc/classes/ConfirmationDialog.xml
@@ -30,6 +30,4 @@
<member name="size" type="Vector2i" setter="set_size" getter="get_size" override="true" default="Vector2i(200, 100)" />
<member name="title" type="String" setter="set_title" getter="get_title" override="true" default="&quot;Please Confirm...&quot;" />
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml
index 243605e2b7..ec7583e68b 100644
--- a/doc/classes/ConvexPolygonShape2D.xml
+++ b/doc/classes/ConvexPolygonShape2D.xml
@@ -23,6 +23,4 @@
The polygon's list of vertices. Can be in either clockwise or counterclockwise order.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ConvexPolygonShape3D.xml b/doc/classes/ConvexPolygonShape3D.xml
index a5c86526b0..832e073665 100644
--- a/doc/classes/ConvexPolygonShape3D.xml
+++ b/doc/classes/ConvexPolygonShape3D.xml
@@ -9,13 +9,9 @@
<tutorials>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="points" type="PackedVector3Array" setter="set_points" getter="get_points" default="PackedVector3Array()">
The list of 3D points forming the convex polygon shape.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Crypto.xml b/doc/classes/Crypto.xml
index 3d7ca956da..a87c8bfab2 100644
--- a/doc/classes/Crypto.xml
+++ b/doc/classes/Crypto.xml
@@ -171,6 +171,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CryptoKey.xml b/doc/classes/CryptoKey.xml
index afe2c6b301..5665c629a8 100644
--- a/doc/classes/CryptoKey.xml
+++ b/doc/classes/CryptoKey.xml
@@ -51,6 +51,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Cubemap.xml b/doc/classes/Cubemap.xml
index 9e31ee8a92..886dc36bdf 100644
--- a/doc/classes/Cubemap.xml
+++ b/doc/classes/Cubemap.xml
@@ -10,8 +10,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CubemapArray.xml b/doc/classes/CubemapArray.xml
index 627baf79e0..9f2231886d 100644
--- a/doc/classes/CubemapArray.xml
+++ b/doc/classes/CubemapArray.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml
index c02b0f7ead..8c5b39a895 100644
--- a/doc/classes/Curve2D.xml
+++ b/doc/classes/Curve2D.xml
@@ -156,6 +156,4 @@
The distance in pixels between two adjacent cached points. Changing it forces the cache to be recomputed the next time the [method get_baked_points] or [method get_baked_length] function is called. The smaller the distance, the more points in the cache and the more memory it will consume, so use with care.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml
index 5839ccba02..30e9e2ac68 100644
--- a/doc/classes/Curve3D.xml
+++ b/doc/classes/Curve3D.xml
@@ -198,6 +198,4 @@
If [code]true[/code], the curve will bake up vectors used for orientation. This is used when [member PathFollow3D.rotation_mode] is set to [constant PathFollow3D.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CurveTexture.xml b/doc/classes/CurveTexture.xml
index 54065fe0f9..fe75f029f0 100644
--- a/doc/classes/CurveTexture.xml
+++ b/doc/classes/CurveTexture.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve" type="Curve" setter="set_curve" getter="get_curve">
The [code]curve[/code] rendered onto the texture.
diff --git a/doc/classes/CurveXYZTexture.xml b/doc/classes/CurveXYZTexture.xml
index 9afeb58060..815653e987 100644
--- a/doc/classes/CurveXYZTexture.xml
+++ b/doc/classes/CurveXYZTexture.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve_x" type="Curve" setter="set_curve_x" getter="get_curve_x">
</member>
@@ -18,6 +16,4 @@
<member name="width" type="int" setter="set_width" getter="get_width" default="2048">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CylinderMesh.xml b/doc/classes/CylinderMesh.xml
index 827fb5c10c..077435990b 100644
--- a/doc/classes/CylinderMesh.xml
+++ b/doc/classes/CylinderMesh.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="bottom_radius" type="float" setter="set_bottom_radius" getter="get_bottom_radius" default="1.0">
Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces will not be generated, resulting in a conic shape.
@@ -27,6 +25,4 @@
Top radius of the cylinder. If set to [code]0.0[/code], the top faces will not be generated, resulting in a conic shape.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/CylinderShape3D.xml b/doc/classes/CylinderShape3D.xml
index 99334ceae6..d40b96710b 100644
--- a/doc/classes/CylinderShape3D.xml
+++ b/doc/classes/CylinderShape3D.xml
@@ -11,8 +11,6 @@
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="2.0">
The cylinder's height.
@@ -21,6 +19,4 @@
The cylinder's radius.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/DTLSServer.xml b/doc/classes/DTLSServer.xml
index 627a7a65a5..16e65eaadf 100644
--- a/doc/classes/DTLSServer.xml
+++ b/doc/classes/DTLSServer.xml
@@ -164,6 +164,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/DampedSpringJoint2D.xml b/doc/classes/DampedSpringJoint2D.xml
index e1b6bb6866..76e38d5271 100644
--- a/doc/classes/DampedSpringJoint2D.xml
+++ b/doc/classes/DampedSpringJoint2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="damping" type="float" setter="set_damping" getter="get_damping" default="1.0">
The spring joint's damping ratio. A value between [code]0[/code] and [code]1[/code]. When the two bodies move into different directions the system tries to align them to the spring axis again. A high [code]damping[/code] value forces the attached bodies to align faster.
@@ -24,6 +22,4 @@
The higher the value, the less the bodies attached to the joint will deform it. The joint applies an opposing force to the bodies, the product of the stiffness multiplied by the size difference from its resting length.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml
index a6b97f3a75..0575ea3eef 100644
--- a/doc/classes/Dictionary.xml
+++ b/doc/classes/Dictionary.xml
@@ -329,6 +329,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/DirectionalLight2D.xml b/doc/classes/DirectionalLight2D.xml
index a6eb780159..317cf6e66c 100644
--- a/doc/classes/DirectionalLight2D.xml
+++ b/doc/classes/DirectionalLight2D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="0.0">
The height of the light. Used with 2D normal mapping.
@@ -15,6 +13,4 @@
<member name="max_distance" type="float" setter="set_max_distance" getter="get_max_distance" default="10000.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/DirectionalLight3D.xml b/doc/classes/DirectionalLight3D.xml
index e3badea0f4..7c006ad3a6 100644
--- a/doc/classes/DirectionalLight3D.xml
+++ b/doc/classes/DirectionalLight3D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="directional_shadow_blend_splits" type="bool" setter="set_blend_splits" getter="is_blend_splits_enabled" default="false">
If [code]true[/code], shadow detail is sacrificed in exchange for smoother transitions between splits.
diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml
index e8e5a286b4..c8fda27989 100644
--- a/doc/classes/Directory.xml
+++ b/doc/classes/Directory.xml
@@ -192,6 +192,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorCommandPalette.xml b/doc/classes/EditorCommandPalette.xml
index 1d3b21255f..01b8593f89 100644
--- a/doc/classes/EditorCommandPalette.xml
+++ b/doc/classes/EditorCommandPalette.xml
@@ -51,6 +51,4 @@
<members>
<member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok" override="true" default="false" />
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorDebuggerPlugin.xml b/doc/classes/EditorDebuggerPlugin.xml
index d67df8dfee..0773e176b3 100644
--- a/doc/classes/EditorDebuggerPlugin.xml
+++ b/doc/classes/EditorDebuggerPlugin.xml
@@ -84,6 +84,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml
index 16c50b4d3e..fca7bb350d 100644
--- a/doc/classes/EditorExportPlugin.xml
+++ b/doc/classes/EditorExportPlugin.xml
@@ -110,6 +110,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorFileSystem.xml b/doc/classes/EditorFileSystem.xml
index 6befe32e7a..859480078b 100644
--- a/doc/classes/EditorFileSystem.xml
+++ b/doc/classes/EditorFileSystem.xml
@@ -93,6 +93,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorFileSystemDirectory.xml b/doc/classes/EditorFileSystemDirectory.xml
index a8f94101a7..6a0a94a4c4 100644
--- a/doc/classes/EditorFileSystemDirectory.xml
+++ b/doc/classes/EditorFileSystemDirectory.xml
@@ -103,6 +103,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml
index da6738d6b7..f20f4adcdf 100644
--- a/doc/classes/EditorImportPlugin.xml
+++ b/doc/classes/EditorImportPlugin.xml
@@ -219,6 +219,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml
index 515c4b4d32..0c47298180 100644
--- a/doc/classes/EditorInspector.xml
+++ b/doc/classes/EditorInspector.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="scroll_horizontal_enabled" type="bool" setter="set_enable_h_scroll" getter="is_h_scroll_enabled" override="true" default="false" />
</members>
@@ -66,6 +64,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml
index ee93379210..17397b80bf 100644
--- a/doc/classes/EditorInspectorPlugin.xml
+++ b/doc/classes/EditorInspectorPlugin.xml
@@ -80,6 +80,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml
index 8558f4b9f7..ad878aad80 100644
--- a/doc/classes/EditorInterface.xml
+++ b/doc/classes/EditorInterface.xml
@@ -238,6 +238,4 @@
If [code]true[/code], enables distraction-free mode which hides side docks to increase the space available for the main view.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorNode3DGizmo.xml b/doc/classes/EditorNode3DGizmo.xml
index 91e024cc1c..a2eac01ae8 100644
--- a/doc/classes/EditorNode3DGizmo.xml
+++ b/doc/classes/EditorNode3DGizmo.xml
@@ -198,6 +198,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorNode3DGizmoPlugin.xml b/doc/classes/EditorNode3DGizmoPlugin.xml
index 4ba455a336..424d5dd310 100644
--- a/doc/classes/EditorNode3DGizmoPlugin.xml
+++ b/doc/classes/EditorNode3DGizmoPlugin.xml
@@ -195,6 +195,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorPaths.xml b/doc/classes/EditorPaths.xml
index 28a8314857..92a2cff27f 100644
--- a/doc/classes/EditorPaths.xml
+++ b/doc/classes/EditorPaths.xml
@@ -33,6 +33,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorProperty.xml b/doc/classes/EditorProperty.xml
index 822bcfd255..6af6507606 100644
--- a/doc/classes/EditorProperty.xml
+++ b/doc/classes/EditorProperty.xml
@@ -149,6 +149,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorResourceConversionPlugin.xml b/doc/classes/EditorResourceConversionPlugin.xml
index 8543afa4ae..820c7775f7 100644
--- a/doc/classes/EditorResourceConversionPlugin.xml
+++ b/doc/classes/EditorResourceConversionPlugin.xml
@@ -25,6 +25,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorResourcePicker.xml b/doc/classes/EditorResourcePicker.xml
index a0f2df1f0c..9c490cbb3e 100644
--- a/doc/classes/EditorResourcePicker.xml
+++ b/doc/classes/EditorResourcePicker.xml
@@ -67,6 +67,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorResourcePreview.xml b/doc/classes/EditorResourcePreview.xml
index c2693b4e1e..4dc46945cf 100644
--- a/doc/classes/EditorResourcePreview.xml
+++ b/doc/classes/EditorResourcePreview.xml
@@ -62,6 +62,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorResourcePreviewGenerator.xml b/doc/classes/EditorResourcePreviewGenerator.xml
index 033e03c5b5..53c692aad9 100644
--- a/doc/classes/EditorResourcePreviewGenerator.xml
+++ b/doc/classes/EditorResourcePreviewGenerator.xml
@@ -51,6 +51,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorSceneImporterMesh.xml b/doc/classes/EditorSceneImporterMesh.xml
index c0c53ff255..5d57a76d5f 100644
--- a/doc/classes/EditorSceneImporterMesh.xml
+++ b/doc/classes/EditorSceneImporterMesh.xml
@@ -181,6 +181,4 @@
<member name="_data" type="Dictionary" setter="_set_data" getter="_get_data" default="{&quot;surfaces&quot;: []}">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorSceneImporterMeshNode3D.xml b/doc/classes/EditorSceneImporterMeshNode3D.xml
index 1e459c1cee..848448110e 100644
--- a/doc/classes/EditorSceneImporterMeshNode3D.xml
+++ b/doc/classes/EditorSceneImporterMeshNode3D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mesh" type="EditorSceneImporterMesh" setter="set_mesh" getter="get_mesh">
</member>
@@ -16,6 +14,4 @@
<member name="skin" type="Skin" setter="set_skin" getter="get_skin">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml
index 43ca3db5fa..241531c35f 100644
--- a/doc/classes/EditorScenePostImport.xml
+++ b/doc/classes/EditorScenePostImport.xml
@@ -69,6 +69,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorScript.xml b/doc/classes/EditorScript.xml
index 6d793fe961..a2508118c6 100644
--- a/doc/classes/EditorScript.xml
+++ b/doc/classes/EditorScript.xml
@@ -61,6 +61,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorScriptPicker.xml b/doc/classes/EditorScriptPicker.xml
index 8334676d92..6c0538a5ab 100644
--- a/doc/classes/EditorScriptPicker.xml
+++ b/doc/classes/EditorScriptPicker.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="script_owner" type="Node" setter="set_script_owner" getter="get_script_owner">
The owner [Node] of the script property that holds the edited resource.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorSelection.xml b/doc/classes/EditorSelection.xml
index 69ae865d5d..28c8ff7d7f 100644
--- a/doc/classes/EditorSelection.xml
+++ b/doc/classes/EditorSelection.xml
@@ -51,6 +51,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorSpinSlider.xml b/doc/classes/EditorSpinSlider.xml
index b86e5e5c6e..9341b514c7 100644
--- a/doc/classes/EditorSpinSlider.xml
+++ b/doc/classes/EditorSpinSlider.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="flat" type="bool" setter="set_flat" getter="is_flat" default="false">
</member>
@@ -22,6 +20,4 @@
The suffix to display after the value (in a faded color). This should generally be a plural word. You may have to use an abbreviation if the suffix is too long to be displayed.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorSyntaxHighlighter.xml b/doc/classes/EditorSyntaxHighlighter.xml
index 394a4ada46..8880ce4d44 100644
--- a/doc/classes/EditorSyntaxHighlighter.xml
+++ b/doc/classes/EditorSyntaxHighlighter.xml
@@ -23,6 +23,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorTranslationParserPlugin.xml b/doc/classes/EditorTranslationParserPlugin.xml
index 94e96e985f..de8204def3 100644
--- a/doc/classes/EditorTranslationParserPlugin.xml
+++ b/doc/classes/EditorTranslationParserPlugin.xml
@@ -118,6 +118,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EditorVCSInterface.xml b/doc/classes/EditorVCSInterface.xml
index 5dd4901e3e..bd932bede4 100644
--- a/doc/classes/EditorVCSInterface.xml
+++ b/doc/classes/EditorVCSInterface.xml
@@ -94,6 +94,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EncodedObjectAsID.xml b/doc/classes/EncodedObjectAsID.xml
index e3e36590a3..fb056f4631 100644
--- a/doc/classes/EncodedObjectAsID.xml
+++ b/doc/classes/EncodedObjectAsID.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="object_id" type="int" setter="set_object_id" getter="get_object_id" default="0">
The [Object] identifier stored in this [EncodedObjectAsID] instance. The object instance can be retrieved with [method @GlobalScope.instance_from_id].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml
index 36590093bd..6e22c58024 100644
--- a/doc/classes/Engine.xml
+++ b/doc/classes/Engine.xml
@@ -198,6 +198,4 @@
Controls how fast or slow the in-game clock ticks versus the real life one. It defaults to 1.0. A value of 2.0 means the game moves twice as fast as real life, whilst a value of 0.5 means the game moves at half the regular speed.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/EngineDebugger.xml b/doc/classes/EngineDebugger.xml
index 30d5193384..861053b1c9 100644
--- a/doc/classes/EngineDebugger.xml
+++ b/doc/classes/EngineDebugger.xml
@@ -98,6 +98,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Expression.xml b/doc/classes/Expression.xml
index 809a5bb80c..f0b0775753 100644
--- a/doc/classes/Expression.xml
+++ b/doc/classes/Expression.xml
@@ -83,6 +83,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/FileSystemDock.xml b/doc/classes/FileSystemDock.xml
index a164415245..b6e708cc03 100644
--- a/doc/classes/FileSystemDock.xml
+++ b/doc/classes/FileSystemDock.xml
@@ -52,6 +52,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml
index aa70856e32..e8ff0f60ec 100644
--- a/doc/classes/Font.xml
+++ b/doc/classes/Font.xml
@@ -285,6 +285,4 @@
Default font [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]variation coordinates[/url].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml
index 384d7c81f4..a814685388 100644
--- a/doc/classes/FontData.xml
+++ b/doc/classes/FontData.xml
@@ -643,6 +643,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesAttractor3D.xml b/doc/classes/GPUParticlesAttractor3D.xml
index 111827d294..7de52eedd7 100644
--- a/doc/classes/GPUParticlesAttractor3D.xml
+++ b/doc/classes/GPUParticlesAttractor3D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="attenuation" type="float" setter="set_attenuation" getter="get_attenuation" default="1.0">
</member>
@@ -18,6 +16,4 @@
<member name="strength" type="float" setter="set_strength" getter="get_strength" default="1.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesAttractorBox.xml b/doc/classes/GPUParticlesAttractorBox.xml
index 49e6111c29..93fdc45e56 100644
--- a/doc/classes/GPUParticlesAttractorBox.xml
+++ b/doc/classes/GPUParticlesAttractorBox.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesAttractorSphere.xml b/doc/classes/GPUParticlesAttractorSphere.xml
index 6984427a96..4398de55e9 100644
--- a/doc/classes/GPUParticlesAttractorSphere.xml
+++ b/doc/classes/GPUParticlesAttractorSphere.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesAttractorVectorField.xml b/doc/classes/GPUParticlesAttractorVectorField.xml
index 7364a4b09f..e164343528 100644
--- a/doc/classes/GPUParticlesAttractorVectorField.xml
+++ b/doc/classes/GPUParticlesAttractorVectorField.xml
@@ -6,14 +6,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
</member>
<member name="texture" type="Texture3D" setter="set_texture" getter="get_texture">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesCollision3D.xml b/doc/classes/GPUParticlesCollision3D.xml
index dce9a32fc4..1a7901839c 100644
--- a/doc/classes/GPUParticlesCollision3D.xml
+++ b/doc/classes/GPUParticlesCollision3D.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="4294967295">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesCollisionBox.xml b/doc/classes/GPUParticlesCollisionBox.xml
index 58de18556e..d2bf4ef538 100644
--- a/doc/classes/GPUParticlesCollisionBox.xml
+++ b/doc/classes/GPUParticlesCollisionBox.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GPUParticlesCollisionHeightField.xml b/doc/classes/GPUParticlesCollisionHeightField.xml
index 0ddddda8e4..99b2ad3ce0 100644
--- a/doc/classes/GPUParticlesCollisionHeightField.xml
+++ b/doc/classes/GPUParticlesCollisionHeightField.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
</member>
diff --git a/doc/classes/GPUParticlesCollisionSDF.xml b/doc/classes/GPUParticlesCollisionSDF.xml
index 7ef6f5f3cd..8d798a9d28 100644
--- a/doc/classes/GPUParticlesCollisionSDF.xml
+++ b/doc/classes/GPUParticlesCollisionSDF.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
</member>
diff --git a/doc/classes/GPUParticlesCollisionSphere.xml b/doc/classes/GPUParticlesCollisionSphere.xml
index 41150960d2..ddb2391fd9 100644
--- a/doc/classes/GPUParticlesCollisionSphere.xml
+++ b/doc/classes/GPUParticlesCollisionSphere.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Geometry3D.xml b/doc/classes/Geometry3D.xml
index 9d0234529a..5b2e065d1a 100644
--- a/doc/classes/Geometry3D.xml
+++ b/doc/classes/Geometry3D.xml
@@ -125,6 +125,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml
index a9577fda90..93cef07b79 100644
--- a/doc/classes/Gradient.xml
+++ b/doc/classes/Gradient.xml
@@ -76,6 +76,4 @@
Gradient's offsets returned as a [PackedFloat32Array].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GradientTexture.xml b/doc/classes/GradientTexture.xml
index 44da042dd4..0f0f0b1a37 100644
--- a/doc/classes/GradientTexture.xml
+++ b/doc/classes/GradientTexture.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="gradient" type="Gradient" setter="set_gradient" getter="get_gradient">
The [Gradient] that will be used to fill the texture.
@@ -21,6 +19,4 @@
The number of color samples that will be obtained from the [Gradient].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml
index c870026d58..2213b9b8b2 100644
--- a/doc/classes/GraphEdit.xml
+++ b/doc/classes/GraphEdit.xml
@@ -287,8 +287,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="activity" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
</theme_item>
diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml
index 34e7cbcd79..758bab465d 100644
--- a/doc/classes/GridContainer.xml
+++ b/doc/classes/GridContainer.xml
@@ -11,15 +11,11 @@
<tutorials>
<link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="columns" type="int" setter="set_columns" getter="get_columns" default="1">
The number of columns in the [GridContainer]. If modified, [GridContainer] reorders its Control-derived children to accommodate the new layout.
</member>
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="hseparation" data_type="constant" type="int" default="4">
The horizontal separation of children nodes.
diff --git a/doc/classes/GrooveJoint2D.xml b/doc/classes/GrooveJoint2D.xml
index 643b7aefea..1683842d65 100644
--- a/doc/classes/GrooveJoint2D.xml
+++ b/doc/classes/GrooveJoint2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="initial_offset" type="float" setter="set_initial_offset" getter="get_initial_offset" default="25.0">
The body B's initial anchor position defined by the joint's origin and a local offset [member initial_offset] along the joint's Y axis (along the groove).
@@ -18,6 +16,4 @@
The groove's length. The groove is from the joint's origin towards [member length] along the joint's local Y axis.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/HBoxContainer.xml b/doc/classes/HBoxContainer.xml
index 9c3efb384e..ce254d8a15 100644
--- a/doc/classes/HBoxContainer.xml
+++ b/doc/classes/HBoxContainer.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="separation" data_type="constant" type="int" default="4">
The horizontal space between the [HBoxContainer]'s elements.
diff --git a/doc/classes/HMACContext.xml b/doc/classes/HMACContext.xml
index 88d3c5e2f3..69ad194fe0 100644
--- a/doc/classes/HMACContext.xml
+++ b/doc/classes/HMACContext.xml
@@ -77,6 +77,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/HScrollBar.xml b/doc/classes/HScrollBar.xml
index 36ff070a37..fa9961710f 100644
--- a/doc/classes/HScrollBar.xml
+++ b/doc/classes/HScrollBar.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="decrement" data_type="icon" type="Texture2D">
Icon used as a button to scroll the [ScrollBar] left. Supports custom step using the [member ScrollBar.custom_step] property.
diff --git a/doc/classes/HSeparator.xml b/doc/classes/HSeparator.xml
index 24495d208e..5a1011525c 100644
--- a/doc/classes/HSeparator.xml
+++ b/doc/classes/HSeparator.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="separation" data_type="constant" type="int" default="4">
The height of the area covered by the separator. Effectively works like a minimum height.
diff --git a/doc/classes/HSlider.xml b/doc/classes/HSlider.xml
index 37aa968161..fa88085a70 100644
--- a/doc/classes/HSlider.xml
+++ b/doc/classes/HSlider.xml
@@ -9,10 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="grabber" data_type="icon" type="Texture2D">
The texture for the grabber (the draggable element).
diff --git a/doc/classes/HSplitContainer.xml b/doc/classes/HSplitContainer.xml
index 6bc9913344..379d4cfbdb 100644
--- a/doc/classes/HSplitContainer.xml
+++ b/doc/classes/HSplitContainer.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="autohide" data_type="constant" type="int" default="1">
Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If 0 ([code]false[/code]), it's always visible.
diff --git a/doc/classes/HeightMapShape3D.xml b/doc/classes/HeightMapShape3D.xml
index 9a9d3bf8f4..705415171f 100644
--- a/doc/classes/HeightMapShape3D.xml
+++ b/doc/classes/HeightMapShape3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="map_data" type="PackedFloat32Array" setter="set_map_data" getter="get_map_data" default="PackedFloat32Array(0, 0, 0, 0)">
Height map data, pool array must be of [member map_width] * [member map_depth] size.
@@ -21,6 +19,4 @@
Width of the height map data. Changing this will resize the [member map_data].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml
index 435fec6a50..af7178db95 100644
--- a/doc/classes/ImageTexture.xml
+++ b/doc/classes/ImageTexture.xml
@@ -61,6 +61,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ImageTexture3D.xml b/doc/classes/ImageTexture3D.xml
index 538a836c1c..ca4178f97a 100644
--- a/doc/classes/ImageTexture3D.xml
+++ b/doc/classes/ImageTexture3D.xml
@@ -25,6 +25,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ImageTextureLayered.xml b/doc/classes/ImageTextureLayered.xml
index 1b7400803d..f6ebc43d13 100644
--- a/doc/classes/ImageTextureLayered.xml
+++ b/doc/classes/ImageTextureLayered.xml
@@ -21,6 +21,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ImmediateMesh.xml b/doc/classes/ImmediateMesh.xml
index 69637d5bdd..75a3ec65c2 100644
--- a/doc/classes/ImmediateMesh.xml
+++ b/doc/classes/ImmediateMesh.xml
@@ -79,6 +79,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml
index cd14965d1b..9dc8fbeffa 100644
--- a/doc/classes/InputEvent.xml
+++ b/doc/classes/InputEvent.xml
@@ -106,6 +106,4 @@
[b]Note:[/b] This device ID will always be [code]-1[/code] for emulated mouse input from a touchscreen. This can be used to distinguish emulated mouse input from physical mouse input.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml
index 42326f344f..f09af1a34d 100644
--- a/doc/classes/InputEventAction.xml
+++ b/doc/classes/InputEventAction.xml
@@ -11,8 +11,6 @@
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="action" type="StringName" setter="set_action" getter="get_action" default="&amp;&quot;&quot;">
The action's name. Actions are accessed via this [String].
@@ -24,6 +22,4 @@
The action's strength between 0 and 1. This value is considered as equal to 0 if pressed is [code]false[/code]. The event strength allows faking analog joypad motion events, by specifying how strongly the joypad axis is bent or pressed.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventFromWindow.xml b/doc/classes/InputEventFromWindow.xml
index 7cd5b7d179..0d897b9699 100644
--- a/doc/classes/InputEventFromWindow.xml
+++ b/doc/classes/InputEventFromWindow.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="window_id" type="int" setter="set_window_id" getter="get_window_id" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventGesture.xml b/doc/classes/InputEventGesture.xml
index fbde318ada..2d57b84cc8 100644
--- a/doc/classes/InputEventGesture.xml
+++ b/doc/classes/InputEventGesture.xml
@@ -7,13 +7,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="position" type="Vector2" setter="set_position" getter="get_position" default="Vector2(0, 0)">
The local gesture position relative to the [Viewport]. If used in [method Control._gui_input], the position is relative to the current [Control] that received this gesture.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml
index f9afe42a7a..ff82913385 100644
--- a/doc/classes/InputEventJoypadButton.xml
+++ b/doc/classes/InputEventJoypadButton.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="JoyButton" default="0">
Button identifier. One of the [enum JoyButton] button constants.
@@ -22,6 +20,4 @@
Represents the pressure the user puts on the button with his finger, if the controller supports it. Ranges from [code]0[/code] to [code]1[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml
index 398b9eb6f6..92161974ba 100644
--- a/doc/classes/InputEventJoypadMotion.xml
+++ b/doc/classes/InputEventJoypadMotion.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="axis" type="int" setter="set_axis" getter="get_axis" enum="JoyAxis" default="0">
Axis identifier. Use one of the [enum JoyAxis] axis constants.
@@ -19,6 +17,4 @@
Current position of the joystick on the given axis. The value ranges from [code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the axis is in its resting position.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml
index f670d907fc..9cf6872655 100644
--- a/doc/classes/InputEventKey.xml
+++ b/doc/classes/InputEventKey.xml
@@ -44,6 +44,4 @@
The key Unicode identifier (when relevant). Unicode identifiers for the composite characters and complex scripts may not be available unless IME input mode is active. See [method Window.set_ime_active] for more information.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventMIDI.xml b/doc/classes/InputEventMIDI.xml
index afc9d476da..040eee7b98 100644
--- a/doc/classes/InputEventMIDI.xml
+++ b/doc/classes/InputEventMIDI.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="channel" type="int" setter="set_channel" getter="get_channel" default="0">
</member>
@@ -26,6 +24,4 @@
<member name="velocity" type="int" setter="set_velocity" getter="get_velocity" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventMagnifyGesture.xml b/doc/classes/InputEventMagnifyGesture.xml
index 3e539b2f97..ed0860a63a 100644
--- a/doc/classes/InputEventMagnifyGesture.xml
+++ b/doc/classes/InputEventMagnifyGesture.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="factor" type="float" setter="set_factor" getter="get_factor" default="1.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml
index b8043118b7..b06068aff3 100644
--- a/doc/classes/InputEventMouse.xml
+++ b/doc/classes/InputEventMouse.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" default="0">
The mouse button mask identifier, one of or a bitwise combination of the [enum MouseButton] button masks.
@@ -22,6 +20,4 @@
The local mouse position relative to the [Viewport]. If used in [method Control._gui_input], the position is relative to the current [Control] which is under the mouse.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml
index 7a6c7410ef..dcfe0d6c71 100644
--- a/doc/classes/InputEventMouseButton.xml
+++ b/doc/classes/InputEventMouseButton.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="MouseButton" default="0">
The mouse button identifier, one of the [enum MouseButton] button or button wheel constants.
@@ -25,6 +23,4 @@
If [code]true[/code], the mouse button's state is pressed. If [code]false[/code], the mouse button's state is released.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml
index 881d74ac7b..9a0156510e 100644
--- a/doc/classes/InputEventMouseMotion.xml
+++ b/doc/classes/InputEventMouseMotion.xml
@@ -11,8 +11,6 @@
<link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="pressure" type="float" setter="set_pressure" getter="get_pressure" default="0.0">
Represents the pressure the user puts on the pen. Ranges from [code]0.0[/code] to [code]1.0[/code].
@@ -28,6 +26,4 @@
Represents the angles of tilt of the pen. Positive X-coordinate value indicates a tilt to the right. Positive Y-coordinate value indicates a tilt toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both axes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventPanGesture.xml b/doc/classes/InputEventPanGesture.xml
index ffb1901dad..2de3459df7 100644
--- a/doc/classes/InputEventPanGesture.xml
+++ b/doc/classes/InputEventPanGesture.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="delta" type="Vector2" setter="set_delta" getter="get_delta" default="Vector2(0, 0)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml
index 079ac03f45..373936225b 100644
--- a/doc/classes/InputEventScreenDrag.xml
+++ b/doc/classes/InputEventScreenDrag.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
The drag event index in the case of a multi-drag event.
@@ -25,6 +23,4 @@
The drag speed.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml
index 7aa5f62b05..c731044c98 100644
--- a/doc/classes/InputEventScreenTouch.xml
+++ b/doc/classes/InputEventScreenTouch.xml
@@ -10,8 +10,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
The touch index in the case of a multi-touch event. One index = one finger.
@@ -23,6 +21,4 @@
If [code]true[/code], the touch's state is pressed. If [code]false[/code], the touch's state is released.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventShortcut.xml b/doc/classes/InputEventShortcut.xml
index 35cca02cf7..ea84db541c 100644
--- a/doc/classes/InputEventShortcut.xml
+++ b/doc/classes/InputEventShortcut.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="shortcut" type="Shortcut" setter="set_shortcut" getter="get_shortcut">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml
index 3beea7f9a0..1b9212bf65 100644
--- a/doc/classes/InputEventWithModifiers.xml
+++ b/doc/classes/InputEventWithModifiers.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="alt_pressed" type="bool" setter="set_alt_pressed" getter="is_alt_pressed" default="false">
State of the [kbd]Alt[/kbd] modifier.
@@ -32,6 +30,4 @@
This aids with cross-platform compatibility when developing e.g. on Windows for macOS, or vice-versa.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml
index 16c2695613..855d5b5d71 100644
--- a/doc/classes/InputMap.xml
+++ b/doc/classes/InputMap.xml
@@ -109,6 +109,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/InstancePlaceholder.xml b/doc/classes/InstancePlaceholder.xml
index 75892895d7..e67232ebac 100644
--- a/doc/classes/InstancePlaceholder.xml
+++ b/doc/classes/InstancePlaceholder.xml
@@ -31,6 +31,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/IntervalTweener.xml b/doc/classes/IntervalTweener.xml
index 1c59003c70..f2f58b4ca6 100644
--- a/doc/classes/IntervalTweener.xml
+++ b/doc/classes/IntervalTweener.xml
@@ -9,8 +9,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JNISingleton.xml b/doc/classes/JNISingleton.xml
index fbf18ddc03..ce39e1f567 100644
--- a/doc/classes/JNISingleton.xml
+++ b/doc/classes/JNISingleton.xml
@@ -9,8 +9,4 @@
<tutorials>
<link title="Creating Android plugins">https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html#doc-android-plugin</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JSON.xml b/doc/classes/JSON.xml
index cee7db08e9..63e6307b39 100644
--- a/doc/classes/JSON.xml
+++ b/doc/classes/JSON.xml
@@ -91,6 +91,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JavaClass.xml b/doc/classes/JavaClass.xml
index 0b6a44fe14..b024f0ccd4 100644
--- a/doc/classes/JavaClass.xml
+++ b/doc/classes/JavaClass.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JavaClassWrapper.xml b/doc/classes/JavaClassWrapper.xml
index 90d988f9bb..f532207f03 100644
--- a/doc/classes/JavaClassWrapper.xml
+++ b/doc/classes/JavaClassWrapper.xml
@@ -14,6 +14,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml
index d68b4492c7..5865ad734e 100644
--- a/doc/classes/JavaScript.xml
+++ b/doc/classes/JavaScript.xml
@@ -54,6 +54,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/JavaScriptObject.xml b/doc/classes/JavaScriptObject.xml
index 087fe163b4..5aa54a7d0c 100644
--- a/doc/classes/JavaScriptObject.xml
+++ b/doc/classes/JavaScriptObject.xml
@@ -35,8 +35,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Joint2D.xml b/doc/classes/Joint2D.xml
index b055293b9d..b003224ad4 100644
--- a/doc/classes/Joint2D.xml
+++ b/doc/classes/Joint2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="bias" type="float" setter="set_bias" getter="get_bias" default="0.0">
When [member node_a] and [member node_b] move in different directions the [code]bias[/code] controls how fast the joint pulls them back to their original position. The lower the [code]bias[/code] the more the two bodies can pull on the joint.
@@ -24,6 +22,4 @@
The second body attached to the joint. Must derive from [PhysicsBody2D].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Joint3D.xml b/doc/classes/Joint3D.xml
index 94cdda586c..4b2c1ab4cb 100644
--- a/doc/classes/Joint3D.xml
+++ b/doc/classes/Joint3D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="collision/exclude_nodes" type="bool" setter="set_exclude_nodes_from_collision" getter="get_exclude_nodes_from_collision" default="true">
If [code]true[/code], the two bodies of the nodes are not able to collide with each other.
@@ -25,6 +23,4 @@
The priority used to define which solver is executed first for multiple joints. The lower the value, the higher the priority.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/KinematicCollision2D.xml b/doc/classes/KinematicCollision2D.xml
index 721b840e99..c558c541ad 100644
--- a/doc/classes/KinematicCollision2D.xml
+++ b/doc/classes/KinematicCollision2D.xml
@@ -56,6 +56,4 @@
The distance the moving object traveled before collision.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/KinematicCollision3D.xml b/doc/classes/KinematicCollision3D.xml
index 5477736c25..bc2d80218d 100644
--- a/doc/classes/KinematicCollision3D.xml
+++ b/doc/classes/KinematicCollision3D.xml
@@ -56,6 +56,4 @@
The distance the moving object traveled before collision.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml
index 550daf9225..ba795a29a1 100644
--- a/doc/classes/LightOccluder2D.xml
+++ b/doc/classes/LightOccluder2D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="occluder" type="OccluderPolygon2D" setter="set_occluder_polygon" getter="get_occluder_polygon">
The [OccluderPolygon2D] used to compute the shadow.
@@ -21,6 +19,4 @@
<member name="sdf_collision" type="bool" setter="set_as_sdf_collision" getter="is_set_as_sdf_collision" default="true">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml
index d7722a83b0..0cdf9f820f 100644
--- a/doc/classes/LightmapGI.xml
+++ b/doc/classes/LightmapGI.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="bias" type="float" setter="set_bias" getter="get_bias" default="0.0005">
</member>
diff --git a/doc/classes/LightmapGIData.xml b/doc/classes/LightmapGIData.xml
index c577439c8f..f678ae48d9 100644
--- a/doc/classes/LightmapGIData.xml
+++ b/doc/classes/LightmapGIData.xml
@@ -48,6 +48,4 @@
<member name="light_texture" type="TextureLayered" setter="set_light_texture" getter="get_light_texture">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/LightmapProbe.xml b/doc/classes/LightmapProbe.xml
index 3af71f3774..465e645216 100644
--- a/doc/classes/LightmapProbe.xml
+++ b/doc/classes/LightmapProbe.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Lightmapper.xml b/doc/classes/Lightmapper.xml
index 79fae42d68..d9a9a55f6a 100644
--- a/doc/classes/Lightmapper.xml
+++ b/doc/classes/Lightmapper.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/LightmapperRD.xml b/doc/classes/LightmapperRD.xml
index 0993b28f19..cfa9a4e2df 100644
--- a/doc/classes/LightmapperRD.xml
+++ b/doc/classes/LightmapperRD.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MarginContainer.xml b/doc/classes/MarginContainer.xml
index 419857c13f..2948e58f50 100644
--- a/doc/classes/MarginContainer.xml
+++ b/doc/classes/MarginContainer.xml
@@ -27,10 +27,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="margin_bottom" data_type="constant" type="int" default="0">
All direct children of [MarginContainer] will have a bottom margin of [code]margin_bottom[/code] pixels.
diff --git a/doc/classes/Marshalls.xml b/doc/classes/Marshalls.xml
index 0f36dd11ca..eb6635f03f 100644
--- a/doc/classes/Marshalls.xml
+++ b/doc/classes/Marshalls.xml
@@ -55,6 +55,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml
index 1c7e6f1f19..5bdc9cccd9 100644
--- a/doc/classes/MenuButton.xml
+++ b/doc/classes/MenuButton.xml
@@ -41,8 +41,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="disabled" data_type="style" type="StyleBox">
[StyleBox] used when the [MenuButton] is disabled.
diff --git a/doc/classes/MeshDataTool.xml b/doc/classes/MeshDataTool.xml
index 338deed0be..35e4451918 100644
--- a/doc/classes/MeshDataTool.xml
+++ b/doc/classes/MeshDataTool.xml
@@ -332,6 +332,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml
index 59b312f69a..c7b66c8ea3 100644
--- a/doc/classes/MeshInstance2D.xml
+++ b/doc/classes/MeshInstance2D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="2D meshes">https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh">
The [Mesh] that will be drawn by the [MeshInstance2D].
@@ -30,6 +28,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MeshInstance3D.xml b/doc/classes/MeshInstance3D.xml
index 665d5d3c77..507a76197a 100644
--- a/doc/classes/MeshInstance3D.xml
+++ b/doc/classes/MeshInstance3D.xml
@@ -81,6 +81,4 @@
Sets the skin to be used by this instance.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MeshLibrary.xml b/doc/classes/MeshLibrary.xml
index 1d07647ea7..9fde19588a 100644
--- a/doc/classes/MeshLibrary.xml
+++ b/doc/classes/MeshLibrary.xml
@@ -160,6 +160,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MeshTexture.xml b/doc/classes/MeshTexture.xml
index 57f2397874..eb0451fea6 100644
--- a/doc/classes/MeshTexture.xml
+++ b/doc/classes/MeshTexture.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_texture" type="Texture2D" setter="set_base_texture" getter="get_base_texture">
Sets the base texture that the Mesh will use to draw.
@@ -21,6 +19,4 @@
Sets the mesh used to draw. It must be a mesh using 2D vertices.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MethodTweener.xml b/doc/classes/MethodTweener.xml
index 1b93b20d9f..5780aa00d9 100644
--- a/doc/classes/MethodTweener.xml
+++ b/doc/classes/MethodTweener.xml
@@ -32,6 +32,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MultiMeshInstance2D.xml b/doc/classes/MultiMeshInstance2D.xml
index a461c8e056..328ddff0eb 100644
--- a/doc/classes/MultiMeshInstance2D.xml
+++ b/doc/classes/MultiMeshInstance2D.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh">
The [MultiMesh] that will be drawn by the [MultiMeshInstance2D].
@@ -30,6 +28,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MultiMeshInstance3D.xml b/doc/classes/MultiMeshInstance3D.xml
index 7d8035ba77..7bf05d2d34 100644
--- a/doc/classes/MultiMeshInstance3D.xml
+++ b/doc/classes/MultiMeshInstance3D.xml
@@ -12,13 +12,9 @@
<link title="Using MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link>
<link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/optimization/using_multimesh.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh">
The [MultiMesh] resource that will be used and shared among all instances of the [MultiMeshInstance3D].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/MultiplayerAPI.xml b/doc/classes/MultiplayerAPI.xml
index 647233f679..0da461dd61 100644
--- a/doc/classes/MultiplayerAPI.xml
+++ b/doc/classes/MultiplayerAPI.xml
@@ -121,6 +121,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml
index 0e6b1e3e44..eb9bec1104 100644
--- a/doc/classes/Mutex.xml
+++ b/doc/classes/Mutex.xml
@@ -32,6 +32,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationAgent2D.xml b/doc/classes/NavigationAgent2D.xml
index c05f7c2094..068854024c 100644
--- a/doc/classes/NavigationAgent2D.xml
+++ b/doc/classes/NavigationAgent2D.xml
@@ -129,6 +129,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationAgent3D.xml b/doc/classes/NavigationAgent3D.xml
index af4a058489..f429134a71 100644
--- a/doc/classes/NavigationAgent3D.xml
+++ b/doc/classes/NavigationAgent3D.xml
@@ -135,6 +135,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationMeshGenerator.xml b/doc/classes/NavigationMeshGenerator.xml
index 9931033260..ca285c030c 100644
--- a/doc/classes/NavigationMeshGenerator.xml
+++ b/doc/classes/NavigationMeshGenerator.xml
@@ -21,6 +21,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationObstacle2D.xml b/doc/classes/NavigationObstacle2D.xml
index 2e94eb0bba..462532d49a 100644
--- a/doc/classes/NavigationObstacle2D.xml
+++ b/doc/classes/NavigationObstacle2D.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationObstacle3D.xml b/doc/classes/NavigationObstacle3D.xml
index d7454a7bea..c0cb7befef 100644
--- a/doc/classes/NavigationObstacle3D.xml
+++ b/doc/classes/NavigationObstacle3D.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml
index e1e2c34a63..5b5b7c42ef 100644
--- a/doc/classes/NavigationPolygon.xml
+++ b/doc/classes/NavigationPolygon.xml
@@ -141,6 +141,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationRegion2D.xml b/doc/classes/NavigationRegion2D.xml
index 33a3f04c3d..6c78b25744 100644
--- a/doc/classes/NavigationRegion2D.xml
+++ b/doc/classes/NavigationRegion2D.xml
@@ -10,8 +10,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
Determines if the [NavigationRegion2D] is enabled or disabled.
@@ -23,6 +21,4 @@
The [NavigationPolygon] resource to use.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationRegion3D.xml b/doc/classes/NavigationRegion3D.xml
index da06641b48..f91069fa9d 100644
--- a/doc/classes/NavigationRegion3D.xml
+++ b/doc/classes/NavigationRegion3D.xml
@@ -40,6 +40,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationServer2D.xml b/doc/classes/NavigationServer2D.xml
index 042ab06e6f..1740093eb2 100644
--- a/doc/classes/NavigationServer2D.xml
+++ b/doc/classes/NavigationServer2D.xml
@@ -272,6 +272,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml
index 73ca18655a..3e10657838 100644
--- a/doc/classes/NavigationServer3D.xml
+++ b/doc/classes/NavigationServer3D.xml
@@ -329,6 +329,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml
index 4f5c2bbd6e..ef5f9ee5c9 100644
--- a/doc/classes/Node2D.xml
+++ b/doc/classes/Node2D.xml
@@ -130,6 +130,4 @@
Z index. Controls the order in which the nodes render. A node with a higher Z index will display in front of others. Must be between [constant RenderingServer.CANVAS_ITEM_Z_MIN] and [constant RenderingServer.CANVAS_ITEM_Z_MAX] (inclusive).
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Node3DGizmo.xml b/doc/classes/Node3DGizmo.xml
index c561047332..00298976a8 100644
--- a/doc/classes/Node3DGizmo.xml
+++ b/doc/classes/Node3DGizmo.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/NodePath.xml b/doc/classes/NodePath.xml
index 87b3e39f48..17c6ba38b7 100644
--- a/doc/classes/NodePath.xml
+++ b/doc/classes/NodePath.xml
@@ -189,6 +189,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ORMMaterial3D.xml b/doc/classes/ORMMaterial3D.xml
index d275f93196..7ca4f5d363 100644
--- a/doc/classes/ORMMaterial3D.xml
+++ b/doc/classes/ORMMaterial3D.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 305258c8c5..e2ac8568c9 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -55,14 +55,18 @@
<return type="void" />
<argument index="0" name="msec" type="int" />
<description>
- Delay execution of the current thread by [code]msec[/code] milliseconds. [code]msec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_msec] will do nothing and will print an error message.
+ Delays execution of the current thread by [code]msec[/code] milliseconds. [code]msec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_msec] will do nothing and will print an error message.
+ [b]Note:[/b] [method delay_msec] is a [i]blocking[/i] way to delay code execution. To delay code execution in a non-blocking way, see [method SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will delay the execution of code placed below the [code]yield[/code] without affecting the rest of the project (or editor, for [EditorPlugin]s and [EditorScript]s).
+ [b]Note:[/b] When [method delay_msec] is called on the main thread, it will freeze the project and will prevent it from redrawing and registering input until the delay has passed. When using [method delay_msec] as part of an [EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze the project if it is currently running (since the project is an independent child process).
</description>
</method>
<method name="delay_usec" qualifiers="const">
<return type="void" />
<argument index="0" name="usec" type="int" />
<description>
- Delay execution of the current thread by [code]usec[/code] microseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_usec] will do nothing and will print an error message.
+ Delays execution of the current thread by [code]usec[/code] microseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_usec] will do nothing and will print an error message.
+ [b]Note:[/b] [method delay_usec] is a [i]blocking[/i] way to delay code execution. To delay code execution in a non-blocking way, see [method SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will delay the execution of code placed below the [code]yield[/code] without affecting the rest of the project (or editor, for [EditorPlugin]s and [EditorScript]s).
+ [b]Note:[/b] When [method delay_usec] is called on the main thread, it will freeze the project and will prevent it from redrawing and registering input until the delay has passed. When using [method delay_usec] as part of an [EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze the project if it is currently running (since the project is an independent child process).
</description>
</method>
<method name="dump_memory_to_file">
@@ -338,7 +342,7 @@
<method name="is_stdout_verbose" qualifiers="const">
<return type="bool" />
<description>
- Returns [code]true[/code] if the engine was executed with [code]-v[/code] (verbose stdout).
+ Returns [code]true[/code] if the engine was executed with the [code]--verbose[/code] or [code]-v[/code] command line argument, or if [member ProjectSettings.debug/settings/stdout/verbose_stdout] is [code]true[/code]. See also [method @GlobalScope.print_verbose].
</description>
</method>
<method name="is_userfs_persistent" qualifiers="const">
diff --git a/doc/classes/Occluder3D.xml b/doc/classes/Occluder3D.xml
index 501c4a3ccf..69fb3002e3 100644
--- a/doc/classes/Occluder3D.xml
+++ b/doc/classes/Occluder3D.xml
@@ -6,14 +6,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="indices" type="PackedInt32Array" setter="set_indices" getter="get_indices" default="PackedInt32Array()">
</member>
<member name="vertices" type="PackedVector3Array" setter="set_vertices" getter="get_vertices" default="PackedVector3Array()">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/OccluderInstance3D.xml b/doc/classes/OccluderInstance3D.xml
index cc4bddc229..d97aa4312f 100644
--- a/doc/classes/OccluderInstance3D.xml
+++ b/doc/classes/OccluderInstance3D.xml
@@ -29,6 +29,4 @@
<member name="occluder" type="Occluder3D" setter="set_occluder" getter="get_occluder">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/OccluderPolygon2D.xml b/doc/classes/OccluderPolygon2D.xml
index 28d3ed433a..e347888414 100644
--- a/doc/classes/OccluderPolygon2D.xml
+++ b/doc/classes/OccluderPolygon2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="closed" type="bool" setter="set_closed" getter="is_closed" default="true">
If [code]true[/code], closes the polygon. A closed OccluderPolygon2D occludes the light coming from any direction. An opened OccluderPolygon2D occludes the light only at its outline's direction.
diff --git a/doc/classes/OmniLight3D.xml b/doc/classes/OmniLight3D.xml
index dfcb19a287..e8d5977199 100644
--- a/doc/classes/OmniLight3D.xml
+++ b/doc/classes/OmniLight3D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="omni_attenuation" type="float" setter="set_param" getter="get_param" default="1.0">
The light's attenuation (drop-off) curve. A number of presets are available in the [b]Inspector[/b] by right-clicking the curve.
diff --git a/doc/classes/OptimizedTranslation.xml b/doc/classes/OptimizedTranslation.xml
index 195fa28188..8302a564ed 100644
--- a/doc/classes/OptimizedTranslation.xml
+++ b/doc/classes/OptimizedTranslation.xml
@@ -17,6 +17,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/OptionButton.xml b/doc/classes/OptionButton.xml
index 8aa0ad073d..264ef9975a 100644
--- a/doc/classes/OptionButton.xml
+++ b/doc/classes/OptionButton.xml
@@ -183,8 +183,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="arrow" data_type="icon" type="Texture2D">
The arrow icon to be drawn on the right end of the button.
diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml
index 0af329983d..28508c85e0 100644
--- a/doc/classes/PCKPacker.xml
+++ b/doc/classes/PCKPacker.xml
@@ -51,6 +51,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedByteArray.xml b/doc/classes/PackedByteArray.xml
index 9b8057d91a..8e94254a1f 100644
--- a/doc/classes/PackedByteArray.xml
+++ b/doc/classes/PackedByteArray.xml
@@ -436,6 +436,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedColorArray.xml b/doc/classes/PackedColorArray.xml
index fb744d7534..4bccdcd939 100644
--- a/doc/classes/PackedColorArray.xml
+++ b/doc/classes/PackedColorArray.xml
@@ -171,6 +171,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedDataContainer.xml b/doc/classes/PackedDataContainer.xml
index 0a765fcc75..2454e565e6 100644
--- a/doc/classes/PackedDataContainer.xml
+++ b/doc/classes/PackedDataContainer.xml
@@ -23,6 +23,4 @@
<member name="__data__" type="PackedByteArray" setter="_set_data" getter="_get_data" default="PackedByteArray()">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedDataContainerRef.xml b/doc/classes/PackedDataContainerRef.xml
index 5e42079b97..131a6be4e2 100644
--- a/doc/classes/PackedDataContainerRef.xml
+++ b/doc/classes/PackedDataContainerRef.xml
@@ -14,6 +14,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedFloat32Array.xml b/doc/classes/PackedFloat32Array.xml
index 0c05e8f3c2..51e14ea3d4 100644
--- a/doc/classes/PackedFloat32Array.xml
+++ b/doc/classes/PackedFloat32Array.xml
@@ -174,6 +174,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedFloat64Array.xml b/doc/classes/PackedFloat64Array.xml
index e55bc0e657..25c9c025f7 100644
--- a/doc/classes/PackedFloat64Array.xml
+++ b/doc/classes/PackedFloat64Array.xml
@@ -174,6 +174,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedInt32Array.xml b/doc/classes/PackedInt32Array.xml
index 887a7a1e51..1a61ce0ead 100644
--- a/doc/classes/PackedInt32Array.xml
+++ b/doc/classes/PackedInt32Array.xml
@@ -174,6 +174,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedInt64Array.xml b/doc/classes/PackedInt64Array.xml
index da661b12c3..06f7900237 100644
--- a/doc/classes/PackedInt64Array.xml
+++ b/doc/classes/PackedInt64Array.xml
@@ -174,6 +174,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedStringArray.xml b/doc/classes/PackedStringArray.xml
index 8f16abaf37..763ed0cc55 100644
--- a/doc/classes/PackedStringArray.xml
+++ b/doc/classes/PackedStringArray.xml
@@ -172,6 +172,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedVector2Array.xml b/doc/classes/PackedVector2Array.xml
index 3678222da4..3f0797bb59 100644
--- a/doc/classes/PackedVector2Array.xml
+++ b/doc/classes/PackedVector2Array.xml
@@ -178,6 +178,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PackedVector3Array.xml b/doc/classes/PackedVector3Array.xml
index 84d4297a3b..6b950cad61 100644
--- a/doc/classes/PackedVector3Array.xml
+++ b/doc/classes/PackedVector3Array.xml
@@ -177,6 +177,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PacketPeer.xml b/doc/classes/PacketPeer.xml
index 8d0aa89287..fb94209d72 100644
--- a/doc/classes/PacketPeer.xml
+++ b/doc/classes/PacketPeer.xml
@@ -57,6 +57,4 @@
The [method put_var] method allocates memory on the stack, and the buffer used will grow automatically to the closest power of two to match the size of the [Variant]. If the [Variant] is bigger than [code]encode_buffer_max_size[/code], the method will error out with [constant ERR_OUT_OF_MEMORY].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PacketPeerStream.xml b/doc/classes/PacketPeerStream.xml
index ec1ee175f7..a92aaf037e 100644
--- a/doc/classes/PacketPeerStream.xml
+++ b/doc/classes/PacketPeerStream.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="input_buffer_max_size" type="int" setter="set_input_buffer_max_size" getter="get_input_buffer_max_size" default="65532">
</member>
@@ -19,6 +17,4 @@
The wrapped [StreamPeer] object.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PacketPeerUDP.xml b/doc/classes/PacketPeerUDP.xml
index e2acb91058..ecaddc5b9f 100644
--- a/doc/classes/PacketPeerUDP.xml
+++ b/doc/classes/PacketPeerUDP.xml
@@ -139,6 +139,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Panel.xml b/doc/classes/Panel.xml
index 9906abf895..21ac7dfac1 100644
--- a/doc/classes/Panel.xml
+++ b/doc/classes/Panel.xml
@@ -11,8 +11,6 @@
<link title="2D Finite State Machine Demo">https://godotengine.org/asset-library/asset/516</link>
<link title="3D Inverse Kinematics Demo">https://godotengine.org/asset-library/asset/523</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mode" type="int" setter="set_mode" getter="get_mode" enum="Panel.Mode" default="0">
</member>
diff --git a/doc/classes/PanelContainer.xml b/doc/classes/PanelContainer.xml
index f3f2f6839a..95d038e2af 100644
--- a/doc/classes/PanelContainer.xml
+++ b/doc/classes/PanelContainer.xml
@@ -9,13 +9,9 @@
<tutorials>
<link title="2D Role Playing Game Demo">https://godotengine.org/asset-library/asset/520</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="0" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="panel" data_type="style" type="StyleBox">
The style of [PanelContainer]'s background.
diff --git a/doc/classes/PanoramaSkyMaterial.xml b/doc/classes/PanoramaSkyMaterial.xml
index 905a2dd506..6707c03fac 100644
--- a/doc/classes/PanoramaSkyMaterial.xml
+++ b/doc/classes/PanoramaSkyMaterial.xml
@@ -10,13 +10,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="panorama" type="Texture2D" setter="set_panorama" getter="get_panorama">
[Texture2D] to be applied to the [PanoramaSkyMaterial].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ParallaxBackground.xml b/doc/classes/ParallaxBackground.xml
index b8097343f4..5670660d01 100644
--- a/doc/classes/ParallaxBackground.xml
+++ b/doc/classes/ParallaxBackground.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="layer" type="int" setter="set_layer" getter="get_layer" override="true" default="-100" />
<member name="scroll_base_offset" type="Vector2" setter="set_scroll_base_offset" getter="get_scroll_base_offset" default="Vector2(0, 0)">
@@ -31,6 +29,4 @@
The ParallaxBackground's scroll value. Calculated automatically when using a [Camera2D], but can be used to manually manage scrolling when no camera is present.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ParallaxLayer.xml b/doc/classes/ParallaxLayer.xml
index 6b1e013851..459518ab1c 100644
--- a/doc/classes/ParallaxLayer.xml
+++ b/doc/classes/ParallaxLayer.xml
@@ -10,8 +10,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="motion_mirroring" type="Vector2" setter="set_mirroring" getter="get_mirroring" default="Vector2(0, 0)">
The ParallaxLayer's [Texture2D] mirroring. Useful for creating an infinite scrolling background. If an axis is set to [code]0[/code], the [Texture2D] will not be mirrored.
@@ -23,6 +21,4 @@
Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], it will not scroll.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Path2D.xml b/doc/classes/Path2D.xml
index 57e2091268..297fe69986 100644
--- a/doc/classes/Path2D.xml
+++ b/doc/classes/Path2D.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve" type="Curve2D" setter="set_curve" getter="get_curve">
A [Curve2D] describing the path.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Path3D.xml b/doc/classes/Path3D.xml
index b97e7efd5d..ce5774acab 100644
--- a/doc/classes/Path3D.xml
+++ b/doc/classes/Path3D.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve" type="Curve3D" setter="set_curve" getter="get_curve">
A [Curve3D] describing the path.
@@ -23,6 +21,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PathFollow2D.xml b/doc/classes/PathFollow2D.xml
index 4b55e7b781..98106fd580 100644
--- a/doc/classes/PathFollow2D.xml
+++ b/doc/classes/PathFollow2D.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cubic_interp" type="bool" setter="set_cubic_interpolation" getter="get_cubic_interpolation" default="true">
If [code]true[/code], the position between two cached points is interpolated cubically, and linearly otherwise.
@@ -39,6 +37,4 @@
The node's offset perpendicular to the curve.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PathFollow3D.xml b/doc/classes/PathFollow3D.xml
index f405bdedfc..781e861203 100644
--- a/doc/classes/PathFollow3D.xml
+++ b/doc/classes/PathFollow3D.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cubic_interp" type="bool" setter="set_cubic_interpolation" getter="get_cubic_interpolation" default="true">
If [code]true[/code], the position between two cached points is interpolated cubically, and linearly otherwise.
diff --git a/doc/classes/PhysicalBone2D.xml b/doc/classes/PhysicalBone2D.xml
index 8fa42a9596..339739b267 100644
--- a/doc/classes/PhysicalBone2D.xml
+++ b/doc/classes/PhysicalBone2D.xml
@@ -42,6 +42,4 @@
[b]Note:[/b] To have the Bone2D nodes visually follow the [code]PhysicalBone2D[/code] node, use a [SkeletonModification2DPhysicalBones] modification on the [Skeleton2D] node with the [Bone2D] nodes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicalSkyMaterial.xml b/doc/classes/PhysicalSkyMaterial.xml
index 20ab998d35..b90f52a70d 100644
--- a/doc/classes/PhysicalSkyMaterial.xml
+++ b/doc/classes/PhysicalSkyMaterial.xml
@@ -10,8 +10,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="dither_strength" type="float" setter="set_dither_strength" getter="get_dither_strength" default="1.0">
Sets the amount of dithering to use. Dithering helps reduce banding that appears from the smooth changes in color in the sky. Use the lowest value possible, higher amounts may add fuzziness to the sky.
@@ -47,6 +45,4 @@
Sets the thickness of the atmosphere. High turbidity creates a foggy looking atmosphere, while a low turbidity results in a clearer atmosphere.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml
index e00c473bcd..ee28500838 100644
--- a/doc/classes/PhysicsBody2D.xml
+++ b/doc/classes/PhysicsBody2D.xml
@@ -57,6 +57,4 @@
<members>
<member name="input_pickable" type="bool" setter="set_pickable" getter="is_pickable" override="true" default="false" />
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsBody3D.xml b/doc/classes/PhysicsBody3D.xml
index ea2553e28a..8b50bb7bd9 100644
--- a/doc/classes/PhysicsBody3D.xml
+++ b/doc/classes/PhysicsBody3D.xml
@@ -89,6 +89,4 @@
Lock the body's linear movement in the Z axis.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsDirectBodyState2D.xml b/doc/classes/PhysicsDirectBodyState2D.xml
index 56c34615ce..bbb708c9b4 100644
--- a/doc/classes/PhysicsDirectBodyState2D.xml
+++ b/doc/classes/PhysicsDirectBodyState2D.xml
@@ -187,6 +187,4 @@
The body's transformation matrix.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsDirectBodyState3D.xml b/doc/classes/PhysicsDirectBodyState3D.xml
index a7458ff495..9bc5dbd6b9 100644
--- a/doc/classes/PhysicsDirectBodyState3D.xml
+++ b/doc/classes/PhysicsDirectBodyState3D.xml
@@ -191,6 +191,4 @@
The body's transformation matrix.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsDirectSpaceState2D.xml b/doc/classes/PhysicsDirectSpaceState2D.xml
index 536c7e4e04..0264249dab 100644
--- a/doc/classes/PhysicsDirectSpaceState2D.xml
+++ b/doc/classes/PhysicsDirectSpaceState2D.xml
@@ -119,6 +119,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsDirectSpaceState3D.xml b/doc/classes/PhysicsDirectSpaceState3D.xml
index 4e6bd8456f..137e7bbf39 100644
--- a/doc/classes/PhysicsDirectSpaceState3D.xml
+++ b/doc/classes/PhysicsDirectSpaceState3D.xml
@@ -77,6 +77,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsMaterial.xml b/doc/classes/PhysicsMaterial.xml
index 0889c238dc..b557b083c7 100644
--- a/doc/classes/PhysicsMaterial.xml
+++ b/doc/classes/PhysicsMaterial.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="absorbent" type="bool" setter="set_absorbent" getter="is_absorbent" default="false">
If [code]true[/code], subtracts the bounciness from the colliding object's bounciness instead of adding it.
@@ -24,6 +22,4 @@
If [code]true[/code], the physics engine will use the friction of the object marked as "rough" when two objects collide. If [code]false[/code], the physics engine will use the lowest friction of all colliding objects instead. If [code]true[/code] for both colliding objects, the physics engine will use the highest friction.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml
index b54de15d15..6035b662ea 100644
--- a/doc/classes/PhysicsShapeQueryParameters2D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
If [code]true[/code], the query will take [Area2D]s into account.
@@ -67,6 +65,4 @@
The queried shape's transform matrix.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml
index f74d1b5e48..1a289ff9d0 100644
--- a/doc/classes/PhysicsShapeQueryParameters3D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false">
If [code]true[/code], the query will take [Area3D]s into account.
@@ -64,6 +62,4 @@
The queried shape's transform matrix.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsTestMotionResult2D.xml b/doc/classes/PhysicsTestMotionResult2D.xml
index 9c5d525f85..8d594af673 100644
--- a/doc/classes/PhysicsTestMotionResult2D.xml
+++ b/doc/classes/PhysicsTestMotionResult2D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="collider" type="Object" setter="" getter="get_collider">
</member>
@@ -34,6 +32,4 @@
<member name="travel" type="Vector2" setter="" getter="get_travel" default="Vector2(0, 0)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PhysicsTestMotionResult3D.xml b/doc/classes/PhysicsTestMotionResult3D.xml
index 6c18a097a1..c2d6709412 100644
--- a/doc/classes/PhysicsTestMotionResult3D.xml
+++ b/doc/classes/PhysicsTestMotionResult3D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="collider" type="Object" setter="" getter="get_collider">
</member>
@@ -34,6 +32,4 @@
<member name="travel" type="Vector3" setter="" getter="get_travel" default="Vector3(0, 0, 0)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PinJoint2D.xml b/doc/classes/PinJoint2D.xml
index ed45149cdf..d5890fe912 100644
--- a/doc/classes/PinJoint2D.xml
+++ b/doc/classes/PinJoint2D.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="softness" type="float" setter="set_softness" getter="get_softness" default="0.0">
The higher this value, the more the bond to the pinned partner can flex.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PlaneMesh.xml b/doc/classes/PlaneMesh.xml
index 56bf98772b..ff0385dbdb 100644
--- a/doc/classes/PlaneMesh.xml
+++ b/doc/classes/PlaneMesh.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3(0, 0, 0)">
Offset of the generated plane. Useful for particles.
@@ -25,6 +23,4 @@
Number of subdivision along the X axis.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PointLight2D.xml b/doc/classes/PointLight2D.xml
index a7207a3c80..9c13179056 100644
--- a/doc/classes/PointLight2D.xml
+++ b/doc/classes/PointLight2D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="0.0">
The height of the light. Used with 2D normal mapping.
@@ -22,6 +20,4 @@
The [member texture]'s scale factor.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PointMesh.xml b/doc/classes/PointMesh.xml
index 266ab2a898..7d1fa6ac35 100644
--- a/doc/classes/PointMesh.xml
+++ b/doc/classes/PointMesh.xml
@@ -10,8 +10,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Polygon2D.xml b/doc/classes/Polygon2D.xml
index 23106cddf7..cbffd9e554 100644
--- a/doc/classes/Polygon2D.xml
+++ b/doc/classes/Polygon2D.xml
@@ -114,6 +114,4 @@
Color for each vertex. Colors are interpolated between vertices, resulting in smooth gradients. There should be one per polygon vertex. If there are fewer, undefined vertices will use [code]color[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PolygonPathFinder.xml b/doc/classes/PolygonPathFinder.xml
index f77912bafe..945849e4df 100644
--- a/doc/classes/PolygonPathFinder.xml
+++ b/doc/classes/PolygonPathFinder.xml
@@ -59,6 +59,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml
index 89695989c8..a47f72b2b6 100644
--- a/doc/classes/Popup.xml
+++ b/doc/classes/Popup.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="borderless" type="bool" setter="set_flag" getter="get_flag" override="true" default="true" />
<member name="close_on_parent_focus" type="bool" setter="set_close_on_parent_focus" getter="get_close_on_parent_focus" default="true">
@@ -27,6 +25,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index 61b5aa89a6..2208c12e56 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -535,8 +535,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="checked" data_type="icon" type="Texture2D">
[Texture2D] icon for the checked checkbox items.
diff --git a/doc/classes/PopupPanel.xml b/doc/classes/PopupPanel.xml
index 56833f3f79..71753ffcc6 100644
--- a/doc/classes/PopupPanel.xml
+++ b/doc/classes/PopupPanel.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="panel" data_type="style" type="StyleBox">
The background panel style of this [PopupPanel].
diff --git a/doc/classes/Position2D.xml b/doc/classes/Position2D.xml
index 9fadb73a15..03d94b5db9 100644
--- a/doc/classes/Position2D.xml
+++ b/doc/classes/Position2D.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Position3D.xml b/doc/classes/Position3D.xml
index ca61a57483..22dc261520 100644
--- a/doc/classes/Position3D.xml
+++ b/doc/classes/Position3D.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PrimitiveMesh.xml b/doc/classes/PrimitiveMesh.xml
index 36bec3ff61..6d63f56f1c 100644
--- a/doc/classes/PrimitiveMesh.xml
+++ b/doc/classes/PrimitiveMesh.xml
@@ -40,6 +40,4 @@
The current [Material] of the primitive mesh.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PrismMesh.xml b/doc/classes/PrismMesh.xml
index 0e66281fd1..e369bfe1b2 100644
--- a/doc/classes/PrismMesh.xml
+++ b/doc/classes/PrismMesh.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="left_to_right" type="float" setter="set_left_to_right" getter="get_left_to_right" default="0.5">
Displacement of the upper edge along the X axis. 0.0 positions edge straight above the bottom-left edge.
@@ -27,6 +25,4 @@
Number of added edge loops along the X axis.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ProceduralSkyMaterial.xml b/doc/classes/ProceduralSkyMaterial.xml
index c598a2c266..02e6a2d9f8 100644
--- a/doc/classes/ProceduralSkyMaterial.xml
+++ b/doc/classes/ProceduralSkyMaterial.xml
@@ -10,8 +10,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="ground_bottom_color" type="Color" setter="set_ground_bottom_color" getter="get_ground_bottom_color" default="Color(0.12, 0.12, 0.13, 1)">
Color of the ground at the bottom. Blends with [member ground_horizon_color].
@@ -44,6 +42,4 @@
How quickly the sun fades away between the edge of the sun disk and [member sun_angle_max].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ProgressBar.xml b/doc/classes/ProgressBar.xml
index 8bd013c86c..88132967a0 100644
--- a/doc/classes/ProgressBar.xml
+++ b/doc/classes/ProgressBar.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="percent_visible" type="bool" setter="set_percent_visible" getter="is_percent_visible" default="true">
If [code]true[/code], the fill percentage is displayed on the bar.
@@ -17,8 +15,6 @@
<member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="0" />
<member name="step" type="float" setter="set_step" getter="get_step" override="true" default="0.01" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="bg" data_type="style" type="StyleBox">
The style of the background.
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 22ed14743a..b3872121bf 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -432,7 +432,7 @@
<member name="debug/settings/stdout/print_gpu_profile" type="bool" setter="" getter="" default="false">
</member>
<member name="debug/settings/stdout/verbose_stdout" type="bool" setter="" getter="" default="false">
- Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc.
+ Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc. This can also be enabled using the [code]--verbose[/code] or [code]-v[/code] command line argument, even on an exported project. See also [method OS.is_stdout_verbose] and [method @GlobalScope.print_verbose].
</member>
<member name="debug/settings/visual_script/max_call_stack" type="int" setter="" getter="" default="1024">
Maximum call stack in visual scripting, to avoid infinite recursion.
@@ -1778,6 +1778,4 @@
If [code]true[/code], XR support is enabled in Godot, this ensures required shaders are compiled.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/PropertyTweener.xml b/doc/classes/PropertyTweener.xml
index 7914b26676..71f56690d5 100644
--- a/doc/classes/PropertyTweener.xml
+++ b/doc/classes/PropertyTweener.xml
@@ -63,6 +63,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ProxyTexture.xml b/doc/classes/ProxyTexture.xml
index 4f25fbcdf9..09a9efaa7a 100644
--- a/doc/classes/ProxyTexture.xml
+++ b/doc/classes/ProxyTexture.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base" type="Texture2D" setter="set_base" getter="get_base">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/QuadMesh.xml b/doc/classes/QuadMesh.xml
index 4209e3db14..da7e74537a 100644
--- a/doc/classes/QuadMesh.xml
+++ b/doc/classes/QuadMesh.xml
@@ -10,8 +10,6 @@
<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3(0, 0, 0)">
Offset of the generated Quad. Useful for particles.
@@ -20,6 +18,4 @@
Size on the X and Y axes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDAttachmentFormat.xml b/doc/classes/RDAttachmentFormat.xml
index b73377bf77..0dea57b4ce 100644
--- a/doc/classes/RDAttachmentFormat.xml
+++ b/doc/classes/RDAttachmentFormat.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="36">
</member>
@@ -16,6 +14,4 @@
<member name="usage_flags" type="int" setter="set_usage_flags" getter="get_usage_flags" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDFramebufferPass.xml b/doc/classes/RDFramebufferPass.xml
index c26c41f93f..4469a5d447 100644
--- a/doc/classes/RDFramebufferPass.xml
+++ b/doc/classes/RDFramebufferPass.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color_attachments" type="PackedInt32Array" setter="set_color_attachments" getter="get_color_attachments" default="PackedInt32Array()">
Color attachments in order starting from 0. If this attachment is not used by the shader, pass ATTACHMENT_UNUSED to skip.
diff --git a/doc/classes/RDPipelineColorBlendState.xml b/doc/classes/RDPipelineColorBlendState.xml
index b672a053c7..6c740fb672 100644
--- a/doc/classes/RDPipelineColorBlendState.xml
+++ b/doc/classes/RDPipelineColorBlendState.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="attachments" type="RDPipelineColorBlendStateAttachment[]" setter="set_attachments" getter="get_attachments" default="[]">
</member>
@@ -18,6 +16,4 @@
<member name="logic_op" type="int" setter="set_logic_op" getter="get_logic_op" enum="RenderingDevice.LogicOperation" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDPipelineColorBlendStateAttachment.xml b/doc/classes/RDPipelineColorBlendStateAttachment.xml
index 30430d6670..c81da31367 100644
--- a/doc/classes/RDPipelineColorBlendStateAttachment.xml
+++ b/doc/classes/RDPipelineColorBlendStateAttachment.xml
@@ -37,6 +37,4 @@
<member name="write_r" type="bool" setter="set_write_r" getter="get_write_r" default="true">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDPipelineDepthStencilState.xml b/doc/classes/RDPipelineDepthStencilState.xml
index 76e0506bca..678b576dea 100644
--- a/doc/classes/RDPipelineDepthStencilState.xml
+++ b/doc/classes/RDPipelineDepthStencilState.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="back_op_compare" type="int" setter="set_back_op_compare" getter="get_back_op_compare" enum="RenderingDevice.CompareOperator" default="7">
</member>
@@ -52,6 +50,4 @@
<member name="front_op_write_mask" type="int" setter="set_front_op_write_mask" getter="get_front_op_write_mask" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDPipelineMultisampleState.xml b/doc/classes/RDPipelineMultisampleState.xml
index b4345f1f8b..fc9b617956 100644
--- a/doc/classes/RDPipelineMultisampleState.xml
+++ b/doc/classes/RDPipelineMultisampleState.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="enable_alpha_to_coverage" type="bool" setter="set_enable_alpha_to_coverage" getter="get_enable_alpha_to_coverage" default="false">
</member>
@@ -22,6 +20,4 @@
<member name="sample_masks" type="int[]" setter="set_sample_masks" getter="get_sample_masks" default="[]">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDPipelineRasterizationState.xml b/doc/classes/RDPipelineRasterizationState.xml
index 3f8c50cf42..54a6923f87 100644
--- a/doc/classes/RDPipelineRasterizationState.xml
+++ b/doc/classes/RDPipelineRasterizationState.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cull_mode" type="int" setter="set_cull_mode" getter="get_cull_mode" enum="RenderingDevice.PolygonCullMode" default="0">
</member>
@@ -32,6 +30,4 @@
<member name="wireframe" type="bool" setter="set_wireframe" getter="get_wireframe" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDPipelineSpecializationConstant.xml b/doc/classes/RDPipelineSpecializationConstant.xml
index 4d9481b846..301a860f26 100644
--- a/doc/classes/RDPipelineSpecializationConstant.xml
+++ b/doc/classes/RDPipelineSpecializationConstant.xml
@@ -6,14 +6,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant_id" type="int" setter="set_constant_id" getter="get_constant_id" default="0">
</member>
<member name="value" type="Variant" setter="set_value" getter="get_value">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDSamplerState.xml b/doc/classes/RDSamplerState.xml
index 9a9d55948c..259bf159a3 100644
--- a/doc/classes/RDSamplerState.xml
+++ b/doc/classes/RDSamplerState.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="anisotropy_max" type="float" setter="set_anisotropy_max" getter="get_anisotropy_max" default="1.0">
</member>
@@ -40,6 +38,4 @@
<member name="use_anisotropy" type="bool" setter="set_use_anisotropy" getter="get_use_anisotropy" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDShaderFile.xml b/doc/classes/RDShaderFile.xml
index 22fcf9867c..c46ab55b57 100644
--- a/doc/classes/RDShaderFile.xml
+++ b/doc/classes/RDShaderFile.xml
@@ -30,6 +30,4 @@
<member name="base_error" type="String" setter="set_base_error" getter="get_base_error" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDShaderSPIRV.xml b/doc/classes/RDShaderSPIRV.xml
index 20de8230aa..434b09b188 100644
--- a/doc/classes/RDShaderSPIRV.xml
+++ b/doc/classes/RDShaderSPIRV.xml
@@ -56,6 +56,4 @@
<member name="compile_error_vertex" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDShaderSource.xml b/doc/classes/RDShaderSource.xml
index 2d37ce37f2..4788bca7f4 100644
--- a/doc/classes/RDShaderSource.xml
+++ b/doc/classes/RDShaderSource.xml
@@ -35,6 +35,4 @@
<member name="source_vertex" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDTextureFormat.xml b/doc/classes/RDTextureFormat.xml
index 2588dcfc40..e4a6df199f 100644
--- a/doc/classes/RDTextureFormat.xml
+++ b/doc/classes/RDTextureFormat.xml
@@ -40,6 +40,4 @@
<member name="width" type="int" setter="set_width" getter="get_width" default="1">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDTextureView.xml b/doc/classes/RDTextureView.xml
index db140ae775..441d1f4079 100644
--- a/doc/classes/RDTextureView.xml
+++ b/doc/classes/RDTextureView.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="format_override" type="int" setter="set_format_override" getter="get_format_override" enum="RenderingDevice.DataFormat" default="226">
</member>
@@ -20,6 +18,4 @@
<member name="swizzle_r" type="int" setter="set_swizzle_r" getter="get_swizzle_r" enum="RenderingDevice.TextureSwizzle" default="3">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDUniform.xml b/doc/classes/RDUniform.xml
index 93adecc7de..4de90aa3dc 100644
--- a/doc/classes/RDUniform.xml
+++ b/doc/classes/RDUniform.xml
@@ -30,6 +30,4 @@
<member name="uniform_type" type="int" setter="set_uniform_type" getter="get_uniform_type" enum="RenderingDevice.UniformType" default="3">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RDVertexAttribute.xml b/doc/classes/RDVertexAttribute.xml
index 3499918cc8..17a55260c7 100644
--- a/doc/classes/RDVertexAttribute.xml
+++ b/doc/classes/RDVertexAttribute.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="226">
</member>
@@ -20,6 +18,4 @@
<member name="stride" type="int" setter="set_stride" getter="get_stride" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RID.xml b/doc/classes/RID.xml
index 424a76ee44..b4ba74f7e5 100644
--- a/doc/classes/RID.xml
+++ b/doc/classes/RID.xml
@@ -75,6 +75,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml
index fed6568d22..c011755df1 100644
--- a/doc/classes/RandomNumberGenerator.xml
+++ b/doc/classes/RandomNumberGenerator.xml
@@ -86,6 +86,4 @@
[b]Note:[/b] Do not set state to arbitrary values, since the random number generator requires the state to have certain qualities to behave properly. It should only be set to values that came from the state property itself. To initialize the random number generator with arbitrary input, use [member seed] instead.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Range.xml b/doc/classes/Range.xml
index 30b915b437..2926f93c8a 100644
--- a/doc/classes/Range.xml
+++ b/doc/classes/Range.xml
@@ -68,6 +68,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml
index 1d32db8078..ce5d48cfa4 100644
--- a/doc/classes/RayCast2D.xml
+++ b/doc/classes/RayCast2D.xml
@@ -122,6 +122,4 @@
The ray's destination point, relative to the RayCast's [code]position[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RayCast3D.xml b/doc/classes/RayCast3D.xml
index 8628ab7dac..c7253e81c4 100644
--- a/doc/classes/RayCast3D.xml
+++ b/doc/classes/RayCast3D.xml
@@ -131,6 +131,4 @@
The ray's destination point, relative to the RayCast's [code]position[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml
index fa8c57cd0c..e585224818 100644
--- a/doc/classes/Rect2.xml
+++ b/doc/classes/Rect2.xml
@@ -194,6 +194,4 @@
If the size is negative, you can use [method abs] to fix it.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml
index 00a8cf01c6..2f6f4de66d 100644
--- a/doc/classes/Rect2i.xml
+++ b/doc/classes/Rect2i.xml
@@ -179,6 +179,4 @@
If the size is negative, you can use [method abs] to fix it.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RectangleShape2D.xml b/doc/classes/RectangleShape2D.xml
index f2795ae4a1..add8da181a 100644
--- a/doc/classes/RectangleShape2D.xml
+++ b/doc/classes/RectangleShape2D.xml
@@ -10,13 +10,9 @@
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2(20, 20)">
The rectangle's width and height.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RefCounted.xml b/doc/classes/RefCounted.xml
index bf52c34777..5f18ccc14d 100644
--- a/doc/classes/RefCounted.xml
+++ b/doc/classes/RefCounted.xml
@@ -35,6 +35,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml
index df9a6f0a46..1db6879b45 100644
--- a/doc/classes/ReferenceRect.xml
+++ b/doc/classes/ReferenceRect.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="border_color" type="Color" setter="set_border_color" getter="get_border_color" default="Color(1, 0, 0, 1)">
Sets the border [Color] of the [ReferenceRect].
@@ -21,6 +19,4 @@
If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml
index db01faced8..7f2bd118d6 100644
--- a/doc/classes/ReflectionProbe.xml
+++ b/doc/classes/ReflectionProbe.xml
@@ -10,8 +10,6 @@
<tutorials>
<link title="Reflection probes">https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)">
</member>
diff --git a/doc/classes/RemoteTransform2D.xml b/doc/classes/RemoteTransform2D.xml
index 613726b555..c9be26a985 100644
--- a/doc/classes/RemoteTransform2D.xml
+++ b/doc/classes/RemoteTransform2D.xml
@@ -34,6 +34,4 @@
If [code]true[/code], global coordinates are used. If [code]false[/code], local coordinates are used.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RemoteTransform3D.xml b/doc/classes/RemoteTransform3D.xml
index cc19d5c25d..de727e719d 100644
--- a/doc/classes/RemoteTransform3D.xml
+++ b/doc/classes/RemoteTransform3D.xml
@@ -34,6 +34,4 @@
If [code]true[/code], global coordinates are used. If [code]false[/code], local coordinates are used.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml
index efb0339aa7..45b68f342c 100644
--- a/doc/classes/Resource.xml
+++ b/doc/classes/Resource.xml
@@ -84,6 +84,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ResourceFormatSaver.xml b/doc/classes/ResourceFormatSaver.xml
index 7ee8875321..8d48de9378 100644
--- a/doc/classes/ResourceFormatSaver.xml
+++ b/doc/classes/ResourceFormatSaver.xml
@@ -35,6 +35,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml
index 03d47ee518..9f551ad1d2 100644
--- a/doc/classes/ResourceImporter.xml
+++ b/doc/classes/ResourceImporter.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link>
</tutorials>
- <methods>
- </methods>
<constants>
<constant name="IMPORT_ORDER_DEFAULT" value="0" enum="ImportOrder">
The default import order.
diff --git a/doc/classes/ResourcePreloader.xml b/doc/classes/ResourcePreloader.xml
index 8ac8717581..565578cb22 100644
--- a/doc/classes/ResourcePreloader.xml
+++ b/doc/classes/ResourcePreloader.xml
@@ -54,6 +54,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RibbonTrailMesh.xml b/doc/classes/RibbonTrailMesh.xml
index 771f2e444b..c2e9c14bab 100644
--- a/doc/classes/RibbonTrailMesh.xml
+++ b/doc/classes/RibbonTrailMesh.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve" type="Curve" setter="set_curve" getter="get_curve">
</member>
diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml
index fd93f6be56..cf4b4f4a48 100644
--- a/doc/classes/RichTextEffect.xml
+++ b/doc/classes/RichTextEffect.xml
@@ -31,6 +31,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/RootMotionView.xml b/doc/classes/RootMotionView.xml
index e31ea9265e..5db13de44f 100644
--- a/doc/classes/RootMotionView.xml
+++ b/doc/classes/RootMotionView.xml
@@ -10,8 +10,6 @@
<tutorials>
<link title="Using AnimationTree - Root motion">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#root-motion</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="animation_path" type="NodePath" setter="set_animation_path" getter="get_animation_path">
Path to an [AnimationTree] node to use as a basis for root motion.
@@ -29,6 +27,4 @@
If [code]true[/code], the grid's points will all be on the same Y coordinate ([i]local[/i] Y = 0). If [code]false[/code], the points' original Y coordinate is preserved.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 9a38e52b23..8d7427611a 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -18,7 +18,7 @@
<argument index="0" name="group" type="StringName" />
<argument index="1" name="method" type="StringName" />
<description>
- Calls [code]method[/code] on each member of the given group. You can pass arguments to [code]method[/code] by specifying them at the end of the method call.
+ Calls [code]method[/code] on each member of the given group. You can pass arguments to [code]method[/code] by specifying them at the end of the method call. This method is equivalent of calling [method call_group_flags] with [constant GROUP_CALL_DEFAULT] flag.
[b]Note:[/b] [method call_group] will always call methods with an one-frame delay, in a way similar to [method Object.call_deferred]. To call methods immediately, use [method call_group_flags] with the [constant GROUP_CALL_REALTIME] flag.
</description>
</method>
@@ -29,7 +29,9 @@
<argument index="2" name="method" type="StringName" />
<description>
Calls [code]method[/code] on each member of the given group, respecting the given [enum GroupCallFlags]. You can pass arguments to [code]method[/code] by specifying them at the end of the method call.
- [b]Note:[/b] Group call flags are used to control the method calling behavior. If the [constant GROUP_CALL_REALTIME] flag is present in the [code]flags[/code] argument, methods will be called immediately. If this flag isn't present in [code]flags[/code], methods will be called with a one-frame delay in a way similar to [method call_group].
+ [codeblock]
+ get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree.GROUP_CALL_REVERSE, "bases", "destroy") # Call the method immediately and in reverse order.
+ [/codeblock]
</description>
</method>
<method name="change_scene">
diff --git a/doc/classes/SceneTreeTimer.xml b/doc/classes/SceneTreeTimer.xml
index 4eef754345..f97c5e42b5 100644
--- a/doc/classes/SceneTreeTimer.xml
+++ b/doc/classes/SceneTreeTimer.xml
@@ -25,8 +25,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="time_left" type="float" setter="set_time_left" getter="get_time_left">
The time remaining.
@@ -39,6 +37,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml
index 843d8ef9cb..b7a4f448b0 100644
--- a/doc/classes/Script.xml
+++ b/doc/classes/Script.xml
@@ -99,6 +99,4 @@
The script source code or an empty string if source code is not available. When set, does not reload the class implementation automatically.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ScriptCreateDialog.xml b/doc/classes/ScriptCreateDialog.xml
index 189bfdc3b8..349adb9111 100644
--- a/doc/classes/ScriptCreateDialog.xml
+++ b/doc/classes/ScriptCreateDialog.xml
@@ -50,6 +50,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ScriptEditor.xml b/doc/classes/ScriptEditor.xml
index 628be54e1d..faad8f8cae 100644
--- a/doc/classes/ScriptEditor.xml
+++ b/doc/classes/ScriptEditor.xml
@@ -79,6 +79,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ScriptEditorBase.xml b/doc/classes/ScriptEditorBase.xml
index 08baa705e8..1e72fe9090 100644
--- a/doc/classes/ScriptEditorBase.xml
+++ b/doc/classes/ScriptEditorBase.xml
@@ -64,6 +64,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ScrollBar.xml b/doc/classes/ScrollBar.xml
index b1eb9c012b..1f1415bebe 100644
--- a/doc/classes/ScrollBar.xml
+++ b/doc/classes/ScrollBar.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="custom_step" type="float" setter="set_custom_step" getter="get_custom_step" default="-1.0">
Overrides the step used when clicking increment and decrement buttons or when using arrow keys when the [ScrollBar] is focused.
@@ -24,6 +22,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ScrollContainer.xml b/doc/classes/ScrollContainer.xml
index 953ab24748..1cf8c6cb54 100644
--- a/doc/classes/ScrollContainer.xml
+++ b/doc/classes/ScrollContainer.xml
@@ -69,8 +69,6 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
<theme_items>
<theme_item name="bg" data_type="style" type="StyleBox">
The background [StyleBox] of the [ScrollContainer].
diff --git a/doc/classes/SegmentShape2D.xml b/doc/classes/SegmentShape2D.xml
index 341c5e9d20..799884257f 100644
--- a/doc/classes/SegmentShape2D.xml
+++ b/doc/classes/SegmentShape2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="a" type="Vector2" setter="set_a" getter="get_a" default="Vector2(0, 0)">
The segment's first point position.
@@ -18,6 +16,4 @@
The segment's second point position.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml
index 7794161ac4..2f3fa021d4 100644
--- a/doc/classes/Semaphore.xml
+++ b/doc/classes/Semaphore.xml
@@ -29,6 +29,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SeparationRayShape2D.xml b/doc/classes/SeparationRayShape2D.xml
index fb90606577..ccb7a12882 100644
--- a/doc/classes/SeparationRayShape2D.xml
+++ b/doc/classes/SeparationRayShape2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="length" type="float" setter="set_length" getter="get_length" default="20.0">
The ray's length.
@@ -19,6 +17,4 @@
If [code]true[/code], the shape can return the correct normal and separate in any direction, allowing sliding motion on slopes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SeparationRayShape3D.xml b/doc/classes/SeparationRayShape3D.xml
index ea57e4eb59..877e8545eb 100644
--- a/doc/classes/SeparationRayShape3D.xml
+++ b/doc/classes/SeparationRayShape3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="length" type="float" setter="set_length" getter="get_length" default="1.0">
The ray's length.
@@ -19,6 +17,4 @@
If [code]true[/code], the shape can return the correct normal and separate in any direction, allowing sliding motion on slopes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Separator.xml b/doc/classes/Separator.xml
index ef79851aab..80310e912f 100644
--- a/doc/classes/Separator.xml
+++ b/doc/classes/Separator.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ShaderGlobalsOverride.xml b/doc/classes/ShaderGlobalsOverride.xml
index 2aa00aa5a9..babda1707e 100644
--- a/doc/classes/ShaderGlobalsOverride.xml
+++ b/doc/classes/ShaderGlobalsOverride.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml
index fe3ddc1b60..13f2e2fe5f 100644
--- a/doc/classes/ShaderMaterial.xml
+++ b/doc/classes/ShaderMaterial.xml
@@ -45,6 +45,4 @@
The [Shader] program used to render this material.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml
index c1191aa9de..04f91d19da 100644
--- a/doc/classes/Shape2D.xml
+++ b/doc/classes/Shape2D.xml
@@ -68,6 +68,4 @@
The shape's custom solver bias.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Shape3D.xml b/doc/classes/Shape3D.xml
index 5fd16d8d36..96f8833486 100644
--- a/doc/classes/Shape3D.xml
+++ b/doc/classes/Shape3D.xml
@@ -23,6 +23,4 @@
Collision margins allow collision detection to be more efficient by adding an extra shell around shapes. Collision algorithms are more expensive when objects overlap by more than their margin, so a higher value for margins is better for performance, at the cost of accuracy around edges as it makes them less sharp.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Shortcut.xml b/doc/classes/Shortcut.xml
index d9f7f98888..9fbe91f38b 100644
--- a/doc/classes/Shortcut.xml
+++ b/doc/classes/Shortcut.xml
@@ -36,6 +36,4 @@
Generally the [InputEvent] is a keyboard key, though it can be any [InputEvent], including an [InputEventAction].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Signal.xml b/doc/classes/Signal.xml
index 11107c093d..b70725123b 100644
--- a/doc/classes/Signal.xml
+++ b/doc/classes/Signal.xml
@@ -110,6 +110,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml
index 839193fb61..7aa06985bf 100644
--- a/doc/classes/Skeleton2D.xml
+++ b/doc/classes/Skeleton2D.xml
@@ -78,6 +78,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonIK3D.xml b/doc/classes/SkeletonIK3D.xml
index 93cdd770cc..6673e0657c 100644
--- a/doc/classes/SkeletonIK3D.xml
+++ b/doc/classes/SkeletonIK3D.xml
@@ -52,6 +52,4 @@
<member name="use_magnet" type="bool" setter="set_use_magnet" getter="is_using_magnet" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2D.xml b/doc/classes/SkeletonModification2D.xml
index cff55b6a17..815b97a271 100644
--- a/doc/classes/SkeletonModification2D.xml
+++ b/doc/classes/SkeletonModification2D.xml
@@ -82,6 +82,4 @@
The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only available in certain execution modes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DCCDIK.xml b/doc/classes/SkeletonModification2DCCDIK.xml
index f876615de7..ab9a482609 100644
--- a/doc/classes/SkeletonModification2DCCDIK.xml
+++ b/doc/classes/SkeletonModification2DCCDIK.xml
@@ -130,6 +130,4 @@
The end position of the CCDIK chain. Typically, this should be a child of a [Bone2D] node attached to the final [Bone2D] in the CCDIK chain.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DFABRIK.xml b/doc/classes/SkeletonModification2DFABRIK.xml
index 314405498a..16c22a45d3 100644
--- a/doc/classes/SkeletonModification2DFABRIK.xml
+++ b/doc/classes/SkeletonModification2DFABRIK.xml
@@ -83,6 +83,4 @@
The NodePath to the node that is the target for the FABRIK modification. This node is what the FABRIK chain will attempt to rotate the bone chain to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DJiggle.xml b/doc/classes/SkeletonModification2DJiggle.xml
index 8d3732e225..13dfbc0633 100644
--- a/doc/classes/SkeletonModification2DJiggle.xml
+++ b/doc/classes/SkeletonModification2DJiggle.xml
@@ -181,6 +181,4 @@
Whether the gravity vector, [member gravity], should be applied to the Jiggle joints, assuming they are not overriding the default settings.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DLookAt.xml b/doc/classes/SkeletonModification2DLookAt.xml
index 998a897d20..90b727e194 100644
--- a/doc/classes/SkeletonModification2DLookAt.xml
+++ b/doc/classes/SkeletonModification2DLookAt.xml
@@ -87,6 +87,4 @@
The NodePath to the node that is the target for the LookAt modification. This node is what the modification will rotate the [Bone2D] to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DPhysicalBones.xml b/doc/classes/SkeletonModification2DPhysicalBones.xml
index e6bcb3c9d7..44572f2c67 100644
--- a/doc/classes/SkeletonModification2DPhysicalBones.xml
+++ b/doc/classes/SkeletonModification2DPhysicalBones.xml
@@ -53,6 +53,4 @@
The amount of [PhysicalBone2D] nodes linked in this modification.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DStackHolder.xml b/doc/classes/SkeletonModification2DStackHolder.xml
index e5d9f2194a..35ab52ea99 100644
--- a/doc/classes/SkeletonModification2DStackHolder.xml
+++ b/doc/classes/SkeletonModification2DStackHolder.xml
@@ -24,6 +24,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification2DTwoBoneIK.xml b/doc/classes/SkeletonModification2DTwoBoneIK.xml
index 25ee981d5d..b7a2faedbb 100644
--- a/doc/classes/SkeletonModification2DTwoBoneIK.xml
+++ b/doc/classes/SkeletonModification2DTwoBoneIK.xml
@@ -77,6 +77,4 @@
The NodePath to the node that is the target for the TwoBoneIK modification. This node is what the modification will use when bending the [Bone2D] nodes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3D.xml b/doc/classes/SkeletonModification3D.xml
index 48b8a905b9..c544473163 100644
--- a/doc/classes/SkeletonModification3D.xml
+++ b/doc/classes/SkeletonModification3D.xml
@@ -63,6 +63,4 @@
The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only availible in certain execution modes.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DCCDIK.xml b/doc/classes/SkeletonModification3DCCDIK.xml
index aa7ddad56e..ef3200a07a 100644
--- a/doc/classes/SkeletonModification3DCCDIK.xml
+++ b/doc/classes/SkeletonModification3DCCDIK.xml
@@ -133,6 +133,4 @@
The end position of the CCDIK chain. Typically, this should be a child of a [BoneAttachment3D] node attached to the final bone in the CCDIK chain, where the child node is offset so it is at the end of the final bone.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DFABRIK.xml b/doc/classes/SkeletonModification3DFABRIK.xml
index 7058e37e94..4c4e01e9d1 100644
--- a/doc/classes/SkeletonModification3DFABRIK.xml
+++ b/doc/classes/SkeletonModification3DFABRIK.xml
@@ -158,6 +158,4 @@
The NodePath to the node that is the target for the FABRIK modification. This node is what the FABRIK chain will attempt to rotate the bone chain to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DJiggle.xml b/doc/classes/SkeletonModification3DJiggle.xml
index 6cc1c0b266..3c724229bd 100644
--- a/doc/classes/SkeletonModification3DJiggle.xml
+++ b/doc/classes/SkeletonModification3DJiggle.xml
@@ -196,6 +196,4 @@
Whether the gravity vector, [member gravity], should be applied to the Jiggle joints, assuming they are not overriding the default settings.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DLookAt.xml b/doc/classes/SkeletonModification3DLookAt.xml
index c01d764cff..9b34644757 100644
--- a/doc/classes/SkeletonModification3DLookAt.xml
+++ b/doc/classes/SkeletonModification3DLookAt.xml
@@ -61,6 +61,4 @@
The NodePath to the node that is the target for the modification.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DStackHolder.xml b/doc/classes/SkeletonModification3DStackHolder.xml
index bb923b680d..138f9818ab 100644
--- a/doc/classes/SkeletonModification3DStackHolder.xml
+++ b/doc/classes/SkeletonModification3DStackHolder.xml
@@ -24,6 +24,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModification3DTwoBoneIK.xml b/doc/classes/SkeletonModification3DTwoBoneIK.xml
index 5c863367df..80f8ba4e5b 100644
--- a/doc/classes/SkeletonModification3DTwoBoneIK.xml
+++ b/doc/classes/SkeletonModification3DTwoBoneIK.xml
@@ -188,6 +188,4 @@
The NodePath to the node that is the target for the TwoBoneIK modification. This node is what the modification will attempt to rotate the bones to reach.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModificationStack2D.xml b/doc/classes/SkeletonModificationStack2D.xml
index 97b8e3b945..9b96c9e6d5 100644
--- a/doc/classes/SkeletonModificationStack2D.xml
+++ b/doc/classes/SkeletonModificationStack2D.xml
@@ -86,6 +86,4 @@
The interpolation strength of the modifications in stack. A value of [code]0[/code] will make it where the modifications are not applied, a strength of [code]0.5[/code] will be half applied, and a strength of [code]1[/code] will allow the modifications to be fully applied and override the [Skeleton2D] [Bone2D] poses.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkeletonModificationStack3D.xml b/doc/classes/SkeletonModificationStack3D.xml
index 4e5e9d72d8..4035e39410 100644
--- a/doc/classes/SkeletonModificationStack3D.xml
+++ b/doc/classes/SkeletonModificationStack3D.xml
@@ -85,6 +85,4 @@
The interpolation strength of the modifications in stack. A value of [code]0[/code] will make it where the modifications are not applied, a strength of [code]0.5[/code] will be half applied, and a strength of [code]1[/code] will allow the modifications to be fully applied and override the skeleton bone poses.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Skin.xml b/doc/classes/Skin.xml
index 67ca36f4d6..d24963a887 100644
--- a/doc/classes/Skin.xml
+++ b/doc/classes/Skin.xml
@@ -70,6 +70,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SkinReference.xml b/doc/classes/SkinReference.xml
index d0634c543c..f8bbc27363 100644
--- a/doc/classes/SkinReference.xml
+++ b/doc/classes/SkinReference.xml
@@ -18,6 +18,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Sky.xml b/doc/classes/Sky.xml
index d9553a3be3..79a9bd4b31 100644
--- a/doc/classes/Sky.xml
+++ b/doc/classes/Sky.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="Sky.ProcessMode" default="0">
Sets the method for generating the radiance map from the sky. The radiance map is a cubemap with increasingly blurry versions of the sky corresponding to different levels of roughness. Radiance maps can be expensive to calculate. See [enum ProcessMode] for options.
diff --git a/doc/classes/Slider.xml b/doc/classes/Slider.xml
index f18b2ce39f..21a45645b8 100644
--- a/doc/classes/Slider.xml
+++ b/doc/classes/Slider.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="editable" type="bool" setter="set_editable" getter="is_editable" default="true">
If [code]true[/code], the slider can be interacted with. If [code]false[/code], the value can be changed only by code.
@@ -27,6 +25,4 @@
If [code]true[/code], the slider will display ticks for minimum and maximum values.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SphereMesh.xml b/doc/classes/SphereMesh.xml
index 439fe11861..674b583e3d 100644
--- a/doc/classes/SphereMesh.xml
+++ b/doc/classes/SphereMesh.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="height" type="float" setter="set_height" getter="get_height" default="2.0">
Full height of the sphere.
@@ -28,6 +26,4 @@
Number of segments along the height of the sphere.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SphereShape3D.xml b/doc/classes/SphereShape3D.xml
index e90493fca2..5f0f5c1052 100644
--- a/doc/classes/SphereShape3D.xml
+++ b/doc/classes/SphereShape3D.xml
@@ -9,13 +9,9 @@
<tutorials>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
The sphere's radius. The shape's diameter is double the radius.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SpinBox.xml b/doc/classes/SpinBox.xml
index 4303fa52f1..33d2b472b5 100644
--- a/doc/classes/SpinBox.xml
+++ b/doc/classes/SpinBox.xml
@@ -55,9 +55,10 @@
<member name="suffix" type="String" setter="set_suffix" getter="get_suffix" default="&quot;&quot;">
Adds the specified [code]suffix[/code] string after the numerical value of the [SpinBox].
</member>
+ <member name="update_on_text_changed" type="bool" setter="set_update_on_text_changed" getter="get_update_on_text_changed" default="false">
+ Sets the value of the [Range] for this [SpinBox] when the [LineEdit] text is [i]changed[/i] instead of [i]submitted[/i]. See [signal LineEdit.text_changed] and [signal LineEdit.text_submitted].
+ </member>
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="updown" data_type="icon" type="Texture2D">
Sets a custom [Texture2D] for up and down arrows of the [SpinBox].
diff --git a/doc/classes/SpotLight3D.xml b/doc/classes/SpotLight3D.xml
index fde40ba6de..8c10ec36a8 100644
--- a/doc/classes/SpotLight3D.xml
+++ b/doc/classes/SpotLight3D.xml
@@ -10,8 +10,6 @@
<link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="shadow_bias" type="float" setter="set_param" getter="get_param" override="true" default="0.03" />
<member name="spot_angle" type="float" setter="set_param" getter="get_param" default="45.0">
@@ -27,6 +25,4 @@
The maximal range that can be reached by the spotlight. Note that the effectively lit area may appear to be smaller depending on the [member spot_attenuation] in use. No matter the [member spot_attenuation] in use, the light will never reach anything outside this range.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SpringArm3D.xml b/doc/classes/SpringArm3D.xml
index 50aa3d39b8..2cd8fa71cf 100644
--- a/doc/classes/SpringArm3D.xml
+++ b/doc/classes/SpringArm3D.xml
@@ -57,6 +57,4 @@
To know more about how to perform a shape cast or a ray cast, please consult the [PhysicsDirectSpaceState3D] documentation.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Sprite2D.xml b/doc/classes/Sprite2D.xml
index 0b26fdc055..b9d13a1287 100644
--- a/doc/classes/Sprite2D.xml
+++ b/doc/classes/Sprite2D.xml
@@ -98,6 +98,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Sprite3D.xml b/doc/classes/Sprite3D.xml
index ddb9d543e8..5a7fd537e0 100644
--- a/doc/classes/Sprite3D.xml
+++ b/doc/classes/Sprite3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="frame" type="int" setter="set_frame" getter="get_frame" default="0">
Current frame to display from sprite sheet. [member hframes] or [member vframes] must be greater than 1.
@@ -39,6 +37,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SpriteFrames.xml b/doc/classes/SpriteFrames.xml
index 3bd40ff6f4..660afb5a89 100644
--- a/doc/classes/SpriteFrames.xml
+++ b/doc/classes/SpriteFrames.xml
@@ -135,6 +135,4 @@
Compatibility property, always equals to an empty array.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml
index 4ed9146e0f..8a36a734f1 100644
--- a/doc/classes/StandardMaterial3D.xml
+++ b/doc/classes/StandardMaterial3D.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StaticBody2D.xml b/doc/classes/StaticBody2D.xml
index 9cbe0bdb40..0a90f430e6 100644
--- a/doc/classes/StaticBody2D.xml
+++ b/doc/classes/StaticBody2D.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant_angular_velocity" type="float" setter="set_constant_angular_velocity" getter="get_constant_angular_velocity" default="0.0">
The body's constant angular velocity. This does not rotate the body, but affects touching bodies, as if it were rotating.
@@ -26,6 +24,4 @@
If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StaticBody3D.xml b/doc/classes/StaticBody3D.xml
index 6e2377def0..d1ef8cd321 100644
--- a/doc/classes/StaticBody3D.xml
+++ b/doc/classes/StaticBody3D.xml
@@ -15,8 +15,6 @@
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant_angular_velocity" type="Vector3" setter="set_constant_angular_velocity" getter="get_constant_angular_velocity" default="Vector3(0, 0, 0)">
The body's constant angular velocity. This does not rotate the body, but affects touching bodies, as if it were rotating.
@@ -29,6 +27,4 @@
If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamCubemap.xml b/doc/classes/StreamCubemap.xml
index 16648266eb..2e7ee8e6db 100644
--- a/doc/classes/StreamCubemap.xml
+++ b/doc/classes/StreamCubemap.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamCubemapArray.xml b/doc/classes/StreamCubemapArray.xml
index b84973fd14..326226b5ab 100644
--- a/doc/classes/StreamCubemapArray.xml
+++ b/doc/classes/StreamCubemapArray.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamPeer.xml b/doc/classes/StreamPeer.xml
index e3d77d22c5..316bd77a16 100644
--- a/doc/classes/StreamPeer.xml
+++ b/doc/classes/StreamPeer.xml
@@ -241,6 +241,4 @@
If [code]true[/code], this [StreamPeer] will using big-endian format for encoding and decoding.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamPeerBuffer.xml b/doc/classes/StreamPeerBuffer.xml
index 62476ca166..989864760f 100644
--- a/doc/classes/StreamPeerBuffer.xml
+++ b/doc/classes/StreamPeerBuffer.xml
@@ -44,6 +44,4 @@
<member name="data_array" type="PackedByteArray" setter="set_data_array" getter="get_data_array" default="PackedByteArray()">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamTexture2D.xml b/doc/classes/StreamTexture2D.xml
index 7b6c594786..fb32f1e5d9 100644
--- a/doc/classes/StreamTexture2D.xml
+++ b/doc/classes/StreamTexture2D.xml
@@ -22,6 +22,4 @@
The StreamTexture's file path to a [code].stex[/code] file.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamTexture2DArray.xml b/doc/classes/StreamTexture2DArray.xml
index ec545b24d0..7ecd3734f7 100644
--- a/doc/classes/StreamTexture2DArray.xml
+++ b/doc/classes/StreamTexture2DArray.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamTexture3D.xml b/doc/classes/StreamTexture3D.xml
index 4b2eb16ba3..1892676935 100644
--- a/doc/classes/StreamTexture3D.xml
+++ b/doc/classes/StreamTexture3D.xml
@@ -18,6 +18,4 @@
<member name="load_path" type="String" setter="load" getter="get_load_path" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StreamTextureLayered.xml b/doc/classes/StreamTextureLayered.xml
index 888fb339db..7793bf8420 100644
--- a/doc/classes/StreamTextureLayered.xml
+++ b/doc/classes/StreamTextureLayered.xml
@@ -18,6 +18,4 @@
<member name="load_path" type="String" setter="load" getter="get_load_path" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/String.xml b/doc/classes/String.xml
index dceaf87afa..0991788483 100644
--- a/doc/classes/String.xml
+++ b/doc/classes/String.xml
@@ -843,6 +843,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StringName.xml b/doc/classes/StringName.xml
index b4289b5564..113195d91c 100644
--- a/doc/classes/StringName.xml
+++ b/doc/classes/StringName.xml
@@ -64,6 +64,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StyleBox.xml b/doc/classes/StyleBox.xml
index 024524251d..6bcd485656 100644
--- a/doc/classes/StyleBox.xml
+++ b/doc/classes/StyleBox.xml
@@ -95,6 +95,4 @@
Refer to [member content_margin_bottom] for extra considerations.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StyleBoxEmpty.xml b/doc/classes/StyleBoxEmpty.xml
index 8781cdcde3..91a9f37f53 100644
--- a/doc/classes/StyleBoxEmpty.xml
+++ b/doc/classes/StyleBoxEmpty.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StyleBoxFlat.xml b/doc/classes/StyleBoxFlat.xml
index 40f6075528..7bd68aa583 100644
--- a/doc/classes/StyleBoxFlat.xml
+++ b/doc/classes/StyleBoxFlat.xml
@@ -188,6 +188,4 @@
The shadow size in pixels.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/StyleBoxLine.xml b/doc/classes/StyleBoxLine.xml
index 850c656720..f2f8679b3e 100644
--- a/doc/classes/StyleBoxLine.xml
+++ b/doc/classes/StyleBoxLine.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)">
The line's color.
@@ -27,6 +25,4 @@
If [code]true[/code], the line will be vertical. If [code]false[/code], the line will be horizontal.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SubViewport.xml b/doc/classes/SubViewport.xml
index 9c5610e2c7..28866699f6 100644
--- a/doc/classes/SubViewport.xml
+++ b/doc/classes/SubViewport.xml
@@ -15,8 +15,6 @@
<link title="Dynamic Split Screen Demo">https://godotengine.org/asset-library/asset/541</link>
<link title="3D Viewport Scaling Demo">https://godotengine.org/asset-library/asset/586</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="render_target_clear_mode" type="int" setter="set_clear_mode" getter="get_clear_mode" enum="SubViewport.ClearMode" default="0">
The clear mode when the sub-viewport is used as a render target.
diff --git a/doc/classes/SubViewportContainer.xml b/doc/classes/SubViewportContainer.xml
index 16d483e7f8..9a4985c98c 100644
--- a/doc/classes/SubViewportContainer.xml
+++ b/doc/classes/SubViewportContainer.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="stretch" type="bool" setter="set_stretch" getter="is_stretch_enabled" default="false">
If [code]true[/code], the sub-viewport will be scaled to the control's size.
@@ -21,6 +19,4 @@
[b]Note:[/b] [member stretch] must be [code]true[/code] for this property to work.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/SyntaxHighlighter.xml b/doc/classes/SyntaxHighlighter.xml
index c478cb0eb6..9bb8aabb1f 100644
--- a/doc/classes/SyntaxHighlighter.xml
+++ b/doc/classes/SyntaxHighlighter.xml
@@ -72,6 +72,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TCPServer.xml b/doc/classes/TCPServer.xml
index 9692693eff..8676e33bb4 100644
--- a/doc/classes/TCPServer.xml
+++ b/doc/classes/TCPServer.xml
@@ -51,6 +51,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml
index 661c4f05ef..7fe9278f2c 100644
--- a/doc/classes/TextServer.xml
+++ b/doc/classes/TextServer.xml
@@ -1247,6 +1247,12 @@
<constant name="GRAPHEME_IS_PUNCTUATION" value="256" enum="GraphemeFlag">
Grapheme is punctuation character.
</constant>
+ <constant name="GRAPHEME_IS_UNDERSCORE" value="512" enum="GraphemeFlag">
+ Grapheme is underscore character.
+ </constant>
+ <constant name="GRAPHEME_IS_CONNECTED" value="1024" enum="GraphemeFlag">
+ Grapheme is connected to the previous grapheme. Breaking line before this grapheme is not safe.
+ </constant>
<constant name="HINTING_NONE" value="0" enum="Hinting">
Disables font hinting (smoother but less crisp).
</constant>
diff --git a/doc/classes/TextServerManager.xml b/doc/classes/TextServerManager.xml
index b1dd314544..0e7b6d15d3 100644
--- a/doc/classes/TextServerManager.xml
+++ b/doc/classes/TextServerManager.xml
@@ -64,6 +64,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Texture.xml b/doc/classes/Texture.xml
index e19d611ea9..3387de30b7 100644
--- a/doc/classes/Texture.xml
+++ b/doc/classes/Texture.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Texture2D.xml b/doc/classes/Texture2D.xml
index bf5ddeb4ab..b77365e2df 100644
--- a/doc/classes/Texture2D.xml
+++ b/doc/classes/Texture2D.xml
@@ -76,6 +76,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Texture2DArray.xml b/doc/classes/Texture2DArray.xml
index bb9283803d..bbadbc29a1 100644
--- a/doc/classes/Texture2DArray.xml
+++ b/doc/classes/Texture2DArray.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Texture3D.xml b/doc/classes/Texture3D.xml
index 8ba0d7d4b9..51cd377648 100644
--- a/doc/classes/Texture3D.xml
+++ b/doc/classes/Texture3D.xml
@@ -38,6 +38,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TextureButton.xml b/doc/classes/TextureButton.xml
index 70bf138f27..2be27617ab 100644
--- a/doc/classes/TextureButton.xml
+++ b/doc/classes/TextureButton.xml
@@ -11,8 +11,6 @@
<tutorials>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="expand" type="bool" setter="set_expand" getter="get_expand" default="false">
If [code]true[/code], the texture stretches to the edges of the node's bounding rectangle using the [member stretch_mode]. If [code]false[/code], the texture will not scale with the node.
diff --git a/doc/classes/TextureRect.xml b/doc/classes/TextureRect.xml
index 743e7f6d1e..4f18f43ddf 100644
--- a/doc/classes/TextureRect.xml
+++ b/doc/classes/TextureRect.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="expand" type="bool" setter="set_expand" getter="has_expand" default="false">
If [code]true[/code], the texture scales to fit its bounding rectangle.
diff --git a/doc/classes/TileData.xml b/doc/classes/TileData.xml
index b18ca29a8c..0d3282c6d3 100644
--- a/doc/classes/TileData.xml
+++ b/doc/classes/TileData.xml
@@ -192,6 +192,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TileSetAtlasSource.xml b/doc/classes/TileSetAtlasSource.xml
index fd3dbd1e4d..75f7d19b31 100644
--- a/doc/classes/TileSetAtlasSource.xml
+++ b/doc/classes/TileSetAtlasSource.xml
@@ -148,6 +148,4 @@
The base tile size in the texture (in pixel). This size must be bigger than the TileSet's [code]tile_size[/code] value.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TileSetScenesCollectionSource.xml b/doc/classes/TileSetScenesCollectionSource.xml
index 119a04c25f..3451519ff6 100644
--- a/doc/classes/TileSetScenesCollectionSource.xml
+++ b/doc/classes/TileSetScenesCollectionSource.xml
@@ -91,6 +91,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TileSetSource.xml b/doc/classes/TileSetSource.xml
index 442d845f6c..ed47684f14 100644
--- a/doc/classes/TileSetSource.xml
+++ b/doc/classes/TileSetSource.xml
@@ -59,6 +59,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml
index 16af2a4075..4fd788467d 100644
--- a/doc/classes/Transform2D.xml
+++ b/doc/classes/Transform2D.xml
@@ -37,6 +37,16 @@
</method>
<method name="Transform2D" qualifiers="constructor">
<return type="Transform2D" />
+ <argument index="0" name="rotation" type="float" />
+ <argument index="1" name="scale" type="Vector2" />
+ <argument index="2" name="skew" type="float" />
+ <argument index="3" name="position" type="Vector2" />
+ <description>
+ Constructs the transform from a given angle (in radians), scale, skew (in radians) and position.
+ </description>
+ </method>
+ <method name="Transform2D" qualifiers="constructor">
+ <return type="Transform2D" />
<argument index="0" name="x_axis" type="Vector2" />
<argument index="1" name="y_axis" type="Vector2" />
<argument index="2" name="origin" type="Vector2" />
@@ -84,6 +94,12 @@
Returns the scale.
</description>
</method>
+ <method name="get_skew" qualifiers="const">
+ <return type="float" />
+ <description>
+ Returns the transform's skew (in radians).
+ </description>
+ </method>
<method name="interpolate_with" qualifiers="const">
<return type="Transform2D" />
<argument index="0" name="xform" type="Transform2D" />
@@ -125,26 +141,26 @@
</description>
</method>
<method name="operator *" qualifiers="operator">
- <return type="Vector2" />
- <argument index="0" name="right" type="Vector2" />
+ <return type="PackedVector2Array" />
+ <argument index="0" name="right" type="PackedVector2Array" />
<description>
</description>
</method>
<method name="operator *" qualifiers="operator">
- <return type="Rect2" />
- <argument index="0" name="right" type="Rect2" />
+ <return type="Transform2D" />
+ <argument index="0" name="right" type="Transform2D" />
<description>
</description>
</method>
<method name="operator *" qualifiers="operator">
- <return type="Transform2D" />
- <argument index="0" name="right" type="Transform2D" />
+ <return type="Rect2" />
+ <argument index="0" name="right" type="Rect2" />
<description>
</description>
</method>
<method name="operator *" qualifiers="operator">
- <return type="PackedVector2Array" />
- <argument index="0" name="right" type="PackedVector2Array" />
+ <return type="Vector2" />
+ <argument index="0" name="right" type="Vector2" />
<description>
</description>
</method>
@@ -206,6 +222,20 @@
Sets the transform's rotation (in radians).
</description>
</method>
+ <method name="set_scale">
+ <return type="void" />
+ <argument index="0" name="scale" type="Vector2" />
+ <description>
+ Sets the transform's scale.
+ </description>
+ </method>
+ <method name="set_skew">
+ <return type="void" />
+ <argument index="0" name="skew" type="float" />
+ <description>
+ Sets the transform's skew (in radians).
+ </description>
+ </method>
<method name="translated" qualifiers="const">
<return type="Transform2D" />
<argument index="0" name="offset" type="Vector2" />
diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml
index 4b83a2abf5..c27d6f5667 100644
--- a/doc/classes/Translation.xml
+++ b/doc/classes/Translation.xml
@@ -76,6 +76,4 @@
The locale of the translation.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml
index a002166664..8a6fa3571a 100644
--- a/doc/classes/TranslationServer.xml
+++ b/doc/classes/TranslationServer.xml
@@ -105,6 +105,4 @@
If [code]true[/code], enables the use of pseudolocalization. See [member ProjectSettings.internationalization/pseudolocalization/use_pseudolocalization] for details.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TriangleMesh.xml b/doc/classes/TriangleMesh.xml
index cfdb6fe33e..f615f7965f 100644
--- a/doc/classes/TriangleMesh.xml
+++ b/doc/classes/TriangleMesh.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/TubeTrailMesh.xml b/doc/classes/TubeTrailMesh.xml
index 2782791a62..2c84a79557 100644
--- a/doc/classes/TubeTrailMesh.xml
+++ b/doc/classes/TubeTrailMesh.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="curve" type="Curve" setter="set_curve" getter="get_curve">
</member>
@@ -22,6 +20,4 @@
<member name="sections" type="int" setter="set_sections" getter="get_sections" default="5">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/Tweener.xml b/doc/classes/Tweener.xml
index a3279502e0..ad599c4d02 100644
--- a/doc/classes/Tweener.xml
+++ b/doc/classes/Tweener.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<signals>
<signal name="finished">
<description>
@@ -17,6 +15,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/UDPServer.xml b/doc/classes/UDPServer.xml
index eb6d42fb0f..66f752b97a 100644
--- a/doc/classes/UDPServer.xml
+++ b/doc/classes/UDPServer.xml
@@ -173,6 +173,4 @@
Define the maximum number of pending connections, during [method poll], any new pending connection exceeding that value will be automatically dropped. Setting this value to [code]0[/code] effectively prevents any new pending connection to be accepted (e.g. when all your players have connected).
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VBoxContainer.xml b/doc/classes/VBoxContainer.xml
index aa6c5fc8a4..b62fb4707e 100644
--- a/doc/classes/VBoxContainer.xml
+++ b/doc/classes/VBoxContainer.xml
@@ -9,10 +9,6 @@
<tutorials>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="separation" data_type="constant" type="int" default="4">
The vertical space between the [VBoxContainer]'s elements.
diff --git a/doc/classes/VScrollBar.xml b/doc/classes/VScrollBar.xml
index 519cc9c137..0cf06576f6 100644
--- a/doc/classes/VScrollBar.xml
+++ b/doc/classes/VScrollBar.xml
@@ -8,14 +8,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" />
<member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="decrement" data_type="icon" type="Texture2D">
Icon used as a button to scroll the [ScrollBar] up. Supports custom step using the [member ScrollBar.custom_step] property.
diff --git a/doc/classes/VSeparator.xml b/doc/classes/VSeparator.xml
index d59c7229ac..d9299bfe92 100644
--- a/doc/classes/VSeparator.xml
+++ b/doc/classes/VSeparator.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="separation" data_type="constant" type="int" default="4">
The width of the area covered by the separator. Effectively works like a minimum width.
diff --git a/doc/classes/VSlider.xml b/doc/classes/VSlider.xml
index becf3d1052..286674a9b4 100644
--- a/doc/classes/VSlider.xml
+++ b/doc/classes/VSlider.xml
@@ -9,14 +9,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" />
<member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" />
</members>
- <constants>
- </constants>
<theme_items>
<theme_item name="grabber" data_type="icon" type="Texture2D">
The texture for the grabber (the draggable element).
diff --git a/doc/classes/VSplitContainer.xml b/doc/classes/VSplitContainer.xml
index 143f5b6b0a..323ce1fe80 100644
--- a/doc/classes/VSplitContainer.xml
+++ b/doc/classes/VSplitContainer.xml
@@ -8,10 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
<theme_items>
<theme_item name="autohide" data_type="constant" type="int" default="1">
Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If 0 ([code]false[/code]), it's always visible.
diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml
index 240c1c909f..88644e2f8a 100644
--- a/doc/classes/Variant.xml
+++ b/doc/classes/Variant.xml
@@ -74,8 +74,4 @@
<tutorials>
<link title="Variant class">https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VehicleBody3D.xml b/doc/classes/VehicleBody3D.xml
index 21a37f7b53..9315f6e6ad 100644
--- a/doc/classes/VehicleBody3D.xml
+++ b/doc/classes/VehicleBody3D.xml
@@ -11,8 +11,6 @@
<tutorials>
<link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="brake" type="float" setter="set_brake" getter="get_brake" default="0.0">
Slows down the vehicle by applying a braking force. The vehicle is only slowed down if the wheels are in contact with a surface. The force you need to apply to adequately slow down your vehicle depends on the [member RigidDynamicBody3D.mass] of the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 30 range for hard braking.
@@ -27,6 +25,4 @@
The steering angle for the vehicle. Setting this to a non-zero value will result in the vehicle turning when it's moving. Wheels that have [member VehicleWheel3D.use_as_steering] set to [code]true[/code] will automatically be rotated.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VehicleWheel3D.xml b/doc/classes/VehicleWheel3D.xml
index 5b4511beab..951f4f8275 100644
--- a/doc/classes/VehicleWheel3D.xml
+++ b/doc/classes/VehicleWheel3D.xml
@@ -77,6 +77,4 @@
This value affects the roll of your vehicle. If set to 1.0 for all wheels, your vehicle will be prone to rolling over, while a value of 0.0 will resist body roll.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VelocityTracker3D.xml b/doc/classes/VelocityTracker3D.xml
index 7e97cad5bf..5d8dcc6742 100644
--- a/doc/classes/VelocityTracker3D.xml
+++ b/doc/classes/VelocityTracker3D.xml
@@ -29,6 +29,4 @@
<member name="track_physics_step" type="bool" setter="set_track_physics_step" getter="is_tracking_physics_step" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml
index 86b2dd102b..4f60b9d567 100644
--- a/doc/classes/VideoPlayer.xml
+++ b/doc/classes/VideoPlayer.xml
@@ -85,6 +85,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VideoStream.xml b/doc/classes/VideoStream.xml
index 7f522bfdf0..39fefa8d95 100644
--- a/doc/classes/VideoStream.xml
+++ b/doc/classes/VideoStream.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/ViewportTexture.xml b/doc/classes/ViewportTexture.xml
index 393f1bb0b8..c0cf3b3c7b 100644
--- a/doc/classes/ViewportTexture.xml
+++ b/doc/classes/ViewportTexture.xml
@@ -13,14 +13,10 @@
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
<link title="3D Viewport Scaling Demo">https://godotengine.org/asset-library/asset/586</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" />
<member name="viewport_path" type="NodePath" setter="set_viewport_path_in_scene" getter="get_viewport_path_in_scene" default="NodePath(&quot;&quot;)">
The path to the [Viewport] node to display. This is relative to the scene root, not to the node which uses the texture.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisibleOnScreenEnabler2D.xml b/doc/classes/VisibleOnScreenEnabler2D.xml
index c6ae8227d2..523a3a2578 100644
--- a/doc/classes/VisibleOnScreenEnabler2D.xml
+++ b/doc/classes/VisibleOnScreenEnabler2D.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="enable_mode" type="int" setter="set_enable_mode" getter="get_enable_mode" enum="VisibleOnScreenEnabler2D.EnableMode" default="0">
</member>
diff --git a/doc/classes/VisibleOnScreenEnabler3D.xml b/doc/classes/VisibleOnScreenEnabler3D.xml
index f781ef9749..2000d54d74 100644
--- a/doc/classes/VisibleOnScreenEnabler3D.xml
+++ b/doc/classes/VisibleOnScreenEnabler3D.xml
@@ -11,8 +11,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="enable_mode" type="int" setter="set_enable_mode" getter="get_enable_mode" enum="VisibleOnScreenEnabler3D.EnableMode" default="0">
</member>
diff --git a/doc/classes/VisibleOnScreenNotifier2D.xml b/doc/classes/VisibleOnScreenNotifier2D.xml
index 995bd9e9d7..d82e64fa91 100644
--- a/doc/classes/VisibleOnScreenNotifier2D.xml
+++ b/doc/classes/VisibleOnScreenNotifier2D.xml
@@ -36,6 +36,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisibleOnScreenNotifier3D.xml b/doc/classes/VisibleOnScreenNotifier3D.xml
index 03db449c80..328db15231 100644
--- a/doc/classes/VisibleOnScreenNotifier3D.xml
+++ b/doc/classes/VisibleOnScreenNotifier3D.xml
@@ -36,6 +36,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualInstance3D.xml b/doc/classes/VisualInstance3D.xml
index f949fbe7c0..bbcf2f4730 100644
--- a/doc/classes/VisualInstance3D.xml
+++ b/doc/classes/VisualInstance3D.xml
@@ -63,6 +63,4 @@
This object will only be visible for [Camera3D]s whose cull mask includes the render object this [VisualInstance3D] is set to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualScriptCustomNodes.xml b/doc/classes/VisualScriptCustomNodes.xml
index 3ef8022f5e..1681da7653 100644
--- a/doc/classes/VisualScriptCustomNodes.xml
+++ b/doc/classes/VisualScriptCustomNodes.xml
@@ -34,6 +34,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeBillboard.xml b/doc/classes/VisualShaderNodeBillboard.xml
index 53bcfa7b5c..77069975ef 100644
--- a/doc/classes/VisualShaderNodeBillboard.xml
+++ b/doc/classes/VisualShaderNodeBillboard.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="billboard_type" type="int" setter="set_billboard_type" getter="get_billboard_type" enum="VisualShaderNodeBillboard.BillboardType" default="1">
Controls how the object faces the camera. See [enum BillboardType].
diff --git a/doc/classes/VisualShaderNodeBooleanConstant.xml b/doc/classes/VisualShaderNodeBooleanConstant.xml
index 688679f2a3..73a423b93a 100644
--- a/doc/classes/VisualShaderNodeBooleanConstant.xml
+++ b/doc/classes/VisualShaderNodeBooleanConstant.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="bool" setter="set_constant" getter="get_constant" default="false">
A boolean constant which represents a state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeBooleanUniform.xml b/doc/classes/VisualShaderNodeBooleanUniform.xml
index 7d72f13f9d..86f61dde83 100644
--- a/doc/classes/VisualShaderNodeBooleanUniform.xml
+++ b/doc/classes/VisualShaderNodeBooleanUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="bool" setter="set_default_value" getter="get_default_value" default="false">
A default value to be assigned within the shader.
@@ -18,6 +16,4 @@
Enables usage of the [member default_value].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeClamp.xml b/doc/classes/VisualShaderNodeClamp.xml
index 504171bb13..a68cbbec49 100644
--- a/doc/classes/VisualShaderNodeClamp.xml
+++ b/doc/classes/VisualShaderNodeClamp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeClamp.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeColorConstant.xml b/doc/classes/VisualShaderNodeColorConstant.xml
index fa1a11c488..d9f5167bd6 100644
--- a/doc/classes/VisualShaderNodeColorConstant.xml
+++ b/doc/classes/VisualShaderNodeColorConstant.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="Color" setter="set_constant" getter="get_constant" default="Color(1, 1, 1, 1)">
A [Color] constant which represents a state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeColorFunc.xml b/doc/classes/VisualShaderNodeColorFunc.xml
index 8d410104b8..0d7698f755 100644
--- a/doc/classes/VisualShaderNodeColorFunc.xml
+++ b/doc/classes/VisualShaderNodeColorFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeColorFunc.Function" default="0">
A function to be applied to the input color. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeColorOp.xml b/doc/classes/VisualShaderNodeColorOp.xml
index 55b006b098..378897d3cc 100644
--- a/doc/classes/VisualShaderNodeColorOp.xml
+++ b/doc/classes/VisualShaderNodeColorOp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeColorOp.Operator" default="0">
An operator to be applied to the inputs. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeColorUniform.xml b/doc/classes/VisualShaderNodeColorUniform.xml
index bdaf301f09..9c126fe700 100644
--- a/doc/classes/VisualShaderNodeColorUniform.xml
+++ b/doc/classes/VisualShaderNodeColorUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="Color" setter="set_default_value" getter="get_default_value" default="Color(1, 1, 1, 1)">
A default value to be assigned within the shader.
@@ -18,6 +16,4 @@
Enables usage of the [member default_value].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeComment.xml b/doc/classes/VisualShaderNodeComment.xml
index 8970e2fabb..daffd24f93 100644
--- a/doc/classes/VisualShaderNodeComment.xml
+++ b/doc/classes/VisualShaderNodeComment.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="description" type="String" setter="set_description" getter="get_description" default="&quot;&quot;">
An additional description which placed below the title.
@@ -18,6 +16,4 @@
A title of the node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeCompare.xml b/doc/classes/VisualShaderNodeCompare.xml
index 96bb3df494..49bf952b31 100644
--- a/doc/classes/VisualShaderNodeCompare.xml
+++ b/doc/classes/VisualShaderNodeCompare.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="condition" type="int" setter="set_condition" getter="get_condition" enum="VisualShaderNodeCompare.Condition" default="0">
Extra condition which is applied if [member type] is set to [constant CTYPE_VECTOR].
diff --git a/doc/classes/VisualShaderNodeConstant.xml b/doc/classes/VisualShaderNodeConstant.xml
index 8c61529dd1..d5f63be691 100644
--- a/doc/classes/VisualShaderNodeConstant.xml
+++ b/doc/classes/VisualShaderNodeConstant.xml
@@ -7,8 +7,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeCubemap.xml b/doc/classes/VisualShaderNodeCubemap.xml
index 4a5f58261d..23d98ee4be 100644
--- a/doc/classes/VisualShaderNodeCubemap.xml
+++ b/doc/classes/VisualShaderNodeCubemap.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cube_map" type="Cubemap" setter="set_cube_map" getter="get_cube_map">
The [Cubemap] texture to sample when using [constant SOURCE_TEXTURE] as [member source].
diff --git a/doc/classes/VisualShaderNodeCubemapUniform.xml b/doc/classes/VisualShaderNodeCubemapUniform.xml
index d4bcdc9006..bfc62469a8 100644
--- a/doc/classes/VisualShaderNodeCubemapUniform.xml
+++ b/doc/classes/VisualShaderNodeCubemapUniform.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeCurveTexture.xml b/doc/classes/VisualShaderNodeCurveTexture.xml
index 4839ceab92..b039da1671 100644
--- a/doc/classes/VisualShaderNodeCurveTexture.xml
+++ b/doc/classes/VisualShaderNodeCurveTexture.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="texture" type="CurveTexture" setter="set_texture" getter="get_texture">
The source texture.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeCurveXYZTexture.xml b/doc/classes/VisualShaderNodeCurveXYZTexture.xml
index 11cdc541bb..48ff6ba800 100644
--- a/doc/classes/VisualShaderNodeCurveXYZTexture.xml
+++ b/doc/classes/VisualShaderNodeCurveXYZTexture.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="texture" type="CurveXYZTexture" setter="set_texture" getter="get_texture">
The source texture.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml
index 3a489419c1..b87b59c3e4 100644
--- a/doc/classes/VisualShaderNodeCustom.xml
+++ b/doc/classes/VisualShaderNodeCustom.xml
@@ -122,6 +122,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeDeterminant.xml b/doc/classes/VisualShaderNodeDeterminant.xml
index 06b05addfa..47afbbb11c 100644
--- a/doc/classes/VisualShaderNodeDeterminant.xml
+++ b/doc/classes/VisualShaderNodeDeterminant.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeDotProduct.xml b/doc/classes/VisualShaderNodeDotProduct.xml
index 51166ab58f..49c26735c8 100644
--- a/doc/classes/VisualShaderNodeDotProduct.xml
+++ b/doc/classes/VisualShaderNodeDotProduct.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeExpression.xml b/doc/classes/VisualShaderNodeExpression.xml
index c2cbf41f45..4fde6d3aaf 100644
--- a/doc/classes/VisualShaderNodeExpression.xml
+++ b/doc/classes/VisualShaderNodeExpression.xml
@@ -9,13 +9,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="expression" type="String" setter="set_expression" getter="get_expression" default="&quot;&quot;">
An expression in Godot Shading Language, which will be injected at the start of the graph's matching shader function ([code]vertex[/code], [code]fragment[/code], or [code]light[/code]), and thus cannot be used to declare functions, varyings, uniforms, or global constants.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeFaceForward.xml b/doc/classes/VisualShaderNodeFaceForward.xml
index 48f84e5495..80cb8aea4e 100644
--- a/doc/classes/VisualShaderNodeFaceForward.xml
+++ b/doc/classes/VisualShaderNodeFaceForward.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeFloatConstant.xml b/doc/classes/VisualShaderNodeFloatConstant.xml
index a71563af54..581155b013 100644
--- a/doc/classes/VisualShaderNodeFloatConstant.xml
+++ b/doc/classes/VisualShaderNodeFloatConstant.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="float" setter="set_constant" getter="get_constant" default="0.0">
A floating-point constant which represents a state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeFloatFunc.xml b/doc/classes/VisualShaderNodeFloatFunc.xml
index ff499d25a6..884954e85e 100644
--- a/doc/classes/VisualShaderNodeFloatFunc.xml
+++ b/doc/classes/VisualShaderNodeFloatFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeFloatFunc.Function" default="13">
A function to be applied to the scalar. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeFloatOp.xml b/doc/classes/VisualShaderNodeFloatOp.xml
index ba000f258b..3b16363f70 100644
--- a/doc/classes/VisualShaderNodeFloatOp.xml
+++ b/doc/classes/VisualShaderNodeFloatOp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeFloatOp.Operator" default="0">
An operator to be applied to the inputs. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeFloatUniform.xml b/doc/classes/VisualShaderNodeFloatUniform.xml
index fcfd78dbea..244b8c9830 100644
--- a/doc/classes/VisualShaderNodeFloatUniform.xml
+++ b/doc/classes/VisualShaderNodeFloatUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="float" setter="set_default_value" getter="get_default_value" default="0.0">
A default value to be assigned within the shader.
diff --git a/doc/classes/VisualShaderNodeFresnel.xml b/doc/classes/VisualShaderNodeFresnel.xml
index c396b4574c..1e4479f841 100644
--- a/doc/classes/VisualShaderNodeFresnel.xml
+++ b/doc/classes/VisualShaderNodeFresnel.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeGlobalExpression.xml b/doc/classes/VisualShaderNodeGlobalExpression.xml
index 8023ba1890..0d95824158 100644
--- a/doc/classes/VisualShaderNodeGlobalExpression.xml
+++ b/doc/classes/VisualShaderNodeGlobalExpression.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeGroupBase.xml b/doc/classes/VisualShaderNodeGroupBase.xml
index a692d47638..cbe4dc2ae6 100644
--- a/doc/classes/VisualShaderNodeGroupBase.xml
+++ b/doc/classes/VisualShaderNodeGroupBase.xml
@@ -157,6 +157,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeIf.xml b/doc/classes/VisualShaderNodeIf.xml
index 418999863b..75fd797a06 100644
--- a/doc/classes/VisualShaderNodeIf.xml
+++ b/doc/classes/VisualShaderNodeIf.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml
index dd62d668eb..68f64ad98e 100644
--- a/doc/classes/VisualShaderNodeInput.xml
+++ b/doc/classes/VisualShaderNodeInput.xml
@@ -29,6 +29,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeIntConstant.xml b/doc/classes/VisualShaderNodeIntConstant.xml
index 18d6e96ab5..e4a8a4447f 100644
--- a/doc/classes/VisualShaderNodeIntConstant.xml
+++ b/doc/classes/VisualShaderNodeIntConstant.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="int" setter="set_constant" getter="get_constant" default="0">
An integer constant which represents a state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeIntFunc.xml b/doc/classes/VisualShaderNodeIntFunc.xml
index 358a3f3512..d2782efa96 100644
--- a/doc/classes/VisualShaderNodeIntFunc.xml
+++ b/doc/classes/VisualShaderNodeIntFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIntFunc.Function" default="2">
A function to be applied to the scalar. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeIntOp.xml b/doc/classes/VisualShaderNodeIntOp.xml
index 2d55cdaf78..e5fcafca81 100644
--- a/doc/classes/VisualShaderNodeIntOp.xml
+++ b/doc/classes/VisualShaderNodeIntOp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeIntOp.Operator" default="0">
An operator to be applied to the inputs. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeIntUniform.xml b/doc/classes/VisualShaderNodeIntUniform.xml
index 4070553884..36a3fbd4c1 100644
--- a/doc/classes/VisualShaderNodeIntUniform.xml
+++ b/doc/classes/VisualShaderNodeIntUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="int" setter="set_default_value" getter="get_default_value" default="0">
A default value to be assigned within the shader.
diff --git a/doc/classes/VisualShaderNodeIs.xml b/doc/classes/VisualShaderNodeIs.xml
index f46267677e..1f52e25d50 100644
--- a/doc/classes/VisualShaderNodeIs.xml
+++ b/doc/classes/VisualShaderNodeIs.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIs.Function" default="0">
The comparison function. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeMix.xml b/doc/classes/VisualShaderNodeMix.xml
index c70ac7e599..1ef580a983 100644
--- a/doc/classes/VisualShaderNodeMix.xml
+++ b/doc/classes/VisualShaderNodeMix.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeMix.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeMultiplyAdd.xml b/doc/classes/VisualShaderNodeMultiplyAdd.xml
index daa9e02753..a0e9aef703 100644
--- a/doc/classes/VisualShaderNodeMultiplyAdd.xml
+++ b/doc/classes/VisualShaderNodeMultiplyAdd.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeMultiplyAdd.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeOuterProduct.xml b/doc/classes/VisualShaderNodeOuterProduct.xml
index ba6822bfce..adc32aff10 100644
--- a/doc/classes/VisualShaderNodeOuterProduct.xml
+++ b/doc/classes/VisualShaderNodeOuterProduct.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeOutput.xml b/doc/classes/VisualShaderNodeOutput.xml
index 83da6f29f9..8193ed6167 100644
--- a/doc/classes/VisualShaderNodeOutput.xml
+++ b/doc/classes/VisualShaderNodeOutput.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleAccelerator.xml b/doc/classes/VisualShaderNodeParticleAccelerator.xml
index 2f3f58c0cf..da8c505719 100644
--- a/doc/classes/VisualShaderNodeParticleAccelerator.xml
+++ b/doc/classes/VisualShaderNodeParticleAccelerator.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mode" type="int" setter="set_mode" getter="get_mode" enum="VisualShaderNodeParticleAccelerator.Mode" default="0">
</member>
diff --git a/doc/classes/VisualShaderNodeParticleBoxEmitter.xml b/doc/classes/VisualShaderNodeParticleBoxEmitter.xml
index af33b285d2..acfd8e5572 100644
--- a/doc/classes/VisualShaderNodeParticleBoxEmitter.xml
+++ b/doc/classes/VisualShaderNodeParticleBoxEmitter.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleConeVelocity.xml b/doc/classes/VisualShaderNodeParticleConeVelocity.xml
index 7a40c2a7d0..4755b19046 100644
--- a/doc/classes/VisualShaderNodeParticleConeVelocity.xml
+++ b/doc/classes/VisualShaderNodeParticleConeVelocity.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleEmit.xml b/doc/classes/VisualShaderNodeParticleEmit.xml
index 120b12d643..d6e4c384aa 100644
--- a/doc/classes/VisualShaderNodeParticleEmit.xml
+++ b/doc/classes/VisualShaderNodeParticleEmit.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="flags" type="int" setter="set_flags" getter="get_flags" enum="VisualShaderNodeParticleEmit.EmitFlags" default="31">
</member>
diff --git a/doc/classes/VisualShaderNodeParticleEmitter.xml b/doc/classes/VisualShaderNodeParticleEmitter.xml
index 3a25fc1c7f..03ceb3adea 100644
--- a/doc/classes/VisualShaderNodeParticleEmitter.xml
+++ b/doc/classes/VisualShaderNodeParticleEmitter.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml b/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml
index 89a53699c9..5cd3d8f0b8 100644
--- a/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml
+++ b/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="degrees_mode" type="bool" setter="set_degrees_mode" getter="is_degrees_mode" default="true">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleOutput.xml b/doc/classes/VisualShaderNodeParticleOutput.xml
index c8fc66f2ff..24eb6bf825 100644
--- a/doc/classes/VisualShaderNodeParticleOutput.xml
+++ b/doc/classes/VisualShaderNodeParticleOutput.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleRandomness.xml b/doc/classes/VisualShaderNodeParticleRandomness.xml
index 75736992ee..2dec41105c 100644
--- a/doc/classes/VisualShaderNodeParticleRandomness.xml
+++ b/doc/classes/VisualShaderNodeParticleRandomness.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeParticleRandomness.OpType" default="0">
</member>
diff --git a/doc/classes/VisualShaderNodeParticleRingEmitter.xml b/doc/classes/VisualShaderNodeParticleRingEmitter.xml
index ee3fbe7faf..9aabf1ed27 100644
--- a/doc/classes/VisualShaderNodeParticleRingEmitter.xml
+++ b/doc/classes/VisualShaderNodeParticleRingEmitter.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeParticleSphereEmitter.xml b/doc/classes/VisualShaderNodeParticleSphereEmitter.xml
index d43ac518cf..e2db81ff17 100644
--- a/doc/classes/VisualShaderNodeParticleSphereEmitter.xml
+++ b/doc/classes/VisualShaderNodeParticleSphereEmitter.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeResizableBase.xml b/doc/classes/VisualShaderNodeResizableBase.xml
index f42289a10e..ef734ef857 100644
--- a/doc/classes/VisualShaderNodeResizableBase.xml
+++ b/doc/classes/VisualShaderNodeResizableBase.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2(0, 0)">
The size of the node in the visual shader graph.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeSDFRaymarch.xml b/doc/classes/VisualShaderNodeSDFRaymarch.xml
index 775f2814c2..64a3e5a310 100644
--- a/doc/classes/VisualShaderNodeSDFRaymarch.xml
+++ b/doc/classes/VisualShaderNodeSDFRaymarch.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeSDFToScreenUV.xml b/doc/classes/VisualShaderNodeSDFToScreenUV.xml
index 40fb66e364..07e267b990 100644
--- a/doc/classes/VisualShaderNodeSDFToScreenUV.xml
+++ b/doc/classes/VisualShaderNodeSDFToScreenUV.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeSample3D.xml b/doc/classes/VisualShaderNodeSample3D.xml
index 82bcac5f69..85d2367eac 100644
--- a/doc/classes/VisualShaderNodeSample3D.xml
+++ b/doc/classes/VisualShaderNodeSample3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeSample3D.Source" default="0">
An input source type.
diff --git a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml
index 305586ac49..8d108a5d28 100644
--- a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml
+++ b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0">
The derivative type. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeScreenUVToSDF.xml b/doc/classes/VisualShaderNodeScreenUVToSDF.xml
index 2e121ffc54..8f1f4f486c 100644
--- a/doc/classes/VisualShaderNodeScreenUVToSDF.xml
+++ b/doc/classes/VisualShaderNodeScreenUVToSDF.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeSmoothStep.xml b/doc/classes/VisualShaderNodeSmoothStep.xml
index 0ed53a8c26..2f8c7e0f33 100644
--- a/doc/classes/VisualShaderNodeSmoothStep.xml
+++ b/doc/classes/VisualShaderNodeSmoothStep.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeSmoothStep.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeStep.xml b/doc/classes/VisualShaderNodeStep.xml
index 694c144445..5d8b464814 100644
--- a/doc/classes/VisualShaderNodeStep.xml
+++ b/doc/classes/VisualShaderNodeStep.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeStep.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeSwitch.xml b/doc/classes/VisualShaderNodeSwitch.xml
index 3961070a74..921092cd07 100644
--- a/doc/classes/VisualShaderNodeSwitch.xml
+++ b/doc/classes/VisualShaderNodeSwitch.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeSwitch.OpType" default="0">
A type of operands and returned value.
diff --git a/doc/classes/VisualShaderNodeTexture.xml b/doc/classes/VisualShaderNodeTexture.xml
index 17c079f385..0a2af30f67 100644
--- a/doc/classes/VisualShaderNodeTexture.xml
+++ b/doc/classes/VisualShaderNodeTexture.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeTexture.Source" default="0">
Determines the source for the lookup. See [enum Source] for options.
diff --git a/doc/classes/VisualShaderNodeTexture2DArray.xml b/doc/classes/VisualShaderNodeTexture2DArray.xml
index 3c6d328ed0..cd7c526e1f 100644
--- a/doc/classes/VisualShaderNodeTexture2DArray.xml
+++ b/doc/classes/VisualShaderNodeTexture2DArray.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="texture_array" type="Texture2DArray" setter="set_texture_array" getter="get_texture_array">
A source texture array. Used if [member VisualShaderNodeSample3D.source] is set to [constant VisualShaderNodeSample3D.SOURCE_TEXTURE].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml b/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml
index 976fcf26c8..ba320afd18 100644
--- a/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml
+++ b/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTexture3D.xml b/doc/classes/VisualShaderNodeTexture3D.xml
index 17929e823e..2f5b750ce1 100644
--- a/doc/classes/VisualShaderNodeTexture3D.xml
+++ b/doc/classes/VisualShaderNodeTexture3D.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="texture" type="Texture3D" setter="set_texture" getter="get_texture">
A source texture. Used if [member VisualShaderNodeSample3D.source] is set to [constant VisualShaderNodeSample3D.SOURCE_TEXTURE].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTexture3DUniform.xml b/doc/classes/VisualShaderNodeTexture3DUniform.xml
index d9e9acf117..3b002c5449 100644
--- a/doc/classes/VisualShaderNodeTexture3DUniform.xml
+++ b/doc/classes/VisualShaderNodeTexture3DUniform.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTextureSDF.xml b/doc/classes/VisualShaderNodeTextureSDF.xml
index b5c89c2c31..09a5851ef7 100644
--- a/doc/classes/VisualShaderNodeTextureSDF.xml
+++ b/doc/classes/VisualShaderNodeTextureSDF.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTextureSDFNormal.xml b/doc/classes/VisualShaderNodeTextureSDFNormal.xml
index 25fe1c4b28..e66492cebf 100644
--- a/doc/classes/VisualShaderNodeTextureSDFNormal.xml
+++ b/doc/classes/VisualShaderNodeTextureSDFNormal.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTextureUniform.xml b/doc/classes/VisualShaderNodeTextureUniform.xml
index 492c6010df..26c72d2714 100644
--- a/doc/classes/VisualShaderNodeTextureUniform.xml
+++ b/doc/classes/VisualShaderNodeTextureUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color_default" type="int" setter="set_color_default" getter="get_color_default" enum="VisualShaderNodeTextureUniform.ColorDefault" default="0">
Sets the default color if no texture is assigned to the uniform.
diff --git a/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml b/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml
index 28504cc7ac..76b5506cba 100644
--- a/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml
+++ b/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTransformCompose.xml b/doc/classes/VisualShaderNodeTransformCompose.xml
index b82ce9bdd8..4ec59962e9 100644
--- a/doc/classes/VisualShaderNodeTransformCompose.xml
+++ b/doc/classes/VisualShaderNodeTransformCompose.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTransformConstant.xml b/doc/classes/VisualShaderNodeTransformConstant.xml
index 30178752d0..66eda94fbe 100644
--- a/doc/classes/VisualShaderNodeTransformConstant.xml
+++ b/doc/classes/VisualShaderNodeTransformConstant.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="Transform3D" setter="set_constant" getter="get_constant" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
A [Transform3D] constant which represents the state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTransformDecompose.xml b/doc/classes/VisualShaderNodeTransformDecompose.xml
index b815efc67a..e1bfa94a07 100644
--- a/doc/classes/VisualShaderNodeTransformDecompose.xml
+++ b/doc/classes/VisualShaderNodeTransformDecompose.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTransformFunc.xml b/doc/classes/VisualShaderNodeTransformFunc.xml
index 51b1100e22..bbc36fc8d5 100644
--- a/doc/classes/VisualShaderNodeTransformFunc.xml
+++ b/doc/classes/VisualShaderNodeTransformFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeTransformFunc.Function" default="0">
The function to be computed. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeTransformOp.xml b/doc/classes/VisualShaderNodeTransformOp.xml
index 02debd890f..65d5b9cbbd 100644
--- a/doc/classes/VisualShaderNodeTransformOp.xml
+++ b/doc/classes/VisualShaderNodeTransformOp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformOp.Operator" default="0">
The type of the operation to be performed on the transforms. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeTransformUniform.xml b/doc/classes/VisualShaderNodeTransformUniform.xml
index 2f7818ec8a..b6d8801932 100644
--- a/doc/classes/VisualShaderNodeTransformUniform.xml
+++ b/doc/classes/VisualShaderNodeTransformUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="Transform3D" setter="set_default_value" getter="get_default_value" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
A default value to be assigned within the shader.
@@ -18,6 +16,4 @@
Enables usage of the [member default_value].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeTransformVecMult.xml b/doc/classes/VisualShaderNodeTransformVecMult.xml
index d8f7ebbd55..02fe18c7a0 100644
--- a/doc/classes/VisualShaderNodeTransformVecMult.xml
+++ b/doc/classes/VisualShaderNodeTransformVecMult.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformVecMult.Operator" default="0">
The multiplication type to be performed. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeUVFunc.xml b/doc/classes/VisualShaderNodeUVFunc.xml
index 042644feb0..26bcea07e8 100644
--- a/doc/classes/VisualShaderNodeUVFunc.xml
+++ b/doc/classes/VisualShaderNodeUVFunc.xml
@@ -7,8 +7,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeUVFunc.Function" default="0">
A function to be applied to the texture coordinates. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeUniform.xml b/doc/classes/VisualShaderNodeUniform.xml
index 561d87af45..15c760656e 100644
--- a/doc/classes/VisualShaderNodeUniform.xml
+++ b/doc/classes/VisualShaderNodeUniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="qualifier" type="int" setter="set_qualifier" getter="get_qualifier" enum="VisualShaderNodeUniform.Qualifier" default="0">
</member>
diff --git a/doc/classes/VisualShaderNodeUniformRef.xml b/doc/classes/VisualShaderNodeUniformRef.xml
index db02e398ab..44a28ed53c 100644
--- a/doc/classes/VisualShaderNodeUniformRef.xml
+++ b/doc/classes/VisualShaderNodeUniformRef.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default="&quot;[None]&quot;">
The name of the uniform which this reference points to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVec3Constant.xml b/doc/classes/VisualShaderNodeVec3Constant.xml
index 28c3d22345..0a64357962 100644
--- a/doc/classes/VisualShaderNodeVec3Constant.xml
+++ b/doc/classes/VisualShaderNodeVec3Constant.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="Vector3" setter="set_constant" getter="get_constant" default="Vector3(0, 0, 0)">
A [Vector3] constant which represents the state of this node.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVec3Uniform.xml b/doc/classes/VisualShaderNodeVec3Uniform.xml
index 215e2cfbea..2b72e5252a 100644
--- a/doc/classes/VisualShaderNodeVec3Uniform.xml
+++ b/doc/classes/VisualShaderNodeVec3Uniform.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="default_value" type="Vector3" setter="set_default_value" getter="get_default_value" default="Vector3(0, 0, 0)">
A default value to be assigned within the shader.
@@ -18,6 +16,4 @@
Enables usage of the [member default_value].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVectorCompose.xml b/doc/classes/VisualShaderNodeVectorCompose.xml
index c9ff3cd38e..ebc30d03f4 100644
--- a/doc/classes/VisualShaderNodeVectorCompose.xml
+++ b/doc/classes/VisualShaderNodeVectorCompose.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVectorDecompose.xml b/doc/classes/VisualShaderNodeVectorDecompose.xml
index 95af323c9b..09986bf969 100644
--- a/doc/classes/VisualShaderNodeVectorDecompose.xml
+++ b/doc/classes/VisualShaderNodeVectorDecompose.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml b/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
index 9fd8ba2806..e0c7c8618c 100644
--- a/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
+++ b/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorDerivativeFunc.Function" default="0">
A derivative type. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeVectorDistance.xml b/doc/classes/VisualShaderNodeVectorDistance.xml
index 2da04b122e..098787e583 100644
--- a/doc/classes/VisualShaderNodeVectorDistance.xml
+++ b/doc/classes/VisualShaderNodeVectorDistance.xml
@@ -9,8 +9,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVectorFunc.xml b/doc/classes/VisualShaderNodeVectorFunc.xml
index 79bf3f6a07..27ae82e11b 100644
--- a/doc/classes/VisualShaderNodeVectorFunc.xml
+++ b/doc/classes/VisualShaderNodeVectorFunc.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorFunc.Function" default="0">
The function to be performed. See [enum Function] for options.
diff --git a/doc/classes/VisualShaderNodeVectorLen.xml b/doc/classes/VisualShaderNodeVectorLen.xml
index 77261d3190..165455e622 100644
--- a/doc/classes/VisualShaderNodeVectorLen.xml
+++ b/doc/classes/VisualShaderNodeVectorLen.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VisualShaderNodeVectorOp.xml b/doc/classes/VisualShaderNodeVectorOp.xml
index 263485d38e..5e8f0abda3 100644
--- a/doc/classes/VisualShaderNodeVectorOp.xml
+++ b/doc/classes/VisualShaderNodeVectorOp.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeVectorOp.Operator" default="0">
The operator to be used. See [enum Operator] for options.
diff --git a/doc/classes/VisualShaderNodeVectorRefract.xml b/doc/classes/VisualShaderNodeVectorRefract.xml
index 178c35f49a..59e98fb000 100644
--- a/doc/classes/VisualShaderNodeVectorRefract.xml
+++ b/doc/classes/VisualShaderNodeVectorRefract.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/VoxelGIData.xml b/doc/classes/VoxelGIData.xml
index 5c2c7f9dc6..f0bd2a0601 100644
--- a/doc/classes/VoxelGIData.xml
+++ b/doc/classes/VoxelGIData.xml
@@ -67,6 +67,4 @@
<member name="use_two_bounces" type="bool" setter="set_use_two_bounces" getter="is_using_two_bounces" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/WeakRef.xml b/doc/classes/WeakRef.xml
index 339c1620bf..56617b581f 100644
--- a/doc/classes/WeakRef.xml
+++ b/doc/classes/WeakRef.xml
@@ -16,6 +16,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml
index 20b3afbd0b..a6a4701dd4 100644
--- a/doc/classes/World2D.xml
+++ b/doc/classes/World2D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="canvas" type="RID" setter="" getter="get_canvas">
The [RID] of this world's canvas resource. Used by the [RenderingServer] for 2D drawing.
@@ -25,6 +23,4 @@
The [RID] of this world's physics space resource. Used by the [PhysicsServer2D] for 2D physics, treating it as both a space and an area.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml
index 610ecacff4..136ca2c598 100644
--- a/doc/classes/World3D.xml
+++ b/doc/classes/World3D.xml
@@ -9,8 +9,6 @@
<tutorials>
<link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects">
</member>
@@ -33,6 +31,4 @@
The World3D's physics space.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/WorldBoundaryShape2D.xml b/doc/classes/WorldBoundaryShape2D.xml
index 190f289601..cfbab4dcf8 100644
--- a/doc/classes/WorldBoundaryShape2D.xml
+++ b/doc/classes/WorldBoundaryShape2D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="distance" type="float" setter="set_distance" getter="get_distance" default="0.0">
The line's distance from the origin.
@@ -18,6 +16,4 @@
The line's normal. Defaults to [code]Vector2.UP[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/WorldBoundaryShape3D.xml b/doc/classes/WorldBoundaryShape3D.xml
index 837b023a58..a916ac03d0 100644
--- a/doc/classes/WorldBoundaryShape3D.xml
+++ b/doc/classes/WorldBoundaryShape3D.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="plane" type="Plane" setter="set_plane" getter="get_plane" default="Plane(0, 1, 0, 0)">
The [Plane] used by the [WorldBoundaryShape3D] for collision.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml
index 6aa2db00b4..bd25a74c5b 100644
--- a/doc/classes/WorldEnvironment.xml
+++ b/doc/classes/WorldEnvironment.xml
@@ -14,8 +14,6 @@
<link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects">
</member>
@@ -23,6 +21,4 @@
The [Environment] resource used by this [WorldEnvironment], defining the default properties.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/X509Certificate.xml b/doc/classes/X509Certificate.xml
index 5900e68339..0af7094ee1 100644
--- a/doc/classes/X509Certificate.xml
+++ b/doc/classes/X509Certificate.xml
@@ -26,6 +26,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/XRAnchor3D.xml b/doc/classes/XRAnchor3D.xml
index ccbfab1273..94fc8fc13d 100644
--- a/doc/classes/XRAnchor3D.xml
+++ b/doc/classes/XRAnchor3D.xml
@@ -55,6 +55,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/XRCamera3D.xml b/doc/classes/XRCamera3D.xml
index b2682f7a90..682a797b5e 100644
--- a/doc/classes/XRCamera3D.xml
+++ b/doc/classes/XRCamera3D.xml
@@ -10,8 +10,4 @@
<tutorials>
<link title="VR tutorial index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml
index 47ddc22823..1a05a7b651 100644
--- a/doc/classes/XRController3D.xml
+++ b/doc/classes/XRController3D.xml
@@ -89,6 +89,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/XRInterfaceExtension.xml b/doc/classes/XRInterfaceExtension.xml
index fb79926043..84b46e0ddd 100644
--- a/doc/classes/XRInterfaceExtension.xml
+++ b/doc/classes/XRInterfaceExtension.xml
@@ -128,6 +128,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/XROrigin3D.xml b/doc/classes/XROrigin3D.xml
index 3e075e99b9..cdf319093c 100644
--- a/doc/classes/XROrigin3D.xml
+++ b/doc/classes/XROrigin3D.xml
@@ -12,14 +12,10 @@
<tutorials>
<link title="VR tutorial index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
</tutorials>
- <methods>
- </methods>
<members>
<member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale" default="1.0">
Allows you to adjust the scale to your game's units. Most AR/VR platforms assume a scale of 1 game world unit = 1 real world meter.
[b]Note:[/b] This method is a passthrough to the [XRServer] itself.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/bool.xml b/doc/classes/bool.xml
index 2d4ba8872e..39e34a7b96 100644
--- a/doc/classes/bool.xml
+++ b/doc/classes/bool.xml
@@ -158,6 +158,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/float.xml b/doc/classes/float.xml
index be8e1638e4..b45cdd2099 100644
--- a/doc/classes/float.xml
+++ b/doc/classes/float.xml
@@ -255,6 +255,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/doc/classes/int.xml b/doc/classes/int.xml
index dd523185df..a75d11ba4a 100644
--- a/doc/classes/int.xml
+++ b/doc/classes/int.xml
@@ -375,6 +375,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp
index 6789b5be00..38db48a4d4 100644
--- a/editor/action_map_editor.cpp
+++ b/editor/action_map_editor.cpp
@@ -120,8 +120,8 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) {
physical_key_checkbox->set_visible(show_phys_key);
additional_options_container->show();
- // Update selected item in input list for keys, joybuttons and joyaxis only (since the mouse cannot be "listened" for).
- if (k.is_valid() || joyb.is_valid() || joym.is_valid()) {
+ // Update selected item in input list.
+ if (k.is_valid() || joyb.is_valid() || joym.is_valid() || mb.is_valid()) {
TreeItem *category = input_list_tree->get_root()->get_first_child();
while (category) {
TreeItem *input_item = category->get_first_child();
@@ -134,13 +134,14 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) {
}
// If event type matches input types of this category.
- if ((k.is_valid() && input_type == INPUT_KEY) || (joyb.is_valid() && input_type == INPUT_JOY_BUTTON) || (joym.is_valid() && input_type == INPUT_JOY_MOTION)) {
+ if ((k.is_valid() && input_type == INPUT_KEY) || (joyb.is_valid() && input_type == INPUT_JOY_BUTTON) || (joym.is_valid() && input_type == INPUT_JOY_MOTION) || (mb.is_valid() && input_type == INPUT_MOUSE_BUTTON)) {
// Loop through all items of this category until one matches.
while (input_item) {
bool key_match = k.is_valid() && (Variant(k->get_keycode()) == input_item->get_meta("__keycode") || Variant(k->get_physical_keycode()) == input_item->get_meta("__keycode"));
bool joyb_match = joyb.is_valid() && Variant(joyb->get_button_index()) == input_item->get_meta("__index");
bool joym_match = joym.is_valid() && Variant(joym->get_axis()) == input_item->get_meta("__axis") && joym->get_axis_value() == (float)input_item->get_meta("__value");
- if (key_match || joyb_match || joym_match) {
+ bool mb_match = mb.is_valid() && Variant(mb->get_button_index()) == input_item->get_meta("__index");
+ if (key_match || joyb_match || joym_match || mb_match) {
category->set_collapsed(false);
input_item->select(0);
input_list_tree->ensure_cursor_is_visible();
@@ -165,7 +166,6 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) {
if (allowed_input_types & INPUT_KEY) {
strings.append(TTR("Key"));
}
- // We don't check for INPUT_MOUSE_BUTTON since it is ignored in the "Listen Window Input" method.
if (allowed_input_types & INPUT_JOY_BUTTON) {
strings.append(TTR("Joypad Button"));
@@ -173,7 +173,9 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) {
if (allowed_input_types & INPUT_JOY_MOTION) {
strings.append(TTR("Joypad Axis"));
}
-
+ if (allowed_input_types & INPUT_MOUSE_BUTTON) {
+ strings.append(TTR("Mouse Button in area below"));
+ }
if (strings.size() == 0) {
text = TTR("Input Event dialog has been misconfigured: No input types are allowed.");
event_as_text->set_text(text);
@@ -214,12 +216,21 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> &
return;
}
- // Ignore mouse
- Ref<InputEventMouse> m = p_event;
- if (m.is_valid()) {
+ // Ignore mouse motion
+ Ref<InputEventMouseMotion> mm = p_event;
+ if (mm.is_valid()) {
return;
}
+ // Ignore mouse button if not in the detection rect
+ Ref<InputEventMouseButton> mb = p_event;
+ if (mb.is_valid()) {
+ Rect2 r = mouse_detection_rect->get_rect();
+ if (!r.has_point(mouse_detection_rect->get_local_mouse_position() + r.get_position())) {
+ return;
+ }
+ }
+
// Check what the type is and if it is allowed.
Ref<InputEventKey> k = p_event;
Ref<InputEventJoypadButton> joyb = p_event;
@@ -227,6 +238,7 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> &
int type = k.is_valid() ? INPUT_KEY : joyb.is_valid() ? INPUT_JOY_BUTTON :
joym.is_valid() ? INPUT_JOY_MOTION :
+ mb.is_valid() ? INPUT_MOUSE_BUTTON :
0;
if (!(allowed_input_types & type)) {
@@ -537,6 +549,8 @@ void InputEventConfigurationDialog::_notification(int p_what) {
icon_cache.joypad_button = get_theme_icon(SNAME("JoyButton"), SNAME("EditorIcons"));
icon_cache.joypad_axis = get_theme_icon(SNAME("JoyAxis"), SNAME("EditorIcons"));
+ mouse_detection_rect->set_color(get_theme_color(SNAME("dark_color_2"), SNAME("Editor")));
+
_update_input_list();
} break;
default:
@@ -575,7 +589,7 @@ void InputEventConfigurationDialog::set_allowed_input_types(int p_type_masks) {
}
InputEventConfigurationDialog::InputEventConfigurationDialog() {
- allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION;
+ allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION | INPUT_MOUSE_BUTTON;
set_title(TTR("Event Configuration"));
set_min_size(Size2i(550 * EDSCALE, 0)); // Min width
@@ -590,12 +604,17 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() {
tab_container->connect("tab_selected", callable_mp(this, &InputEventConfigurationDialog::_tab_selected));
main_vbox->add_child(tab_container);
- CenterContainer *cc = memnew(CenterContainer);
- cc->set_name(TTR("Listen for Input"));
+ // Listen to input tab
+ VBoxContainer *vb = memnew(VBoxContainer);
+ vb->set_name(TTR("Listen for Input"));
event_as_text = memnew(Label);
event_as_text->set_align(Label::ALIGN_CENTER);
- cc->add_child(event_as_text);
- tab_container->add_child(cc);
+ vb->add_child(event_as_text);
+ // Mouse button detection rect (Mouse button event outside this ColorRect will be ignored)
+ mouse_detection_rect = memnew(ColorRect);
+ mouse_detection_rect->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ vb->add_child(mouse_detection_rect);
+ tab_container->add_child(vb);
// List of all input options to manually select from.
diff --git a/editor/action_map_editor.h b/editor/action_map_editor.h
index aff3e6e957..e55cab3510 100644
--- a/editor/action_map_editor.h
+++ b/editor/action_map_editor.h
@@ -32,6 +32,7 @@
#define ACTION_MAP_EDITOR_H
#include "editor/editor_data.h"
+#include <scene/gui/color_rect.h>
// Confirmation Dialog used when configuring an input event.
// Separate from ActionMapEditor for code cleanliness and separation of responsibilities.
@@ -60,6 +61,7 @@ private:
// Listening for input
Label *event_as_text;
+ ColorRect *mouse_detection_rect;
// List of All Key/Mouse/Joypad input options.
int allowed_input_types;
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 2944dd9991..7bf82fbd1b 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -1579,17 +1579,10 @@ void CodeTextEditor::_update_text_editor_theme() {
}
void CodeTextEditor::_on_settings_change() {
- if (settings_changed) {
- return;
- }
-
- settings_changed = true;
- MessageQueue::get_singleton()->push_callable(callable_mp(this, &CodeTextEditor::_apply_settings_change));
+ _apply_settings_change();
}
void CodeTextEditor::_apply_settings_change() {
- settings_changed = false;
-
_update_text_editor_theme();
font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size");
diff --git a/editor/code_editor.h b/editor/code_editor.h
index dfe6561f13..3c52a0c6e8 100644
--- a/editor/code_editor.h
+++ b/editor/code_editor.h
@@ -162,8 +162,6 @@ class CodeTextEditor : public VBoxContainer {
int error_line;
int error_column;
- bool settings_changed = false;
-
void _on_settings_change();
void _apply_settings_change();
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index 2f5bde64a9..989774e943 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -884,8 +884,7 @@ void ScriptEditorDebugger::_clear_breakpoints() {
}
void ScriptEditorDebugger::start(Ref<RemoteDebuggerPeer> p_peer) {
- error_count = 0;
- warning_count = 0;
+ _clear_errors_list();
stop();
peer = p_peer;
diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp
index d04875f188..ec162231e9 100644
--- a/editor/doc_tools.cpp
+++ b/editor/doc_tools.cpp
@@ -1173,6 +1173,59 @@ static void _write_string(FileAccess *f, int p_tablevel, const String &p_string)
f->store_string(tab + p_string + "\n");
}
+static void _write_method_doc(FileAccess *f, const String &p_name, Vector<DocData::MethodDoc> &p_method_docs) {
+ if (!p_method_docs.is_empty()) {
+ p_method_docs.sort();
+ _write_string(f, 1, "<" + p_name + "s>");
+ for (int i = 0; i < p_method_docs.size(); i++) {
+ const DocData::MethodDoc &m = p_method_docs[i];
+
+ String qualifiers;
+ if (m.qualifiers != "") {
+ qualifiers += " qualifiers=\"" + m.qualifiers.xml_escape() + "\"";
+ }
+
+ _write_string(f, 2, "<" + p_name + " name=\"" + m.name.xml_escape() + "\"" + qualifiers + ">");
+
+ if (m.return_type != "") {
+ String enum_text;
+ if (m.return_enum != String()) {
+ enum_text = " enum=\"" + m.return_enum + "\"";
+ }
+ _write_string(f, 3, "<return type=\"" + m.return_type + "\"" + enum_text + " />");
+ }
+ if (m.errors_returned.size() > 0) {
+ for (int j = 0; j < m.errors_returned.size(); j++) {
+ _write_string(f, 3, "<returns_error number=\"" + itos(m.errors_returned[j]) + "\"/>");
+ }
+ }
+
+ for (int j = 0; j < m.arguments.size(); j++) {
+ const DocData::ArgumentDoc &a = m.arguments[j];
+
+ String enum_text;
+ if (a.enumeration != String()) {
+ enum_text = " enum=\"" + a.enumeration + "\"";
+ }
+
+ if (a.default_value != "") {
+ _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " default=\"" + a.default_value.xml_escape(true) + "\" />");
+ } else {
+ _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " />");
+ }
+ }
+
+ _write_string(f, 3, "<description>");
+ _write_string(f, 4, m.description.strip_edges().xml_escape());
+ _write_string(f, 3, "</description>");
+
+ _write_string(f, 2, "</" + p_name + ">");
+ }
+
+ _write_string(f, 1, "</" + p_name + "s>");
+ }
+}
+
Error DocTools::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) {
for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) {
DocData::ClassDoc &c = E->get();
@@ -1216,58 +1269,9 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str
}
_write_string(f, 1, "</tutorials>");
- _write_string(f, 1, "<methods>");
-
- c.methods.sort();
-
- for (int i = 0; i < c.methods.size(); i++) {
- const DocData::MethodDoc &m = c.methods[i];
-
- String qualifiers;
- if (m.qualifiers != "") {
- qualifiers += " qualifiers=\"" + m.qualifiers.xml_escape() + "\"";
- }
-
- _write_string(f, 2, "<method name=\"" + m.name.xml_escape() + "\"" + qualifiers + ">");
+ _write_method_doc(f, "method", c.methods);
- if (m.return_type != "") {
- String enum_text;
- if (m.return_enum != String()) {
- enum_text = " enum=\"" + m.return_enum + "\"";
- }
- _write_string(f, 3, "<return type=\"" + m.return_type + "\"" + enum_text + " />");
- }
- if (m.errors_returned.size() > 0) {
- for (int j = 0; j < m.errors_returned.size(); j++) {
- _write_string(f, 3, "<returns_error number=\"" + itos(m.errors_returned[j]) + "\"/>");
- }
- }
-
- for (int j = 0; j < m.arguments.size(); j++) {
- const DocData::ArgumentDoc &a = m.arguments[j];
-
- String enum_text;
- if (a.enumeration != String()) {
- enum_text = " enum=\"" + a.enumeration + "\"";
- }
-
- if (a.default_value != "") {
- _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " default=\"" + a.default_value.xml_escape(true) + "\" />");
- } else {
- _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " />");
- }
- }
-
- _write_string(f, 3, "<description>");
- _write_string(f, 4, m.description.strip_edges().xml_escape());
- _write_string(f, 3, "</description>");
-
- _write_string(f, 2, "</method>");
- }
-
- _write_string(f, 1, "</methods>");
-
- if (c.properties.size()) {
+ if (!c.properties.is_empty()) {
_write_string(f, 1, "<members>");
c.properties.sort();
@@ -1294,52 +1298,33 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str
_write_string(f, 1, "</members>");
}
- if (c.signals.size()) {
- c.signals.sort();
-
- _write_string(f, 1, "<signals>");
- for (int i = 0; i < c.signals.size(); i++) {
- const DocData::MethodDoc &m = c.signals[i];
- _write_string(f, 2, "<signal name=\"" + m.name + "\">");
- for (int j = 0; j < m.arguments.size(); j++) {
- const DocData::ArgumentDoc &a = m.arguments[j];
- _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\" />");
- }
-
- _write_string(f, 3, "<description>");
- _write_string(f, 4, m.description.strip_edges().xml_escape());
- _write_string(f, 3, "</description>");
-
- _write_string(f, 2, "</signal>");
- }
-
- _write_string(f, 1, "</signals>");
- }
-
- _write_string(f, 1, "<constants>");
+ _write_method_doc(f, "signal", c.signals);
- for (int i = 0; i < c.constants.size(); i++) {
- const DocData::ConstantDoc &k = c.constants[i];
- if (k.is_value_valid) {
- if (k.enumeration != String()) {
- _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">");
- } else {
- _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">");
- }
- } else {
- if (k.enumeration != String()) {
- _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\" enum=\"" + k.enumeration + "\">");
+ if (!c.constants.is_empty()) {
+ _write_string(f, 1, "<constants>");
+ for (int i = 0; i < c.constants.size(); i++) {
+ const DocData::ConstantDoc &k = c.constants[i];
+ if (k.is_value_valid) {
+ if (k.enumeration != String()) {
+ _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">");
+ } else {
+ _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">");
+ }
} else {
- _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\">");
+ if (k.enumeration != String()) {
+ _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\" enum=\"" + k.enumeration + "\">");
+ } else {
+ _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\">");
+ }
}
+ _write_string(f, 3, k.description.strip_edges().xml_escape());
+ _write_string(f, 2, "</constant>");
}
- _write_string(f, 3, k.description.strip_edges().xml_escape());
- _write_string(f, 2, "</constant>");
- }
- _write_string(f, 1, "</constants>");
+ _write_string(f, 1, "</constants>");
+ }
- if (c.theme_properties.size()) {
+ if (!c.theme_properties.is_empty()) {
c.theme_properties.sort();
_write_string(f, 1, "<theme_items>");
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp
index e40bbefef8..5e50835ef2 100644
--- a/editor/editor_data.cpp
+++ b/editor/editor_data.cpp
@@ -566,6 +566,10 @@ void EditorData::remove_scene(int p_idx) {
current_edited_scene--;
}
+ if (edited_scene[p_idx].path != String()) {
+ ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(edited_scene[p_idx].path);
+ }
+
edited_scene.remove(p_idx);
}
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 812bbd9b7d..ef8dabc19a 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -3278,10 +3278,6 @@ void EditorNode::_remove_edited_scene(bool p_change_tab) {
new_index = 1;
}
- if (editor_data.get_scene_path(old_index) != String()) {
- ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(editor_data.get_scene_path(old_index));
- }
-
if (p_change_tab) {
_scene_tab_changed(new_index);
}
@@ -5971,7 +5967,7 @@ EditorNode::EditorNode() {
EDITOR_DEF_RST("interface/editor/save_each_scene_on_quit", true);
EDITOR_DEF("interface/editor/show_update_spinner", false);
EDITOR_DEF("interface/editor/update_continuously", false);
- EDITOR_DEF_RST("interface/scene_tabs/restore_scenes_on_load", false);
+ EDITOR_DEF_RST("interface/scene_tabs/restore_scenes_on_load", true);
EDITOR_DEF_RST("interface/scene_tabs/show_thumbnail_on_hover", true);
EDITOR_DEF_RST("interface/inspector/capitalize_properties", true);
EDITOR_DEF_RST("interface/inspector/default_float_step", 0.001);
@@ -6207,11 +6203,9 @@ EditorNode::EditorNode() {
tabbar_container->add_child(scene_tabs);
distraction_free = memnew(Button);
distraction_free->set_flat(true);
-#ifdef OSX_ENABLED
- distraction_free->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D));
-#else
- distraction_free->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11));
-#endif
+ ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11);
+ ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D);
+ distraction_free->set_shortcut(ED_GET_SHORTCUT("editor/distraction_free_mode"));
distraction_free->set_tooltip(TTR("Toggle distraction-free mode."));
distraction_free->connect("pressed", callable_mp(this, &EditorNode::_toggle_distraction_free_mode));
distraction_free->set_icon(gui_base->get_theme_icon(SNAME("DistractionFree"), SNAME("EditorIcons")));
@@ -6399,11 +6393,9 @@ EditorNode::EditorNode() {
p->add_separator();
p->add_shortcut(ED_SHORTCUT("editor/reload_current_project", TTR("Reload Current Project")), RUN_RELOAD_CURRENT_PROJECT);
-#ifdef OSX_ENABLED
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q), RUN_PROJECT_MANAGER, true);
-#else
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_Q), RUN_PROJECT_MANAGER, true);
-#endif
+ ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_Q);
+ ED_SHORTCUT_OVERRIDE("editor/quit_to_project_list", "macos", KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q);
+ p->add_shortcut(ED_GET_SHORTCUT("editor/quit_to_project_list"), RUN_PROJECT_MANAGER, true);
menu_hb->add_spacer();
@@ -6428,11 +6420,10 @@ EditorNode::EditorNode() {
left_menu_hb->add_child(settings_menu);
p = settings_menu->get_popup();
-#ifdef OSX_ENABLED
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings..."), KEY_MASK_CMD + KEY_COMMA), SETTINGS_PREFERENCES);
-#else
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings...")), SETTINGS_PREFERENCES);
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings..."));
+ ED_SHORTCUT_OVERRIDE("editor/editor_settings", "macos", KEY_MASK_CMD + KEY_COMMA);
+ p->add_shortcut(ED_GET_SHORTCUT("editor/editor_settings"), SETTINGS_PREFERENCES);
p->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_P), HELP_COMMAND_PALETTE);
p->add_separator();
@@ -6442,17 +6433,17 @@ EditorNode::EditorNode() {
editor_layouts->connect("id_pressed", callable_mp(this, &EditorNode::_layout_menu_option));
p->add_submenu_item(TTR("Editor Layout"), "Layouts");
p->add_separator();
-#ifdef OSX_ENABLED
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CMD | KEY_F12), EDITOR_SCREENSHOT);
-#else
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CTRL | KEY_F12), EDITOR_SCREENSHOT);
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CTRL | KEY_F12);
+ ED_SHORTCUT_OVERRIDE("editor/take_screenshot", "macos", KEY_MASK_CMD | KEY_F12);
+ p->add_shortcut(ED_GET_SHORTCUT("editor/take_screenshot"), EDITOR_SCREENSHOT);
+
p->set_item_tooltip(p->get_item_count() - 1, TTR("Screenshots are stored in the Editor Data/Settings Folder."));
-#ifdef OSX_ENABLED
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F), SETTINGS_TOGGLE_FULLSCREEN);
-#else
- p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREEN);
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11);
+ ED_SHORTCUT_OVERRIDE("editor/fullscreen_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F);
+ p->add_shortcut(ED_GET_SHORTCUT("editor/fullscreen_mode"), SETTINGS_TOGGLE_FULLSCREEN);
+
#if defined(WINDOWS_ENABLED) && defined(WINDOWS_SUBSYSTEM_CONSOLE)
// The console can only be toggled if the application was built for the console subsystem,
// not the GUI subsystem.
@@ -6461,7 +6452,7 @@ EditorNode::EditorNode() {
p->add_separator();
if (OS::get_singleton()->get_data_path() == OS::get_singleton()->get_config_path()) {
- // Configuration and data folders are located in the same place (Windows/macOS)
+ // Configuration and data folders are located in the same place (Windows/macos)
p->add_item(TTR("Open Editor Data/Settings Folder"), SETTINGS_EDITOR_DATA_FOLDER);
} else {
// Separate configuration and data folders (Linux)
@@ -6483,11 +6474,10 @@ EditorNode::EditorNode() {
p = help_menu->get_popup();
p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option));
-#ifdef OSX_ENABLED
- p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE), HELP_SEARCH);
-#else
- p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_F1), HELP_SEARCH);
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_F1);
+ ED_SHORTCUT_OVERRIDE("editor/editor_help", "macos", KEY_MASK_ALT | KEY_SPACE);
+ p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_GET_SHORTCUT("editor/editor_help"), HELP_SEARCH);
p->add_separator();
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/online_docs", TTR("Online Documentation")), HELP_DOCS);
p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/q&a", TTR("Questions & Answers")), HELP_QA);
@@ -6510,11 +6500,10 @@ EditorNode::EditorNode() {
play_button->set_focus_mode(Control::FOCUS_NONE);
play_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY));
play_button->set_tooltip(TTR("Play the project."));
-#ifdef OSX_ENABLED
- play_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_MASK_CMD | KEY_B));
-#else
- play_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_F5));
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_F5);
+ ED_SHORTCUT_OVERRIDE("editor/play", "macos", KEY_MASK_CMD | KEY_B);
+ play_button->set_shortcut(ED_GET_SHORTCUT("editor/play"));
pause_button = memnew(Button);
pause_button->set_flat(true);
@@ -6524,11 +6513,10 @@ EditorNode::EditorNode() {
pause_button->set_tooltip(TTR("Pause the scene execution for debugging."));
pause_button->set_disabled(true);
play_hb->add_child(pause_button);
-#ifdef OSX_ENABLED
- pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y));
-#else
- pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7));
-#endif
+
+ ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7);
+ ED_SHORTCUT_OVERRIDE("editor/pause_scene", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y);
+ pause_button->set_shortcut(ED_GET_SHORTCUT("editor/pause_scene"));
stop_button = memnew(Button);
stop_button->set_flat(true);
@@ -6538,11 +6526,10 @@ EditorNode::EditorNode() {
stop_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_STOP));
stop_button->set_tooltip(TTR("Stop the scene."));
stop_button->set_disabled(true);
-#ifdef OSX_ENABLED
- stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_MASK_CMD | KEY_PERIOD));
-#else
- stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8));
-#endif
+
+ ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8);
+ ED_SHORTCUT_OVERRIDE("editor/stop", "macos", KEY_MASK_CMD | KEY_PERIOD);
+ stop_button->set_shortcut(ED_GET_SHORTCUT("editor/stop"));
run_native = memnew(EditorRunNative);
play_hb->add_child(run_native);
@@ -6556,11 +6543,10 @@ EditorNode::EditorNode() {
play_scene_button->set_icon(gui_base->get_theme_icon(SNAME("PlayScene"), SNAME("EditorIcons")));
play_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_SCENE));
play_scene_button->set_tooltip(TTR("Play the edited scene."));
-#ifdef OSX_ENABLED
- play_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_MASK_CMD | KEY_R));
-#else
- play_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_F6));
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_F6);
+ ED_SHORTCUT_OVERRIDE("editor/play_scene", "macos", KEY_MASK_CMD | KEY_R);
+ play_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_scene"));
play_custom_scene_button = memnew(Button);
play_custom_scene_button->set_flat(true);
@@ -6570,11 +6556,10 @@ EditorNode::EditorNode() {
play_custom_scene_button->set_icon(gui_base->get_theme_icon(SNAME("PlayCustom"), SNAME("EditorIcons")));
play_custom_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_CUSTOM_SCENE));
play_custom_scene_button->set_tooltip(TTR("Play custom scene"));
-#ifdef OSX_ENABLED
- play_custom_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R));
-#else
- play_custom_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5));
-#endif
+
+ ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5);
+ ED_SHORTCUT_OVERRIDE("editor/play_custom_scene", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R);
+ play_custom_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_custom_scene"));
HBoxContainer *right_menu_hb = memnew(HBoxContainer);
menu_hb->add_child(right_menu_hb);
@@ -7110,20 +7095,19 @@ EditorNode::EditorNode() {
ResourceSaver::set_save_callback(_resource_saved);
ResourceLoader::set_load_callback(_resource_loaded);
-#ifdef OSX_ENABLED
- ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1);
- ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2);
- ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3);
- ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_ALT | KEY_4);
-#else
// Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock.
ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1);
ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2);
ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3);
ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4);
-#endif
- ED_SHORTCUT_AND_COMMAND("editor/editor_next", TTR("Next Editor Tab"));
- ED_SHORTCUT_AND_COMMAND("editor/editor_prev", TTR("Previous Editor Tab"));
+
+ ED_SHORTCUT_OVERRIDE("editor/editor_2d", "macos", KEY_MASK_ALT | KEY_1);
+ ED_SHORTCUT_OVERRIDE("editor/editor_3d", "macos", KEY_MASK_ALT | KEY_2);
+ ED_SHORTCUT_OVERRIDE("editor/editor_script", "macos", KEY_MASK_ALT | KEY_3);
+ ED_SHORTCUT_OVERRIDE("editor/editor_assetlib", "macos", KEY_MASK_ALT | KEY_4);
+
+ ED_SHORTCUT_AND_COMMAND("editor/editor_next", TTR("Open the next Editor"));
+ ED_SHORTCUT_AND_COMMAND("editor/editor_prev", TTR("Open the previous Editor"));
screenshot_timer = memnew(Timer);
screenshot_timer->set_one_shot(true);
diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp
index a4ab749db4..31c62880e2 100644
--- a/editor/editor_resource_picker.cpp
+++ b/editor/editor_resource_picker.cpp
@@ -135,6 +135,10 @@ void EditorResourcePicker::_file_selected(const String &p_path) {
_update_resource();
}
+void EditorResourcePicker::_file_quick_selected() {
+ _file_selected(quick_open->get_selected());
+}
+
void EditorResourcePicker::_update_menu() {
_update_menu_items();
@@ -153,7 +157,10 @@ void EditorResourcePicker::_update_menu_items() {
// Add options for creating specific subtypes of the base resource type.
set_create_options(edit_menu);
- // Add an option to load a resource from a file.
+ // Add an option to load a resource from a file using the QuickOpen dialog.
+ edit_menu->add_icon_item(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")), TTR("Quick Load"), OBJ_MENU_QUICKLOAD);
+
+ // Add an option to load a resource from a file using the regular file dialog.
edit_menu->add_icon_item(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")), TTR("Load"), OBJ_MENU_LOAD);
// Add options for changing existing value of the resource.
@@ -246,6 +253,17 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) {
file_dialog->popup_file_dialog();
} break;
+ case OBJ_MENU_QUICKLOAD: {
+ if (!quick_open) {
+ quick_open = memnew(EditorQuickOpen);
+ add_child(quick_open);
+ quick_open->connect("quick_open", callable_mp(this, &EditorResourcePicker::_file_quick_selected));
+ }
+
+ quick_open->popup_dialog(base_type);
+ quick_open->set_title(TTR("Resource"));
+ } break;
+
case OBJ_MENU_EDIT: {
if (edited_resource.is_valid()) {
emit_signal(SNAME("resource_selected"), edited_resource);
diff --git a/editor/editor_resource_picker.h b/editor/editor_resource_picker.h
index d77c31f831..d0dad0287b 100644
--- a/editor/editor_resource_picker.h
+++ b/editor/editor_resource_picker.h
@@ -32,6 +32,7 @@
#define EDITOR_RESOURCE_PICKER_H
#include "editor_file_dialog.h"
+#include "quick_open.h"
#include "scene/gui/box_container.h"
#include "scene/gui/button.h"
#include "scene/gui/popup_menu.h"
@@ -54,9 +55,11 @@ class EditorResourcePicker : public HBoxContainer {
TextureRect *preview_rect;
Button *edit_button;
EditorFileDialog *file_dialog = nullptr;
+ EditorQuickOpen *quick_open = nullptr;
enum MenuOption {
OBJ_MENU_LOAD,
+ OBJ_MENU_QUICKLOAD,
OBJ_MENU_EDIT,
OBJ_MENU_CLEAR,
OBJ_MENU_MAKE_UNIQUE,
@@ -75,6 +78,7 @@ class EditorResourcePicker : public HBoxContainer {
void _update_resource_preview(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_obj);
void _resource_selected();
+ void _file_quick_selected();
void _file_selected(const String &p_path);
void _update_menu();
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 1953270b08..1820804cfe 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -592,18 +592,16 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("editors/3d/navigation/warped_mouse_panning", true);
// 3D: Navigation feel
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_sensitivity", 0.4, "0.0,2,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_inertia", 0.05, "0.0,1,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/translation_inertia", 0.15, "0.0,1,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/zoom_inertia", 0.075, "0.0,1,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075, "0.0,1,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/manipulation_translation_inertia", 0.075, "0.0,1,0.01")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_sensitivity", 0.25, "0.01,2,0.001")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_inertia", 0.0, "0,1,0.001")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/translation_inertia", 0.05, "0,1,0.001")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/zoom_inertia", 0.05, "0,1,0.001")
// 3D: Freelook
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/3d/freelook/freelook_navigation_scheme", 0, "Default,Partially Axis-Locked (id Tech),Fully Axis-Locked (Minecraft)")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_sensitivity", 0.4, "0.0,2,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_inertia", 0.1, "0.0,1,0.01")
- EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_base_speed", 5.0, "0.0,10,0.01")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_sensitivity", 0.25, "0.01,2,0.001")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_inertia", 0.0, "0,1,0.001")
+ EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_base_speed", 5.0, "0,10,0.01")
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/3d/freelook/freelook_activation_modifier", 0, "None,Shift,Alt,Meta,Ctrl")
_initial_set("editors/3d/freelook/freelook_speed_zoom_link", false);
@@ -712,7 +710,7 @@ void EditorSettings::_load_godot2_text_editor_theme() {
_initial_set("text_editor/theme/highlighting/background_color", Color(0.13, 0.12, 0.15));
_initial_set("text_editor/theme/highlighting/completion_background_color", Color(0.17, 0.16, 0.2));
_initial_set("text_editor/theme/highlighting/completion_selected_color", Color(0.26, 0.26, 0.27));
- _initial_set("text_editor/theme/highlighting/completion_existing_color", Color(0.13, 0.87, 0.87, 0.87));
+ _initial_set("text_editor/theme/highlighting/completion_existing_color", Color(0.87, 0.87, 0.87, 0.13));
_initial_set("text_editor/theme/highlighting/completion_scroll_color", Color(1, 1, 1));
_initial_set("text_editor/theme/highlighting/completion_font_color", Color(0.67, 0.67, 0.67));
_initial_set("text_editor/theme/highlighting/text_color", Color(0.67, 0.67, 0.67));
@@ -1411,7 +1409,7 @@ Ref<Shortcut> EditorSettings::get_shortcut(const String &p_name) const {
// If there was no override, check the default builtins to see if it has an InputEvent for the provided name.
if (sc.is_null()) {
- const OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins().find(p_name);
+ const OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(p_name);
if (builtin_default) {
sc.instantiate();
sc->set_event(builtin_default.get().front()->get());
@@ -1446,6 +1444,23 @@ Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path) {
return sc;
}
+void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode) {
+ Ref<Shortcut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
+ ERR_FAIL_COND_MSG(!sc.is_valid(), "Used ED_SHORTCUT_OVERRIDE with invalid shortcut: " + p_path + ".");
+
+ // Only add the override if the OS supports the provided feature.
+ if (OS::get_singleton()->has_feature(p_feature)) {
+ Ref<InputEventKey> ie;
+ if (p_keycode) {
+ ie = InputEventKey::create_reference(p_keycode);
+ }
+
+ // Directly override the existing shortcut.
+ sc->set_event(ie);
+ sc->set_meta("original", ie);
+ }
+}
+
Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode) {
#ifdef OSX_ENABLED
// Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS
@@ -1456,14 +1471,7 @@ Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keyc
Ref<InputEventKey> ie;
if (p_keycode) {
- ie.instantiate();
-
- ie->set_unicode(p_keycode & KEY_CODE_MASK);
- ie->set_keycode(p_keycode & KEY_CODE_MASK);
- ie->set_shift_pressed(bool(p_keycode & KEY_MASK_SHIFT));
- ie->set_alt_pressed(bool(p_keycode & KEY_MASK_ALT));
- ie->set_ctrl_pressed(bool(p_keycode & KEY_MASK_CTRL));
- ie->set_meta_pressed(bool(p_keycode & KEY_MASK_META));
+ ie = InputEventKey::create_reference(p_keycode);
}
if (!EditorSettings::get_singleton()) {
@@ -1504,15 +1512,23 @@ void EditorSettings::set_builtin_action_override(const String &p_name, const Arr
// Check if the provided event array is same as built-in. If it is, it does not need to be added to the overrides.
// Note that event order must also be the same.
bool same_as_builtin = true;
- OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins().find(p_name);
+ OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(p_name);
if (builtin_default) {
List<Ref<InputEvent>> builtin_events = builtin_default.get();
- if (p_events.size() == builtin_events.size()) {
+ // In the editor we only care about key events.
+ List<Ref<InputEventKey>> builtin_key_events;
+ for (Ref<InputEventKey> iek : builtin_events) {
+ if (iek.is_valid()) {
+ builtin_key_events.push_back(iek);
+ }
+ }
+
+ if (p_events.size() == builtin_key_events.size()) {
int event_idx = 0;
// Check equality of each event.
- for (const Ref<InputEvent> &E : builtin_events) {
+ for (const Ref<InputEventKey> &E : builtin_key_events) {
if (!E->is_match(p_events[event_idx])) {
same_as_builtin = false;
break;
diff --git a/editor/editor_settings.h b/editor/editor_settings.h
index 86e15f5ff5..9067539e29 100644
--- a/editor/editor_settings.h
+++ b/editor/editor_settings.h
@@ -201,6 +201,7 @@ Variant _EDITOR_GET(const String &p_setting);
#define ED_IS_SHORTCUT(p_name, p_ev) (EditorSettings::get_singleton()->is_shortcut(p_name, p_ev))
Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode = KEY_NONE);
+void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode = KEY_NONE);
Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path);
#endif // EDITOR_SETTINGS_H
diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h
index 414e0c1fe6..1bb5ef33ce 100644
--- a/editor/import/resource_importer_obj.h
+++ b/editor/import/resource_importer_obj.h
@@ -64,6 +64,9 @@ public:
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
+ // Threaded import can currently cause deadlocks, see GH-48265.
+ virtual bool can_import_threaded() const override { return false; }
+
ResourceImporterOBJ();
};
diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp
index dec1466da1..869af209d3 100644
--- a/editor/import/resource_importer_texture_atlas.cpp
+++ b/editor/import/resource_importer_texture_atlas.cpp
@@ -131,9 +131,9 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_
double xf = x[0];
double xt = x[0] + dx_upper; // if y[0] == y[1], special case
int max_y = MIN(y[2], height - p_offset.y - 1);
- for (int yi = y[0]; yi <= max_y; yi++) {
+ for (int yi = y[0]; yi < max_y; yi++) {
if (yi >= 0) {
- for (int xi = (xf > 0 ? int(xf) : 0); xi <= (xt < width ? xt : width - 1); xi++) {
+ for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < width ? xt : width - 1); xi++) {
int px = xi, py = yi;
int sx = px, sy = py;
sx = CLAMP(sx, 0, src_width - 1);
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index 030d90eeca..24cb660f7a 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -66,9 +66,13 @@ void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_scrip
_update_options_menu();
}
-void AnimationNodeBlendTreeEditor::_update_options_menu() {
+void AnimationNodeBlendTreeEditor::_update_options_menu(bool p_has_input_ports) {
add_node->get_popup()->clear();
+ add_node->get_popup()->set_size(Size2i(-1, -1));
for (int i = 0; i < add_options.size(); i++) {
+ if (p_has_input_ports && add_options[i].input_port_count == 0) {
+ continue;
+ }
add_node->get_popup()->add_item(add_options[i].name, i);
}
@@ -309,6 +313,11 @@ void AnimationNodeBlendTreeEditor::_add_node(int p_idx) {
return;
}
+ if (!from_node.is_empty() && anode->get_input_count() == 0) {
+ from_node = "";
+ return;
+ }
+
Point2 instance_pos = graph->get_scroll_ofs();
if (use_popup_menu_position) {
instance_pos += popup_menu_position;
@@ -328,11 +337,51 @@ void AnimationNodeBlendTreeEditor::_add_node(int p_idx) {
undo_redo->create_action(TTR("Add Node to BlendTree"));
undo_redo->add_do_method(blend_tree.ptr(), "add_node", name, anode, instance_pos / EDSCALE);
undo_redo->add_undo_method(blend_tree.ptr(), "remove_node", name);
+
+ if (!from_node.is_empty()) {
+ undo_redo->add_do_method(blend_tree.ptr(), "connect_node", name, 0, from_node);
+ from_node = "";
+ }
+ if (!to_node.is_empty() && to_slot != -1) {
+ undo_redo->add_do_method(blend_tree.ptr(), "connect_node", to_node, to_slot, name);
+ to_node = "";
+ to_slot = -1;
+ }
+
undo_redo->add_do_method(this, "_update_graph");
undo_redo->add_undo_method(this, "_update_graph");
undo_redo->commit_action();
}
+void AnimationNodeBlendTreeEditor::_popup(bool p_has_input_ports, const Vector2 &p_popup_position, const Vector2 &p_node_position) {
+ _update_options_menu(p_has_input_ports);
+ use_popup_menu_position = true;
+ popup_menu_position = p_popup_position;
+ add_node->get_popup()->set_position(p_node_position);
+ add_node->get_popup()->popup();
+}
+
+void AnimationNodeBlendTreeEditor::_popup_request(const Vector2 &p_position) {
+ _popup(false, graph->get_local_mouse_position(), p_position);
+}
+
+void AnimationNodeBlendTreeEditor::_connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position) {
+ Ref<AnimationNode> node = blend_tree->get_node(p_from);
+ if (node.is_valid()) {
+ from_node = p_from;
+ _popup(true, p_release_position, graph->get_global_mouse_position());
+ }
+}
+
+void AnimationNodeBlendTreeEditor::_connection_from_empty(const String &p_to, int p_to_slot, const Vector2 &p_release_position) {
+ Ref<AnimationNode> node = blend_tree->get_node(p_to);
+ if (node.is_valid()) {
+ to_node = p_to;
+ to_slot = p_to_slot;
+ _popup(false, p_release_position, graph->get_global_mouse_position());
+ }
+}
+
void AnimationNodeBlendTreeEditor::_node_dragged(const Vector2 &p_from, const Vector2 &p_to, const StringName &p_which) {
updating = true;
undo_redo->create_action(TTR("Node Moved"));
@@ -431,14 +480,6 @@ void AnimationNodeBlendTreeEditor::_delete_nodes_request() {
undo_redo->commit_action();
}
-void AnimationNodeBlendTreeEditor::_popup_request(const Vector2 &p_position) {
- _update_options_menu();
- use_popup_menu_position = true;
- popup_menu_position = graph->get_local_mouse_position();
- add_node->get_popup()->set_position(p_position);
- add_node->get_popup()->popup();
-}
-
void AnimationNodeBlendTreeEditor::_node_selected(Object *p_node) {
GraphNode *gn = Object::cast_to<GraphNode>(p_node);
ERR_FAIL_COND(!gn);
@@ -890,6 +931,8 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() {
graph->connect("scroll_offset_changed", callable_mp(this, &AnimationNodeBlendTreeEditor::_scroll_changed));
graph->connect("delete_nodes_request", callable_mp(this, &AnimationNodeBlendTreeEditor::_delete_nodes_request));
graph->connect("popup_request", callable_mp(this, &AnimationNodeBlendTreeEditor::_popup_request));
+ graph->connect("connection_to_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_to_empty));
+ graph->connect("connection_from_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_from_empty));
float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity");
graph->set_minimap_opacity(graph_minimap_opacity);
@@ -905,13 +948,13 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() {
add_node->connect("about_to_popup", callable_mp(this, &AnimationNodeBlendTreeEditor::_update_options_menu));
add_options.push_back(AddOption("Animation", "AnimationNodeAnimation"));
- add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot"));
- add_options.push_back(AddOption("Add2", "AnimationNodeAdd2"));
- add_options.push_back(AddOption("Add3", "AnimationNodeAdd3"));
- add_options.push_back(AddOption("Blend2", "AnimationNodeBlend2"));
- add_options.push_back(AddOption("Blend3", "AnimationNodeBlend3"));
- add_options.push_back(AddOption("Seek", "AnimationNodeTimeSeek"));
- add_options.push_back(AddOption("TimeScale", "AnimationNodeTimeScale"));
+ add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot", 2));
+ add_options.push_back(AddOption("Add2", "AnimationNodeAdd2", 2));
+ add_options.push_back(AddOption("Add3", "AnimationNodeAdd3", 3));
+ add_options.push_back(AddOption("Blend2", "AnimationNodeBlend2", 2));
+ add_options.push_back(AddOption("Blend3", "AnimationNodeBlend3", 3));
+ add_options.push_back(AddOption("Seek", "AnimationNodeTimeSeek", 1));
+ add_options.push_back(AddOption("TimeScale", "AnimationNodeTimeScale", 1));
add_options.push_back(AddOption("Transition", "AnimationNodeTransition"));
add_options.push_back(AddOption("BlendTree", "AnimationNodeBlendTree"));
add_options.push_back(AddOption("BlendSpace1D", "AnimationNodeBlendSpace1D"));
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.h b/editor/plugins/animation_blend_tree_editor_plugin.h
index 9f09069719..0fcafad40e 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.h
+++ b/editor/plugins/animation_blend_tree_editor_plugin.h
@@ -64,22 +64,28 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin {
Map<StringName, ProgressBar *> animations;
Vector<EditorProperty *> visible_properties;
+ String to_node = "";
+ int to_slot = -1;
+ String from_node = "";
+
void _update_graph();
struct AddOption {
String name;
String type;
Ref<Script> script;
- AddOption(const String &p_name = String(), const String &p_type = String()) :
+ int input_port_count;
+ AddOption(const String &p_name = String(), const String &p_type = String(), bool p_input_port_count = 0) :
name(p_name),
- type(p_type) {
+ type(p_type),
+ input_port_count(p_input_port_count) {
}
};
Vector<AddOption> add_options;
void _add_node(int p_idx);
- void _update_options_menu();
+ void _update_options_menu(bool p_has_input_ports = false);
static AnimationNodeBlendTreeEditor *singleton;
@@ -98,7 +104,6 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin {
void _anim_selected(int p_index, Array p_options, const String &p_node);
void _delete_request(const String &p_which);
void _delete_nodes_request();
- void _popup_request(const Vector2 &p_position);
bool _update_filters(const Ref<AnimationNode> &anode);
void _edit_filters(const String &p_which);
@@ -106,6 +111,11 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin {
void _filter_toggled();
Ref<AnimationNode> _filter_edit;
+ void _popup(bool p_has_input_ports, const Vector2 &p_popup_position, const Vector2 &p_node_position);
+ void _popup_request(const Vector2 &p_position);
+ void _connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position);
+ void _connection_from_empty(const String &p_to, int p_to_slot, const Vector2 &p_release_position);
+
void _property_changed(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing);
void _removed_from_graph();
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 5263352502..cae8df1193 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -265,15 +265,13 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) {
if (is_freelook_active()) {
// Higher inertia should increase "lag" (lerp with factor between 0 and 1)
// Inertia of zero should produce instant movement (lerp with factor of 1) in this case it returns a really high value and gets clamped to 1.
- real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia");
- inertia = MAX(0.001, inertia);
+ const real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia");
real_t factor = (1.0 / inertia) * p_interp_delta;
// We interpolate a different point here, because in freelook mode the focus point (cursor.pos) orbits around eye_pos
camera_cursor.eye_pos = old_camera_cursor.eye_pos.lerp(cursor.eye_pos, CLAMP(factor, 0, 1));
- real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
- orbit_inertia = MAX(0.0001, orbit_inertia);
+ const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
@@ -289,24 +287,9 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) {
camera_cursor.pos = camera_cursor.eye_pos + forward * camera_cursor.distance;
} else {
- //when not being manipulated, move softly
- real_t free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
- real_t free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia");
- //when being manipulated, move more quickly
- real_t manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia");
- real_t manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia");
-
- real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia");
-
- //determine if being manipulated
- bool manipulated = Input::get_singleton()->get_mouse_button_mask() & (2 | 4);
- manipulated |= Input::get_singleton()->is_key_pressed(KEY_SHIFT);
- manipulated |= Input::get_singleton()->is_key_pressed(KEY_ALT);
- manipulated |= Input::get_singleton()->is_key_pressed(KEY_CTRL);
-
- real_t orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia);
- real_t translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia);
- zoom_inertia = MAX(0.0001, zoom_inertia);
+ const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
+ const real_t translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia");
+ const real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia");
camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia)));
@@ -4196,7 +4179,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito
VBoxContainer *vbox = memnew(VBoxContainer);
surface->add_child(vbox);
- vbox->set_position(Point2(10, 10) * EDSCALE);
+ vbox->set_offset(SIDE_LEFT, 10 * EDSCALE);
+ vbox->set_offset(SIDE_TOP, 10 * EDSCALE);
view_menu = memnew(MenuButton);
view_menu->set_flat(false);
@@ -4820,7 +4804,7 @@ void _update_all_gizmos(Node *p_node) {
}
void Node3DEditor::update_all_gizmos(Node *p_node) {
- if (!p_node && get_tree()) {
+ if (!p_node && is_inside_tree()) {
p_node = get_tree()->get_edited_scene_root();
}
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index ee9103be44..07e4d4ebf0 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -808,39 +808,35 @@ void ScriptEditor::_copy_script_path() {
}
void ScriptEditor::_close_other_tabs() {
- int child_count = tab_container->get_child_count();
int current_idx = tab_container->get_current_tab();
- for (int i = child_count - 1; i >= 0; i--) {
- if (i == current_idx) {
- continue;
- }
-
- tab_container->set_current_tab(i);
- ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i));
-
- if (se) {
- // Maybe there are unsaved changes
- if (se->is_unsaved()) {
- _ask_close_current_unsaved_tab(se);
- continue;
- }
+ for (int i = tab_container->get_child_count() - 1; i >= 0; i--) {
+ if (i != current_idx) {
+ script_close_queue.push_back(i);
}
-
- _close_current_tab(false);
}
+ _queue_close_tabs();
}
void ScriptEditor::_close_all_tabs() {
- int child_count = tab_container->get_child_count();
- for (int i = child_count - 1; i >= 0; i--) {
- tab_container->set_current_tab(i);
- ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i));
+ for (int i = tab_container->get_child_count() - 1; i >= 0; i--) {
+ script_close_queue.push_back(i);
+ }
+ _queue_close_tabs();
+}
+
+void ScriptEditor::_queue_close_tabs() {
+ while (!script_close_queue.is_empty()) {
+ int idx = script_close_queue.front()->get();
+ script_close_queue.pop_front();
+ tab_container->set_current_tab(idx);
+ ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(idx));
if (se) {
- // Maybe there are unsaved changes
+ // Maybe there are unsaved changes.
if (se->is_unsaved()) {
_ask_close_current_unsaved_tab(se);
- continue;
+ erase_tab_confirm->connect(SceneStringNames::get_singleton()->visibility_changed, callable_mp(this, &ScriptEditor::_queue_close_tabs), varray(), CONNECT_ONESHOT);
+ break;
}
}
diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h
index 920c3070e6..7620605570 100644
--- a/editor/plugins/script_editor_plugin.h
+++ b/editor/plugins/script_editor_plugin.h
@@ -309,6 +309,7 @@ class ScriptEditor : public PanelContainer {
int history_pos;
List<String> previous_scripts;
+ List<int> script_close_queue;
void _tab_changed(int p_which);
void _menu_option(int p_option);
@@ -341,6 +342,7 @@ class ScriptEditor : public PanelContainer {
void _close_docs_tab();
void _close_other_tabs();
void _close_all_tabs();
+ void _queue_close_tabs();
void _copy_script_path();
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index ebd46be3b4..2b1ca068ee 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -1961,11 +1961,8 @@ void ScriptTextEditor::register_editor() {
ED_SHORTCUT("script_text_editor/toggle_fold_line", TTR("Fold/Unfold Line"), KEY_MASK_ALT | KEY_F);
ED_SHORTCUT("script_text_editor/fold_all_lines", TTR("Fold All Lines"), KEY_NONE);
ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), KEY_NONE);
-#ifdef OSX_ENABLED
- ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C);
-#else
ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D);
-#endif
+ ED_SHORTCUT_OVERRIDE("script_text_editor/duplicate_selection", "macos", KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C);
ED_SHORTCUT("script_text_editor/evaluate_selection", TTR("Evaluate Selection"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_E);
ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_T);
ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent to Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y);
@@ -1973,42 +1970,35 @@ void ScriptTextEditor::register_editor() {
ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I);
ED_SHORTCUT_AND_COMMAND("script_text_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F);
-#ifdef OSX_ENABLED
- ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_MASK_CMD | KEY_G);
- ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G);
- ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F);
-#else
+
ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/find_next", "macos", KEY_MASK_CMD | KEY_G);
+
ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3);
+ ED_SHORTCUT_OVERRIDE("script_text_editor/find_previous", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G);
+
ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KEY_MASK_CMD | KEY_R);
-#endif
+ ED_SHORTCUT_OVERRIDE("script_text_editor/replace", "macos", KEY_MASK_ALT | KEY_MASK_CMD | KEY_F);
ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F);
ED_SHORTCUT("script_text_editor/replace_in_files", TTR("Replace in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R);
-#ifdef OSX_ENABLED
- ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE);
-#else
ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_F1);
-#endif
+ ED_SHORTCUT_OVERRIDE("script_text_editor/contextual_help", "macos", KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE);
ED_SHORTCUT("script_text_editor/toggle_bookmark", TTR("Toggle Bookmark"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_B);
ED_SHORTCUT("script_text_editor/goto_next_bookmark", TTR("Go to Next Bookmark"), KEY_MASK_CMD | KEY_B);
ED_SHORTCUT("script_text_editor/goto_previous_bookmark", TTR("Go to Previous Bookmark"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B);
ED_SHORTCUT("script_text_editor/remove_all_bookmarks", TTR("Remove All Bookmarks"), KEY_NONE);
-#ifdef OSX_ENABLED
- ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KEY_MASK_CTRL | KEY_MASK_CMD | KEY_J);
-#else
ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F);
-#endif
+ ED_SHORTCUT_OVERRIDE("script_text_editor/goto_function", "macos", KEY_MASK_CTRL | KEY_MASK_CMD | KEY_J);
+
ED_SHORTCUT("script_text_editor/goto_line", TTR("Go to Line..."), KEY_MASK_CMD | KEY_L);
-#ifdef OSX_ENABLED
- ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B);
-#else
ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9);
-#endif
+ ED_SHORTCUT_OVERRIDE("script_text_editor/toggle_breakpoint", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B);
+
ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F9);
ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Go to Next Breakpoint"), KEY_MASK_CMD | KEY_PERIOD);
ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Go to Previous Breakpoint"), KEY_MASK_CMD | KEY_COMMA);
diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp
index 649caf5373..f024589ef1 100644
--- a/editor/settings_config_dialog.cpp
+++ b/editor/settings_config_dialog.cpp
@@ -268,7 +268,7 @@ void EditorSettingsDialog::_update_shortcuts() {
Array events; // Need to get the list of events into an array so it can be set as metadata on the item.
Vector<String> event_strings;
- List<Ref<InputEvent>> all_default_events = InputMap::get_singleton()->get_builtins().find(action_name).value();
+ List<Ref<InputEvent>> all_default_events = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(action_name).value();
List<Ref<InputEventKey>> key_default_events;
// Remove all non-key events from the defaults. Only check keys, since we are in the editor.
for (List<Ref<InputEvent>>::Element *I = all_default_events.front(); I; I = I->next()) {
@@ -404,7 +404,7 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column
switch (button_idx) {
case SHORTCUT_REVERT: {
Array events;
- List<Ref<InputEvent>> defaults = InputMap::get_singleton()->get_builtins()[current_action];
+ List<Ref<InputEvent>> defaults = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied()[current_action];
// Convert the list to an array, and only keep key events as this is for the editor.
for (const Ref<InputEvent> &k : defaults) {
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 70e016ee65..223a1b1c45 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -1057,7 +1057,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Afhanklikhede"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Hulpbron"
@@ -1720,14 +1720,14 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom debug template not found."
msgstr "Sjabloon lêer nie gevind nie:\n"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2129,7 +2129,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Her)Invoer van Bates"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Bo"
@@ -2632,6 +2632,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3271,6 +3295,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Verander Transformasie"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3519,6 +3548,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5675,6 +5708,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Verwyder Seleksie"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6614,7 +6658,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7211,6 +7259,16 @@ msgstr "Skep"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Anim Verander Transform"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Skrap"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7739,11 +7797,12 @@ msgid "Skeleton2D"
msgstr "EnkelHouer"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Laai Verstek"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7773,6 +7832,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7884,42 +7997,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8184,6 +8277,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Skep Intekening"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8249,7 +8347,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12344,6 +12442,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12633,6 +12739,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Alle Seleksie"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13123,164 +13234,153 @@ msgstr "Deursoek Hulp"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Installeer"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Laai"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Ongeldige naam."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13288,58 +13388,58 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13347,57 +13447,57 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animasie lengte (in sekondes)."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13405,21 +13505,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Vind"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Kon nie vouer skep nie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13883,6 +13983,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14176,6 +14284,14 @@ msgstr "Moet 'n geldige uitbreiding gebruik."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14216,6 +14332,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index eb11aa27b6..16cc1fd0a7 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -34,7 +34,7 @@
# Ahmed Shahwan <dev.ahmed.shahwan@gmail.com>, 2019.
# hshw <shw@tutanota.com>, 2020.
# Youssef Harmal <the.coder.crab@gmail.com>, 2020.
-# Nabeel20 <nabeelandnizam@gmail.com>, 2020.
+# Nabeel20 <nabeelandnizam@gmail.com>, 2020, 2021.
# merouche djallal <kbordora@gmail.com>, 2020.
# Airbus5717 <Abdussamadf350@gmail.com>, 2020.
# tamsamani mohamed <tamsmoha@gmail.com>, 2020.
@@ -54,12 +54,14 @@
# HASSAN GAMER - حسن جيمر <gamerhassan55@gmail.com>, 2021.
# abubakrAlsaab <madeinsudan19@gmail.com>, 2021.
# Hafid Talbi <atalbiie@gmail.com>, 2021.
+# Hareth Mohammed <harethpy@gmail.com>, 2021.
+# Mohammed Mubarak <modymu9@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-29 02:33+0000\n"
-"Last-Translator: Hafid Talbi <atalbiie@gmail.com>\n"
+"PO-Revision-Date: 2021-09-19 11:14+0000\n"
+"Last-Translator: Mohammed Mubarak <modymu9@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -68,7 +70,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -416,13 +418,11 @@ msgstr "إدخال حركة"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "لا يمكن فتح '%s'."
+msgstr "العقدة (node) '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "رسوم متحركة"
@@ -432,9 +432,8 @@ msgstr "اللأعب المتحرك لا يستطيع تحريك نفسه ,فق
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "لا خاصية '%s' موجودة."
+msgstr "الخاصية '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -662,9 +661,8 @@ msgid "Use Bezier Curves"
msgstr "إستعمل منحنيات بيزر"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "لصق المقاطع"
+msgstr "إنشاء مسار/ات إعادة التعيين (RESET)"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -1009,7 +1007,7 @@ msgstr "لا نتائج من أجل \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "ليس هناك وصف مناسب لأجل s%."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1069,7 +1067,7 @@ msgstr ""
msgid "Dependencies"
msgstr "التبعيات"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "مورد"
@@ -1304,36 +1302,32 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)."
msgstr "حدث خطأ عندفتح ملف الحزمة بسبب أن الملف ليس في صيغة \"ZIP\"."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (موجود بالفعل!)"
+msgstr "%s (موجود بالفعل)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "تتعارض محتويات المصدر \"%s\" - من الملف(ات) %d مع مشروعك:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "محتويات المصدر \"%s\" - لا تتعارض مع مشروعك:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "يفكك الضغط عن الأصول"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "فشل استخراج الملفات التالية من الحزمة:"
+msgstr "فشل استخراج الملفات التالية من الحزمة \"٪ s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "و %s أيضاً من الملفات."
+msgstr "و %s ملف أكثر."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "تم تتبيث الحزمة بنجاح!"
+msgstr "تم تثبيت الحزمة \"%s\" بنجاح!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1345,7 +1339,6 @@ msgid "Install"
msgstr "تثبيت"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
msgstr "مثبت الحزم"
@@ -1410,9 +1403,8 @@ msgid "Bypass"
msgstr "تخطي"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "إعدادات مسار الصوت"
+msgstr "‎خيارات مسار الصوت (BUS)"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1578,13 +1570,12 @@ msgid "Can't add autoload:"
msgstr "لا يمكن إضافة التحميل التلقائي:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "الملف غير موجود."
+msgstr "%s مسار غير صالح. الملف غير موجود."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "المسار %s غير صالح. غير موجود في مسار الموارد (//:res)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1608,9 +1599,8 @@ msgid "Name"
msgstr "الأسم"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "إعادة تسمية المُتغيّر"
+msgstr "مُتغيّر عام (Global Variable)"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1734,13 +1724,13 @@ msgstr ""
"مَكِّن 'استيراد Etc' في إعدادات المشروع، أو عطّل 'تمكين التوافق الرجعي للتعريفات "
"Driver Fallback Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "نمودج تصحيح الأخطاء غير موجود."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1784,35 +1774,37 @@ msgstr "رصيف الاستيراد"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "يسمح لعرض وتحرير المشاهد ثلاثية الأبعاد."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "يسمح بتحرير النصوص البرمجية عن طريق المحرر المدمج."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "يؤمن وصول لمكتبة الملحقات من داخل المحرر."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "يسمح بتحرير تراتبية العقد عن طريق رصيف المشهد."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr ""
+msgstr "يسمح بالعمل مع إشارات ومجموعات العقد المحددة في رصيف المشهد."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "يسمح بتصفح ملفات النظام المحلية عن طريق رصيف خاص بذلك."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"يسمح بتحديد خصائص الاستيراد المتعلقة بالوسائط على حدى. يتطلب عمله رصيف "
+"الملفات."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1821,11 +1813,11 @@ msgstr "(الحالي)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(لاشيء)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "أترغب بإزالة الملف المحدد '%s'؟ لا يمكنك التراجع عن ذلك."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1856,19 +1848,16 @@ msgid "Enable Contextual Editor"
msgstr "مكّن المحرر السياقي Contextual"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "خصائص:"
+msgstr "خصائص الفئة (Class):"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "المزايا"
+msgstr "المزايا الرئيسية:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "الصفوف المُمكّنة:"
+msgstr "العُقد (Nodes) والفئات (Classes):"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1885,9 +1874,8 @@ msgid "Error saving profile to path: '%s'."
msgstr "خطأ في حفظ الملف إلى المسار: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "اعادة التعيين للإفتراضيات"
+msgstr "إعادة التعيين إلى الافتراضي"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
@@ -1932,7 +1920,7 @@ msgstr "إعدادات الصف (Class):"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
-msgstr ""
+msgstr "أنشئ أو استورد ملفاً لتحرير الصفوف والخصائص المتوفرة."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -2120,7 +2108,7 @@ msgstr "هناك عدة مستوردات مخصوصة لعدة أنواع حدد
msgid "(Re)Importing Assets"
msgstr "إعادة إستيراد الأصول"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "فوق"
@@ -2357,6 +2345,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"يدور عندما يعاد رسم نافذة المحرر.\n"
+"التحديث المستمر ممكن، الأمر الذي يعني استهلاك أكبر للطاقة. اضغط لإزالة "
+"التمكين."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2590,6 +2581,8 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"المشهد الحالي لا يملك عقدة رئيسة، ولكن %d عدّل المصدر(مصادر) خارجياً وتم الحفظ "
+"عموما."
#: editor/editor_node.cpp
#, fuzzy
@@ -2627,6 +2620,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "لم يتم حفظ المشهد الحالي. إفتحه علي أية حال؟"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "تراجع"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "إعادة تراجع"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "لا يمكن إعادة تحميل مشهد لم يتم حفظه من قبل."
@@ -3144,7 +3163,7 @@ msgstr "فتح الوثائق"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "أسئلة وإجابات"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3152,7 +3171,7 @@ msgstr "إرسال تقرير عن خلل برمجي"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "اقترح ميزة"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3257,14 +3276,12 @@ msgid "Manage Templates"
msgstr "إدارة القوالب"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "تثبيت من ملف"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "حدد مصدر ميش:"
+msgstr "تحديد مصدر ملفات الاندرويد"
#: editor/editor_node.cpp
msgid ""
@@ -3276,8 +3293,8 @@ msgid ""
"the \"Use Custom Build\" option should be enabled in the Android export "
"preset."
msgstr ""
-"بهذه الطريقة سيتم إعداد المشروع الخاص بك لأجل نسخ بناء أندريد مخصوصة عن طريق "
-"تنزيل قوالب المصدر البرمجي في \"res://android/build\".\n"
+"بهذه الطريقة سيتم إعداد المشروع الخاص بك لأجل نسخ بناء أندرويد مخصص عن طريق "
+"تثبيت قوالب المصدر البرمجي في \"res://android/build\".\n"
"يمكنك تطبيق تعديلات الخاصة على نسخة البناء للحصول على حزمة تطبيق أندرويد APK "
"معدّلة عند التصدير (زيادة مُلحقات، تعديل ملف AndroidManifest.xml إلخ..).\n"
"ضع في بالك أنه من أجل إنشاء نسخ بناء مخصوصة بدلاً من الحزم APKs المبنية سلفاً، "
@@ -3291,7 +3308,7 @@ msgid ""
"Remove the \"res://android/build\" directory manually before attempting this "
"operation again."
msgstr ""
-"إن قالب البناء الخاص بالأندرويد تم تنزيله سلفاً لأجل هذا المشروع ولا يمكنه "
+"قالب البناء الخاص بالأندرويد تم تنزيله سلفاً لأجل هذا المشروع ولا يمكنه "
"الكتابة فوق البيانات السابقة.\n"
"قم بإزالة \"res://android/build\" يدوياً قبل الشروع بهذه العملية مرة أخرى."
@@ -3312,6 +3329,11 @@ msgid "Merge With Existing"
msgstr "دمج مع الموجود"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "تحويل تغيير التحريك"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "فتح و تشغيل كود"
@@ -3348,7 +3370,7 @@ msgstr "حدد"
#: editor/editor_node.cpp
#, fuzzy
msgid "Select Current"
-msgstr "تحديد المجلد الحالي"
+msgstr "تحديد الحالي"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3383,9 +3405,8 @@ msgid "No sub-resources found."
msgstr "لا مصدر للسطح تم تحديده."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "لا مصدر للسطح تم تحديده."
+msgstr "فتح قائمة الموارد الفرعية."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3412,14 +3433,13 @@ msgid "Update"
msgstr "تحديث"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "النسخة:"
+msgstr "الإصدار"
#: editor/editor_plugin_settings.cpp
#, fuzzy
msgid "Author"
-msgstr "المالكون"
+msgstr "المالك"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3434,12 +3454,12 @@ msgstr "قياس:"
#: editor/editor_profiler.cpp
#, fuzzy
msgid "Frame Time (ms)"
-msgstr "وقت الاطار (ثانية)"
+msgstr "وقت الاطار (ميلي ثانية)"
#: editor/editor_profiler.cpp
#, fuzzy
msgid "Average Time (ms)"
-msgstr "متوسط الوقت (ثانية)"
+msgstr "متوسط الوقت (ميلي ثانية)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3567,6 +3587,10 @@ msgid ""
msgstr ""
"يلا يتطابق نوع المورد المختار (%s) مع أي نوع متوقع لأجل هذه الخاصية (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "إجعلة مميزاً"
@@ -3660,11 +3684,11 @@ msgstr "إستيراد من عقدة:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "افتح المجلد الحاوي هذه القوالب."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "إزالة تثبيت هذه القوالب."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3678,7 +3702,7 @@ msgstr "يستقبل المرايا، من فضلك إنتظر..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "الشروع بالتنزيل..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -3721,7 +3745,7 @@ msgstr "فشل الطلب."
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "اكتمل التحميل؛ استخراج القوالب..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3748,7 +3772,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "أفضل بديل متوافر"
#: editor/export_template_manager.cpp
msgid ""
@@ -3847,11 +3871,11 @@ msgstr "النسخة الحالية:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
-msgstr ""
+msgstr "قوالب التصدير مفقودة. حمّلها أو نصبّها من ملف."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "تم تنصيب قوالب التصدير وهي جاهزة للاستعمال."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3860,7 +3884,7 @@ msgstr "افتح الملف"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "افتح المجلد الحاوي على القوالب المنصبة بالنسبة للإصدار الحالي."
#: editor/export_template_manager.cpp
msgid "Uninstall"
@@ -3888,13 +3912,13 @@ msgstr "خطأ في نسخ"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "حمّل ونصّب"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
-msgstr ""
+msgstr "حمّل ونصّب قوالب الإصدار الحالي من أفضل مصدر متوفر."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -3943,6 +3967,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"ستستمر القوالب بالتحميل.\n"
+"ربما تلاحظ تجمداً بسيطاً بالمحرر عندما ينتهي تحميلهم."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4088,19 +4114,19 @@ msgstr "بحث الملفات"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "صنف وفقا للاسم (تصاعدياً)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "صنف وفقاً للاسم (تنازلياً)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "صنّف وفقاً للنوع (تصاعدياً)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "صنّف وفقاً للنوع (تنازلياً)"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -4122,7 +4148,7 @@ msgstr "إعادة تسمية..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "حدد صندوق البحث"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -5484,11 +5510,11 @@ msgstr "الكل"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "ابحث في القوالب، والمشاريع والنماذج"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "ابحث في الوسائط (عدا القوالب، والمشاريع، والنماذج)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5532,7 +5558,7 @@ msgstr "ملف أصول مضغوط"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "معاينة الصوت شغّل/أوقف"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
#, fuzzy
@@ -5696,6 +5722,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "تحريك العنصر القماشي"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "حُدد القفل"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "المجموعات"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5805,11 +5843,14 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid ""
"Project Camera Override\n"
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"تجاوز كاميرا المشروع.\n"
+"ليس هناك مشروع يعمل حالياً. شغل المشروع من المحرر لاستعمال هذه الميزة."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5899,7 +5940,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "زر-الفأرة-الأيمن: ضف العقد عند موقع الضغط."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6159,15 +6200,15 @@ msgstr "إظهار شامل"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "التكبير حتى 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "التكبير حتى 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "التكبير حتى 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6201,7 +6242,7 @@ msgstr "تصغير"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "التكبير حتى 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6331,7 +6372,7 @@ msgstr "السطح 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "السطح 1"
+msgstr "المستوى 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -6639,7 +6680,13 @@ msgid "Remove Selected Item"
msgstr "مسح العنصر المحدد"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "إستيراد من المشهد"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "إستيراد من المشهد"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7239,6 +7286,16 @@ msgstr "عدد النقاط المولدة:"
msgid "Flip Portal"
msgstr "القلب أفقياً"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "محو التَحَوّل"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "إنشاء عقدة"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "لا تملك شجرة الرسومات المتحركة مساراً لمشغل الرسومات المتحركة"
@@ -7740,12 +7797,14 @@ msgid "Skeleton2D"
msgstr "هيكل ثنائي البُعد"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "إنشاء وضعية الراحة (من العظام)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "تحديد العظام لتكون في وضعية الراحة"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "تحديد العظام لتكون في وضعية الراحة"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "الكتابة المُتراكبة Overwrite"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7772,6 +7831,71 @@ msgid "Perspective"
msgstr "منظوري"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "منظوري"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "منظوري"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "منظوري"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "منظوري"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "متعامد"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "منظوري"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "أجهض التحول."
@@ -7879,7 +8003,7 @@ msgstr "القمم"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s جزء من الثانية)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7890,42 +8014,22 @@ msgid "Bottom View."
msgstr "الواجهة السفلية."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "الأسفل"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "الواجهة اليُسرى."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "اليسار"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "الواجهة اليُمنى."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "اليمين"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "الواجهة الأمامية."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "الأمام"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "الواجهة الخلفية."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "الخلف"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "محاذاة التحوّل مع الواجهة"
@@ -8200,6 +8304,11 @@ msgid "View Portal Culling"
msgstr "إعدادات إطار العرض"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "إعدادات إطار العرض"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "اعدادات..."
@@ -8265,8 +8374,9 @@ msgid "Post"
msgstr "لاحق"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "أداة (gizmo) غير مسماة"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "مشروع غير مسمى"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8542,7 +8652,7 @@ msgstr "الأسلوب"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} لون (ألوان)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8561,7 +8671,7 @@ msgstr "ثابت اللون."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} خط (خطوط)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8570,7 +8680,7 @@ msgstr "لم يوجد!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} أيقونة (أيقونات)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8588,11 +8698,11 @@ msgstr "لا مصدر للسطح تم تحديده."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} المختارة حالياً"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "لم يتم اختيار شيء لأجل عملية الاستيراد."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8601,7 +8711,7 @@ msgstr "استيراد الموضوع Theme"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "استيراد العناصر {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8620,7 +8730,7 @@ msgstr "تنقيات:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "مع البيانات"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8629,15 +8739,15 @@ msgstr "اختر عُقدة"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items."
-msgstr ""
+msgstr "اختيار جميع العناصر اللونية المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "اختر جميع العناصر المرئية الملونة والبيانات المتعلقة بها."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "أزل اختيار العناصر الملونة المرئية."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8646,11 +8756,11 @@ msgstr "اختر عنصر إعدادات بدايةً!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "اختر جميع العناصر الثابتة المرئية والبيانات المتعلقة بها."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "أزل اختيار العناصر الثابتة المرئية."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8659,11 +8769,11 @@ msgstr "اختر عنصر إعدادات بدايةً!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "اختر جميع عناصر الخط المرئية والبيانات المتعلقة بها."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "أزل اختيار جميع عناصر الخط المرئية."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8682,21 +8792,23 @@ msgstr "اختر عنصر إعدادات بدايةً!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "اختر جميع عناصر صندوق المظهر المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "اختر جميع عناصر صندوق المصدر المرئية والبيانات المتعلقة بها."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "أزل اختيار جميع عناصر صندوق المظهر المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"تحذير: إن إضافة بيانات الأيقونة من الممكن أن تزيد حجم مورد الثيم الخاص بك "
+"بصورة معتبرة."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8720,7 +8832,7 @@ msgstr "إختر النقاط"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "اختر جميع عناصر الثيم والبيانات المتعلقة بهم."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8729,7 +8841,7 @@ msgstr "تحديد الكل"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "أزل اختيار جميع عناصر الثيم."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8742,12 +8854,17 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
+"تبويب استيراد العناصر يحوي عناصر مختارة. بإغلاقك النافذة ستخسر جميع العناصر "
+"المختارة.\n"
+"الإغلاق على أية حال؟"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"اختر نوعاً للثيم من القائمة جانباً لتحرير عناصره.\n"
+"يمكنك إضافة نوع خاص أو استيراد نوع آخر مترافق من عناصره من ثيم آخر."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8784,6 +8901,8 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"نوع الثيم هذا فارغ.\n"
+"ضف المزيد من العناصر يدوياً أو عن طريق استيرادها من ثيم آخر."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8842,7 +8961,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "ملف غير صالح، مماثل لمصدر الثيم المحرر."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8938,29 +9057,28 @@ msgid "Cancel Item Rename"
msgstr "إعادة تسمية الدفعة"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "يتجاوز"
+msgstr "تجاوز العنصر"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "أزل تثبيت صندوق المظهر هذا على أنه المظهر الرئيس."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"ثبّت صندوق المظهر هذا ليكون المظهر الرئيس. تحرير خاصياته سيحدث جميع الخاصيات "
+"المشابهة في جميع صناديق المظهر من هذا النوع."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "النوع"
+msgstr "إضافة نوع"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "إضافة عنصر"
+msgstr "إضافة نوع للعنصر"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8974,7 +9092,7 @@ msgstr "تحميل الإفتراضي"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
-msgstr ""
+msgstr "أظهر عناصر النمط الافتراضي إلى جانب العناصر التي تم تجاوزها."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8983,7 +9101,7 @@ msgstr "يتجاوز"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "تجاوز جميع أنواع العناصر الافتراضية."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8997,7 +9115,7 @@ msgstr "إدارة قوالب التصدير..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "أضف، أزل، رتّب واستورد عناصر القالب."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9018,7 +9136,7 @@ msgstr "حدد مصدر ميش:"
msgid ""
"Toggle the control picker, allowing to visually select control types for "
"edit."
-msgstr ""
+msgstr "فعّل مُختار التحديد، مما يسمح لك باختيار أنواع التحديد بصرياً لتحريرها."
#: editor/plugins/theme_editor_preview.cpp
msgid "Toggle Button"
@@ -9108,10 +9226,13 @@ msgstr "يمتلك، خيارات، عديدة"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"مسار غير صالح، غالباً مصدر المشهد الموضب PackedScene قد تمت إزالته أو نقله."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
+"مصدر للمشهد الموضب PackedScene غير صالح، يجب أن يملك عقدة تحكم Control node "
+"كعقدة رئيسة."
#: editor/plugins/theme_editor_preview.cpp
#, fuzzy
@@ -9120,7 +9241,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "أعد تحميل المشهد لإظهار الشكل الأقرب لحالته."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -11086,7 +11207,7 @@ msgstr "مسح الكل"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "كذلك ستحذف محتويات المشروع (لا تراجع!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11122,7 +11243,7 @@ msgstr "زر "
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "الزر الفيزيائي"
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11170,7 +11291,7 @@ msgstr "الجهاز"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (فيزيائي)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11772,13 +11893,13 @@ msgstr "حذف العقدة \"%s\"؟"
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
-msgstr ""
+msgstr "يتطلب حفظ المشهد كفرع وجود مشهد مفتوح في المحرر."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
-msgstr ""
+msgstr "يتطلب حفظ المشهد كفرع اختيارك عقدة واحدة فقط، ولكنك اخترت %d من العقد."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11787,6 +11908,10 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"فشلت عملية حفظ العقدة الرئيسة كفرع في المشهد الموروث instanced scene.\n"
+"لإنشاء نسخة قابلة للتحرير من المشهد الحالي، ضاعف المشهد مستخدماً قائمة رصيف "
+"الملفات FileSystem\n"
+"أو أنشئ مشهداً موروثاً مستعملاً مشهد > مشهد موروث جديد... بدلاً عما قمت بفعله."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11794,6 +11919,9 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"لا يمكن حفظ الفرع باستخدام مشهد منسوخ أساساً.\n"
+"لإنشاء تعديلة عن المشهد، يمكنك إنشاء مشهد موروث عن مشهد منسوخ مستخدماً مشهد > "
+"مشهد جديد موروث… بدلاً عن ذلك."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12199,6 +12327,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"تحذير: من غير المستحسن امتلاك النص البرمجي اسماً مماثلاً للأنواع المشابهة "
+"المدمجة بالمحرر."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12270,7 +12400,7 @@ msgstr "خطأ في نسخ"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "افتح مصدر ++C على GitHub"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12459,6 +12589,16 @@ msgstr "حدد موقع نقطة الإنحناء"
msgid "Set Portal Point Position"
msgstr "حدد موقع نقطة الإنحناء"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "تعديل نصف قطر الشكل الأسطواني"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "ضع الإنحناء في الموقع"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "تغيير نصف قطر الاسطوانة"
@@ -12748,6 +12888,11 @@ msgstr "تخطيط الإضاءات"
msgid "Class name can't be a reserved keyword"
msgstr "لا يمكن أن يكون اسم الصف كلمة محجوزة"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "تعبئة المُحدد"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "نهاية تتبع مكدس الاستثناء الداخلي"
@@ -13230,144 +13375,151 @@ msgstr "بحث VisualScript"
msgid "Get %s"
msgstr "جلب %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "اسم الرُزمة مفقود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "أقسام الرُزمة ينبغي أن تكون ذات مسافات غير-صفرية non-zero length."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "إن الحرف '%s' غير مسموح في أسماء حِزم تطبيقات الأندرويد."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "لا يمكن أن يكون الرقم هو أول حرف في مقطع الرُزمة."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "الحرف '%s' لا يمكن أن يكون الحرف الأول من مقطع الرُزمة."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "يجب أن تتضمن الرزمة على الأقل واحد من الفواصل '.' ."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "اختر جهازاً من القائمة"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "يعمل على %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "تصدير الكُل"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "إلغاء التثبيت"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "يستقبل المرايا، من فضلك إنتظر..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "لا يمكن بدء عملية جانبية!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "تشغيل النص البرمجي المُخصص..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "لا يمكن إنشاء المجلد."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "تعذر العثور على أداة توقيع تطبيق اندرويد\"apksigner\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
"لم يتم تنزيل قالب بناء Android لهذا المشروع. نزّل واحداً من قائمة المشروع."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
+"إما أن يتم يتكوين مفتاح-المتجر للتنقيح البرمجي debug keystore، أو إعدادات "
+"ملف وكلمة مرور التنقيح البرمجي سويةً debug user AND debug password، أو لاشيء "
+"مما سبق."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"مُنقح أخطاء مفتاح المتجر keystore غير مُهيئ في إعدادت المُحرر أو في الإعدادات "
"الموضوعة سلفاً."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
+"إم أن يتم تكوين إعدادات مفتاح التصدير release keystore، أو ملف وكلمة مرور "
+"التصدير سوية Release User AND Release Password، أو من دونهم جميعاً."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "تحرر مخزن المفاتيح غير مُهيئ بشكل صحيح في إعدادت المسبقة للتصدير."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
-msgstr ""
+msgstr "دليل ملفات \"أدوات-المنصة platform-tools\" مفقود!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
-msgstr ""
+msgstr "تعذر العثور على أمر adb الخاص بأدوات النظام الأساسي لـ Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
-msgstr ""
+msgstr "ملف \"أدوات البناء\"build-tools مفقود!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
+"تعذر العثور على أمر أدوات البناء الخاص بالأندرويد Android SDK build-tools "
+"الخاص بتوقيع ملف apk (apksigner)."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "مفتاح عام غير صالح لأجل تصدير حزمة تطبيق أندرويد APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "اسم رُزمة غير صالح:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13375,95 +13527,87 @@ msgstr ""
"وحدة \"GodotPaymentV3\" المضمنة في إعدادات المشروع \"android / modules\" غير "
"صالحة (تم تغييره في Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "يجب تفعيل \"Use Custom Build\" لإستخدام الإضافات."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو "
-"\"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus "
"Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"يصبح خيار \"تصدير ABB\" صالحاً فقط عندما يتم اختيار \"استعمال تصدير مخصص "
+"Custom Build\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"تعذر العثور على 'apksigner'.\n"
+"تأكد من فضلك إن كان الأمر موجوداً في دليل ملفات أدوات-بناء الأندرويد Android "
+"SDK build-tools.\n"
+"لم يتم توقيع الناتج %s."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "يتم توقيع نسخة التنقيح البرمجي %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"يفحص الملفات،\n"
"من فضلك إنتظر..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "لا يمكن فتح القالب من أجل التصدير:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "أعاد 'apksigner' الخطأ التالي #%d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "إضافة %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "فشلت عملية توثيق 'apksigner' ل %s."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "تصدير الكُل"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"اسم ملف غير صالح! تتطلب حزمة تطبيق الأندرويد Android App Bundle لاحقة *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "توسيع APK غير متوافق مع حزمة تطبيق الأندرويد Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr ""
+msgstr "إسم ملف غير صالح! يتطلب ملف APK اللاحقة ‭*.apk"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "صيغة تصدير غير مدعومة!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13471,7 +13615,7 @@ msgstr ""
"تتم محاولة البناء من قالب بناء مُخصص، ولكن لا تتواجد معلومات النسخة. من فضلك "
"أعد التحميل من قائمة \"المشروع\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13483,26 +13627,27 @@ msgstr ""
"\tإصدار غودوت: %s\n"
"من فضلك أعد تنصيب قالب بناء الأندرويد Android من قائمة \"المشروع\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"تعذرت كتابة overwrite ملفات res://android/build/res/*.xml مع اسم المشروع"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "لا قدرة على تحرير project.godot في مسار المشروع."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "لا يمكن كتابة الملف:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "بناء مشروع الأندرويد (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13510,58 +13655,61 @@ msgstr ""
"أخفق بناء مشروع الأندرويد، تفقد المُخرجات للإطلاع على الخطأ.\n"
"بصورة بديلة يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
-msgstr ""
+msgstr "نقل المخرجات"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
-msgstr ""
+msgstr "تعذر نسخ وإعادة تسمية الملف المصدر، تفقد ملف مشروع gradle للمخرجات."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "لم يتم إيجاد الرسم المتحرك: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "إنشاء المحيط..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "لا يمكن فتح القالب من أجل التصدير:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.\n"
+"ابن قالب التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات "
+"الناقصة من خيارات التصدير المعدّة مسبقاً."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "إضافة %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "لا يمكن كتابة الملف:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "محاذاة ملف APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "تعذر إزالة ضغط ملف APK المؤقت غير المصفوف unaligned."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
@@ -13636,19 +13784,19 @@ msgstr "مُحدد غير صالح:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "التوثيق: إن توقيع الشفرة البرمجية مطلوب."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "التوثيق: إن تمكين وقت التشغيل hardened runtime مطلوب."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "التوثيق: لم يتم تحديد اسم معرف Apple ID."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "التوثيق: لم يتم تحديد كلمة مرور Apple ID."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -13751,10 +13899,14 @@ msgstr ""
#: scene/2d/collision_polygon_2d.cpp
msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode."
msgstr ""
+"مضلع غير صالح. يتطلب الأمر 3 نقاط على الأقل في نمط بناء \"المواد الصلبة "
+"Solids\"."
#: scene/2d/collision_polygon_2d.cpp
msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode."
msgstr ""
+"مضلع غير صالح. يتطلب الأمر على الأقل نقطتين في نمط البناء \"المتجزئ Segments"
+"\"."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -13798,22 +13950,25 @@ msgstr ""
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be PhysicsBody2Ds"
msgstr ""
+"يجب على العقدة A والعقدة B أن يكونا PhysicsBody2Ds (جسم فيزيائي ثنائي البُعد)"
#: scene/2d/joints_2d.cpp
msgid "Node A must be a PhysicsBody2D"
-msgstr ""
+msgstr "يجب أن تكون العقدة A من النوع PhysicsBody2D (جسم فيزيائي ثنائي البُعد)"
#: scene/2d/joints_2d.cpp
msgid "Node B must be a PhysicsBody2D"
-msgstr ""
+msgstr "يجب أن تكون العقدة B من النوع PhysicsBody2D (جسم فيزيائي ثنائي البُعد)"
#: scene/2d/joints_2d.cpp
msgid "Joint is not connected to two PhysicsBody2Ds"
msgstr ""
+"إن المفصل غير متصل مع اثنين من PhysicsBody2Ds (الأجسام الفيزيائية ثنائية "
+"البعد)"
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be different PhysicsBody2Ds"
-msgstr ""
+msgstr "على العقدة A وكذلك العقدة B أن يكونا PhysicsBody2Ds مختلفين"
#: scene/2d/light_2d.cpp
msgid ""
@@ -13979,7 +14134,7 @@ msgstr ""
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
-msgstr ""
+msgstr "إيجاد السطوح meshes والأضواء"
#: scene/3d/baked_lightmap.cpp
msgid "Preparing geometry (%d/%d)"
@@ -14115,6 +14270,14 @@ msgstr ""
"يجب أن يكون نموذج-مجسم-التنقل (NavigationMeshInstance) تابعًا أو حفيدًا لعقدة "
"التنقل (Navigation node). انه يوفر فقط بيانات التنقل."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14442,6 +14605,14 @@ msgstr "يجب أن يستخدم صيغة صحيحة."
msgid "Enable grid minimap."
msgstr "تفعيل الخريطة المصغرة للشبكة."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14492,6 +14663,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "ينبغي أن يكون حجم إطار العرض أكبر من 0 ليتم الإخراج البصري لأي شيء."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14543,6 +14718,41 @@ msgstr "التعين للإنتظام."
msgid "Constants cannot be modified."
msgstr "لا يمكن تعديل الثوابت."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "إنشاء وضعية الراحة (من العظام)"
+
+#~ msgid "Bottom"
+#~ msgstr "الأسفل"
+
+#~ msgid "Left"
+#~ msgstr "اليسار"
+
+#~ msgid "Right"
+#~ msgstr "اليمين"
+
+#~ msgid "Front"
+#~ msgstr "الأمام"
+
+#~ msgid "Rear"
+#~ msgstr "الخلف"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "أداة (gizmo) غير مسماة"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو "
+#~ "\"Oculus Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو "
+#~ "\"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "محتويات الرزمة:"
diff --git a/editor/translations/az.po b/editor/translations/az.po
index 6c07f98d38..1965e41921 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -4,18 +4,19 @@
# This file is distributed under the same license as the Godot source code.
#
# Jafar Tarverdiyev <cefertarverdiyevv@gmail.com>, 2021.
+# Lucifer25x <umudyt2006@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2021-05-14 11:20+0000\n"
-"Last-Translator: Jafar Tarverdiyev <cefertarverdiyevv@gmail.com>\n"
+"PO-Revision-Date: 2021-09-16 14:36+0000\n"
+"Last-Translator: Lucifer25x <umudyt2006@gmail.com>\n"
"Language-Team: Azerbaijani <https://hosted.weblate.org/projects/godot-engine/"
"godot/az/>\n"
"Language: az\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -402,8 +403,9 @@ msgstr "AnimationPlayer özünü canlandıra bilməz, yalnız digər playerlər.
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "property '%s'"
-msgstr ""
+msgstr "özəllik '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -497,7 +499,7 @@ msgstr "Animasya Köçürmə Açarları"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "Pano boşdur!"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -621,7 +623,7 @@ msgstr "Əvvəlki addıma keç"
#: editor/animation_track_editor.cpp
msgid "Apply Reset"
-msgstr ""
+msgstr "Sıfırla"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -990,11 +992,11 @@ msgstr "Yeni %s yarat"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "\"%s\" üçün nəticə yoxdur."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "%s üçün heç bir təsvir yoxdur."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1054,7 +1056,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Asılılıqlar"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Mənbə"
@@ -1189,7 +1191,7 @@ msgstr "Godot topluluğundan təşəkkürlər!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Kopyalamaq üçün vurun."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1287,20 +1289,24 @@ msgid "Licenses"
msgstr "Lisenziyalar"
#: editor/editor_asset_installer.cpp
+#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr ""
+msgstr "\"%S\" üçün aktiv faylını açarkən xəta oldu (ZIP formatında deyil)."
#: editor/editor_asset_installer.cpp
msgid "%s (already exists)"
-msgstr ""
+msgstr "%s (artıq mövcuddur)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"\" %S\" aktivinin məzmunu - %d fayl(lar) layihənizlə ziddiyyət təşkil edir:"
#: editor/editor_asset_installer.cpp
+#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"\"%s\" aktivinin məzmunu - Layihənizlə heç bir fayl ziddiyyət təşkil etmir:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1321,11 +1327,11 @@ msgstr ""
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr ""
+msgstr "Uğur!"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
-msgstr ""
+msgstr "Quraşdır"
#: editor/editor_asset_installer.cpp
msgid "Asset Installer"
@@ -1385,7 +1391,7 @@ msgstr ""
#: editor/editor_audio_buses.cpp
msgid "Mute"
-msgstr ""
+msgstr "Səssiz"
#: editor/editor_audio_buses.cpp
msgid "Bypass"
@@ -1697,13 +1703,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2075,7 +2081,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2553,6 +2559,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3176,6 +3206,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animasya transformasiyasını dəyiş"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3418,6 +3453,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5462,6 +5501,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6367,7 +6416,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6953,6 +7006,14 @@ msgstr "Bezier Nöqtələrini Köçür"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7447,11 +7508,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7479,6 +7540,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7586,42 +7701,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7883,6 +7978,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7948,7 +8047,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11854,6 +11953,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12135,6 +12242,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12603,159 +12714,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12763,57 +12863,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12821,54 +12921,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12876,19 +12976,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13338,6 +13438,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13627,6 +13735,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13667,6 +13783,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index 3045c7b781..7aab99c847 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-03-10 22:14+0000\n"
+"PO-Revision-Date: 2021-09-20 14:46+0000\n"
"Last-Translator: Любомир Василев <lyubomirv@gmx.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/bg/>\n"
@@ -26,7 +26,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -377,15 +377,13 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Избиране на всичко"
+msgstr "възел „%s“"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Анимация"
+msgstr "анимация"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -393,9 +391,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Свойство"
+msgstr "свойство „%s“"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -610,9 +607,8 @@ msgid "Use Bezier Curves"
msgstr ""
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Поставяне на пътечки"
+msgstr "Създаване на пътечка/и за НУЛИРАНЕ"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -933,9 +929,8 @@ msgid "Edit..."
msgstr "Редактиране..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Преминаване към метода"
+msgstr "Към метода"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1011,7 +1006,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Зависимости"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1051,14 +1046,14 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)\n"
-"Ще можете да ги откриете в кошчето, ако искате да ги възстановите."
+"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо.)\n"
+"Според настройката на файловата Ви система, файловете ще бъдат или "
+"преместени в кошчето, или окончателно изтрити."
#: editor/dependency_editor.cpp
msgid ""
@@ -1237,9 +1232,8 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)."
msgstr ""
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Вече съществува)"
+msgstr "%s (вече съществува)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
@@ -1254,16 +1248,12 @@ msgid "Uncompressing Assets"
msgstr "Разархивиране на ресурсите"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr ""
-"Следните файлове са по-нови на диска.\n"
-"Кое действие трябва да се предприеме?:"
+msgstr "Следните файлове не успяха да бъдат изнесени от материала „%s“:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "И още %s файл(а)."
+msgstr "(и още %s файла)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
@@ -1279,9 +1269,8 @@ msgid "Install"
msgstr "Инсталиране"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Инсталиране"
+msgstr "Инсталатор на ресурси"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1344,7 +1333,6 @@ msgid "Bypass"
msgstr ""
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
msgstr "Настройки на шината"
@@ -1541,9 +1529,8 @@ msgid "Name"
msgstr ""
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Преименуване на променливата"
+msgstr "Глобална променлива"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1651,13 +1638,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1772,18 +1759,16 @@ msgid "Enable Contextual Editor"
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Свиване на всички свойства"
+msgstr "Свойства на класа:"
#: editor/editor_feature_profile.cpp
msgid "Main Features:"
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Включени класове:"
+msgstr "Възли и класове:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1800,7 +1785,6 @@ msgid "Error saving profile to path: '%s'."
msgstr "Грешка при запазването на профила в: „%s“."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
msgstr "Връщане на стандартните настройки"
@@ -1809,14 +1793,12 @@ msgid "Current Profile:"
msgstr "Текущ профил:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Изтриване на профила"
+msgstr "Създаване на профил"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Премахване на плочката"
+msgstr "Изтриване на профила"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1836,14 +1818,12 @@ msgid "Export"
msgstr "Изнасяне"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Текущ профил:"
+msgstr "Настройка на избрания профил:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Настройки на класа:"
+msgstr "Допълнителни настройки:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1874,7 +1854,6 @@ msgid "Select Current Folder"
msgstr "Избиране на текущата папка"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "Файлът съществува. Искате ли да го презапишете?"
@@ -2035,7 +2014,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Повторно) внасяне на ресурсите"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2513,6 +2492,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Текущата сцена не е запазена. Отваряне въпреки това?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Сцена, която никога не е била запазвана, не може да бъде презаредена."
@@ -2589,14 +2592,14 @@ msgid "Unable to load addon script from path: '%s'."
msgstr "Не може да се зареди добавката-скрипт от: „%s“."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s'. This might be due to a code "
"error in that script.\n"
"Disabling the addon at '%s' to prevent further errors."
msgstr ""
-"Не може да се зареди добавката-скрипт от: „%s“. Изглежда има грешка в кода. "
-"Моля, проверете синтаксиса."
+"Не може да се зареди добавката-скрипт от: „%s“. Възможно е да има грешка в "
+"кода.\n"
+"Добавката „%s“ ще бъде изключена, за да се предотвратят последващи проблеми."
#: editor/editor_node.cpp
msgid ""
@@ -2861,9 +2864,8 @@ msgid "Orphan Resource Explorer..."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Преименуване на проекта"
+msgstr "Презареждане на текущия проект"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3001,9 +3003,8 @@ msgid "Help"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Отваряне на документацията"
+msgstr "Документация в Интернет"
#: editor/editor_node.cpp
msgid "Questions & Answers"
@@ -3026,9 +3027,8 @@ msgid "Community"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Относно"
+msgstr "Относно Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3120,9 +3120,8 @@ msgid "Manage Templates"
msgstr "Управление на шаблоните"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Инсталиране и редактиране"
+msgstr "Инсталиране от файл"
#: editor/editor_node.cpp
#, fuzzy
@@ -3165,6 +3164,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Промяна на трансформация (Анимация)"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3187,9 +3191,8 @@ msgid "Resave"
msgstr "Презаписване"
#: editor/editor_node.cpp
-#, fuzzy
msgid "New Inherited"
-msgstr "Нов скрипт"
+msgstr "Нова наследена сцена"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -3200,9 +3203,8 @@ msgid "Select"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Избиране на текущата папка"
+msgstr "Избиране на текущото"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3265,14 +3267,12 @@ msgid "Update"
msgstr ""
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Версия:"
+msgstr "Версия"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Автори"
+msgstr "Автор"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3285,9 +3285,8 @@ msgid "Measure:"
msgstr ""
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Време (сек): "
+msgstr "Продължителност на кадъра (мсек)"
#: editor/editor_profiler.cpp
msgid "Average Time (ms)"
@@ -3412,6 +3411,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -3431,9 +3434,8 @@ msgid "Paste"
msgstr "Поставяне"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Преобразуване в Mesh2D"
+msgstr "Преобразуване в %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3511,9 +3513,8 @@ msgid "There are no mirrors available."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Свързване с огледалното местоположение..."
+msgstr "Получаване на списъка с огледални местоположения..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
@@ -3524,7 +3525,6 @@ msgid "Error requesting URL:"
msgstr "Грешка при заявката за адрес:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
msgstr "Свързване с огледалното местоположение..."
@@ -3533,9 +3533,8 @@ msgid "Can't resolve the requested address."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Свързване с огледалното местоположение..."
+msgstr "Огледалното местоположение е недостъпно."
#: editor/export_template_manager.cpp
msgid "No response from the mirror."
@@ -3547,14 +3546,12 @@ msgid "Request failed."
msgstr "Заявката беше неуспешна."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Заявката се провали. Твърде много пренасочвания"
+msgstr "Заявката попадна в цикъл от пренасочвания."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Заявката беше неуспешна."
+msgstr "Заявката беше неуспешна:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3631,9 +3628,8 @@ msgid "SSL Handshake Error"
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Управление на шаблоните за изнасяне..."
+msgstr "Файлът с шаблоните за изнасяне не може да се отвори."
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside the export templates file: %s."
@@ -3644,9 +3640,8 @@ msgid "No version.txt found inside the export templates file."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Грешка при създаването на път за шаблоните:"
+msgstr "Грешка при създаването на път за разархивиране на шаблоните:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3681,9 +3676,8 @@ msgid "Export templates are installed and ready to be used."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Отваряне на файл"
+msgstr "Отваряне на папката"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
@@ -3698,19 +3692,16 @@ msgid "Uninstall templates for the current version."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Грешка при свалянето"
+msgstr "Сваляне от:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Отваряне във файловия мениджър"
+msgstr "Отваряне в уеб браузъра"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Копиране на грешката"
+msgstr "Копиране на адреса на огледалното местоположение"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -3727,14 +3718,12 @@ msgid "Official export templates aren't available for development builds."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
-msgstr "Инсталиране и редактиране"
+msgstr "Инсталиране от файл"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Внасяне на шаблони от архив във формат ZIP"
+msgstr "Внасяне на шаблони от локален файл."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3746,14 +3735,12 @@ msgid "Cancel the download of the templates."
msgstr ""
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Инсталирани версии:"
+msgstr "Други инсталирани версии:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Управление на шаблоните"
+msgstr "Деинсталиране на шаблона"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3905,9 +3892,8 @@ msgid "Collapse All"
msgstr "Свиване на всичко"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Търсене на файлове"
+msgstr "Сортиране на файлове"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
@@ -4245,14 +4231,12 @@ msgid "Failed to load resource."
msgstr "Ресурсът не може да бъде зареден."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Свиване на всички свойства"
+msgstr "Копиране на свойствата"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Свойства на темата"
+msgstr "Поставяне на свойствата"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4277,14 +4261,12 @@ msgid "Save As..."
msgstr "Запазване като..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Не е в пътя на ресурсите."
+msgstr "Допълнителни настройки на ресурса."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Няма ресурс–анимация в буфера за обмен!"
+msgstr "Редактиране на ресурс от буфера за обмен"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
@@ -4307,9 +4289,8 @@ msgid "History of recently edited objects."
msgstr "История на последно редактираните обекти."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Отваряне на документацията"
+msgstr "Отваряне на документацията за този обект."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4320,9 +4301,8 @@ msgid "Filter properties"
msgstr "Филтриране на свойствата"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Свойства на обекта."
+msgstr "Управление на свойствата на обекта."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4567,9 +4547,8 @@ msgid "Blend:"
msgstr "Смесване:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Параметърът е променен"
+msgstr "Параметърът е променен:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5203,9 +5182,8 @@ msgid "Got:"
msgstr "Получено:"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Failed SHA-256 hash check"
-msgstr "Неуспешна проверка на хеш от вид „sha256“"
+msgstr "Неуспешна проверка на хеш от вид SHA-256"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
@@ -5353,13 +5331,13 @@ msgstr ""
"Запазете сцената и опитайте отново."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
"Няма полигонни мрежи за изпичане. Уверете се, че те съдържат канал UV2 и че "
-"флагът „Изпичане на светлината“ е включен."
+"флаговете „Използване при изпичане на светлината“ и „Създаване на карта на "
+"осветеност“ са включени."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5382,7 +5360,6 @@ msgstr ""
"принадлежат на квадратната област [0.0,1.0]."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"Godot editor was built without ray tracing support, lightmaps can't be baked."
msgstr ""
@@ -5503,6 +5480,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Заключване на избраното"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Групи"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5677,27 +5666,23 @@ msgstr "Режим на избиране"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Премахване на избрания възел или преход."
+msgstr "Влачене: Въртене на избрания възел около централната му точка."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Влачене: преместване"
+msgstr "Alt+Влачене: преместване на избрания възел."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Премахване на избрания възел или преход."
+msgstr "V: Задаване на централната точка на възела."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Показване на списък с всички обекти на щракнатата позиция\n"
-"(същото като Alt+Десен бутон в режим на избиране)."
+"Alt+Десен бутон: Показване на списък с всички обекти на щракнатата позиция, "
+"включително заключените."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
@@ -5729,7 +5714,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr ""
+msgstr "Щракнете, за да промените централната точка за въртене на обекта."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
@@ -5934,14 +5919,12 @@ msgid "Clear Pose"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Добавяне на възел"
+msgstr "Добавяне на възел тук"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Вмъкване на ключ тук"
+msgstr "Инстанциране на сцената тук"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -5968,34 +5951,28 @@ msgid "Zoom to 12.5%"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Отдалечаване"
+msgstr "Мащабиране на 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
@@ -6162,9 +6139,8 @@ msgid "Remove Point"
msgstr "Премахване на точката"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Left Linear"
-msgstr "Линейно"
+msgstr "Линейно отляво"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Right Linear"
@@ -6219,9 +6195,9 @@ msgid "Mesh is empty!"
msgstr "Полигонната мрежа е празна!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Couldn't create a Trimesh collision shape."
-msgstr "Неуспешно създаване на папка."
+msgstr ""
+"Не може да се създаде форма за колизия от тип полигонна мрежа от триъгълници."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
@@ -6244,9 +6220,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr ""
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Създаване на единична изпъкнала форма"
+msgstr "Създаване на опростена изпъкнала форма"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6431,7 +6406,13 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Внасяне от сцена"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Внасяне от сцена"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7009,19 +6990,27 @@ msgid "Flip Portals"
msgstr ""
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Преместване на точки на Безие"
+msgstr "Точки за генериране на стая"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Изтриване на точка"
+msgstr "Генериране на точки"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Изчистване на трансформацията"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Създаване на възел"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7520,11 +7509,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Връщане на стандартните настройки"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7552,6 +7542,63 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Долу вляво"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ляв бутон"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Десен бутон"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7578,24 +7625,21 @@ msgid "None"
msgstr "Няма"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Режим на завъртане"
+msgstr "Ротация"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Транслиране: "
+msgstr "Транслиране"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Мащаб:"
+msgstr "Скалиране"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
-msgstr ""
+msgstr "Скалиране: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translating: "
@@ -7603,7 +7647,7 @@ msgstr "Транслиране: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
-msgstr ""
+msgstr "Завъртане на %s градуса."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
@@ -7622,37 +7666,32 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Изглед Отпред."
+msgstr "Размер:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Параметърът е променен"
+msgstr "Промени в материала:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Параметърът е променен"
+msgstr "Промени в шейдъра:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Точки на повърхността"
+msgstr "Промени в повърхнината:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Вертикала:"
+msgstr "Вертекси:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -7667,42 +7706,22 @@ msgid "Bottom View."
msgstr "Изглед отдолу."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Изглед отляво."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Изглед отдясно."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Изглед отпред."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Изглед отзад."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Подравняване на трансформацията с изгледа"
@@ -7811,9 +7830,8 @@ msgid "Freelook Slow Modifier"
msgstr "Модификатор за забавяне на свободния изглед"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Превключване на любимите"
+msgstr "Превключване на изгледа за преглед на камерата"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -7831,9 +7849,8 @@ msgid ""
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Преобразуване в Mesh2D"
+msgstr "Преобразуване на стаите"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -7849,9 +7866,8 @@ msgid ""
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
-msgstr "Следващ под"
+msgstr "Прилепване на възлите към пода"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
@@ -7967,6 +7983,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Редактиране на полигона за прикриване"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Настройки…"
@@ -8032,7 +8053,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -8276,33 +8297,28 @@ msgid "Step:"
msgstr "Стъпка:"
#: editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "Separation:"
-msgstr "Версия:"
+msgstr "Разделение:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "TextureRegion"
msgstr "Текстурна област"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Цват"
+msgstr "Цветове"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Шрифт"
+msgstr "Шрифтове"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Иконка"
+msgstr "Иконки"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "Стил"
+msgstr "Стилове"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
@@ -8313,14 +8329,12 @@ msgid "No colors found."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Константи"
+msgstr "{num} константа/и"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Константа за цвят."
+msgstr "Няма намерени константи."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
@@ -8355,28 +8369,24 @@ msgid "Nothing was selected for the import."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Внасяне на тема"
+msgstr "Внасяне на елементите на темата"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Обновяване на сцената"
+msgstr "Обновяване на редактора"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "Анализиране"
+msgstr "Завършване"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Филтри:"
+msgstr "Филтриране:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
@@ -8387,9 +8397,8 @@ msgid "Select by data type:"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Избери разделение и го изтрий"
+msgstr "Избиране на всички видими цветни елементи."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
@@ -8454,23 +8463,20 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Свиване на всичко"
+msgstr "Свиване на типовете."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Expand types."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Избор на шаблонен файл"
+msgstr "Избиране на всички елементи – теми."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Избиране на метод"
+msgstr "Избиране с данните"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
@@ -8486,9 +8492,8 @@ msgid "Deselect all Theme items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Внасяне на сцена"
+msgstr "Внасяне на избраното"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8504,34 +8509,28 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на всички елементи – цветове"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Преименуван"
+msgstr "Преименуване на елемента"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на всички елементи – константи"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на всички елементи – шрифтове"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на всички елементи – иконки"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на всички елементи – стилове"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8540,149 +8539,124 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент – цвят"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Константа"
+msgstr "Добавяне на елемент – константа"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент – шрифт"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент – иконка"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент – стил"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Премахване на всички елементи"
+msgstr "Преименуване на елемента – цвят"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Rename Constant Item"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Преименуване на функцията"
+msgstr "Преименуване на елемента – шрифт"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Преименуване на функцията"
+msgstr "Преименуване на елемента – иконка"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Премахване на всички елементи"
+msgstr "Преименуване на елемента – стил"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Ресурсът не може да бъде зареден."
+msgstr "Неправилен файл – не е ресурс от тип тема."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Управление на шаблоните"
+msgstr "Управление на елементите на темата"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Редактируем елемент"
+msgstr "Редактиране на елементите"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Тип:"
+msgstr "Типове:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Тип:"
+msgstr "Добавяне на тип:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент на стила"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на елементи:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Премахване на всички елементи"
+msgstr "Премахване на персонализираните елементи"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Премахване на всички елементи"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на елемент на темата"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Име:"
+msgstr "Старо име:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Внасяне на тема"
+msgstr "Внасяне на елементи"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Презареждане на темата"
+msgstr "Тема по подразбиране"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Редактиране на темата"
+msgstr "Тема на редактора"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select Another Theme Resource:"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Внасяне на тема"
+msgstr "Друга тема"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Настройване на прилепването"
+msgstr "Потвърждаване на преименуването на елемента"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Cancel Item Rename"
@@ -8703,66 +8677,56 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Добавяне на възел"
+msgstr "Добавяне на тип"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Добавяне на всички елементи"
+msgstr "Добавяне на тип елемент"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Тип на възела"
+msgstr "Типове на възлите:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Внасяне на преводи"
+msgstr "Показване на стандартните"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Запазване на всичко"
+msgstr "Замяна на всичко"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Тема"
+msgstr "Тема:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Управление на шаблоните за изнасяне..."
+msgstr "Управление на елементите..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Преглед"
+msgstr "Добавяне на преглед"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Обновяване на предварителния преглед"
+msgstr "Стандартен предварителен преглед"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Изберете източник за полигонна мрежа:"
+msgstr "Изберете сцена за потребителски интерфейс:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -8803,9 +8767,8 @@ msgid "Checked Radio Item"
msgstr ""
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Named Separator"
-msgstr "Именуван разд."
+msgstr "Именуван разделител"
#: editor/plugins/theme_editor_preview.cpp
msgid "Submenu"
@@ -9021,9 +8984,8 @@ msgid "Collision"
msgstr "Колизия"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion"
-msgstr "Приставки"
+msgstr "Прикриване"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation"
@@ -9054,9 +9016,8 @@ msgid "Collision Mode"
msgstr "Режим на колизии"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion Mode"
-msgstr "Приставки"
+msgstr "Режим на прикриване"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation Mode"
@@ -10190,9 +10151,8 @@ msgid "VisualShader"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Редактиране на визуалното свойство"
+msgstr "Редактиране на визуално свойство:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10233,7 +10193,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
+msgstr "Шаблоните за изнасяне за тази платформа липсват или са повредени:"
#: editor/project_export.cpp
msgid "Presets"
@@ -10241,7 +10201,7 @@ msgstr ""
#: editor/project_export.cpp editor/project_settings_editor.cpp
msgid "Add..."
-msgstr ""
+msgstr "Добавяне..."
#: editor/project_export.cpp
msgid ""
@@ -10255,7 +10215,7 @@ msgstr "Път за изнасяне"
#: editor/project_export.cpp
msgid "Resources"
-msgstr ""
+msgstr "Ресурси"
#: editor/project_export.cpp
msgid "Export all resources in the project"
@@ -10282,12 +10242,16 @@ msgid ""
"Filters to export non-resource files/folders\n"
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
+"Филтри за изнасяне на нересурсни файлове/папки\n"
+"(разделени със запетая, например: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid ""
"Filters to exclude files/folders from project\n"
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
+"Филтри за изключване на файлове/папки от проекта\n"
+"(разделени със запетая, например: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid "Features"
@@ -10306,29 +10270,30 @@ msgid "Script"
msgstr "Скрипт"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Режим на изнасяне на скриптове:"
+msgstr "Режим на изнасяне на файловете с код на GDScript:"
#: editor/project_export.cpp
msgid "Text"
-msgstr ""
+msgstr "Като текст"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Компилиран байт-код (по-бързо зареждане)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
-msgstr ""
+msgstr "Шифровани (въведете ключ по-долу)"
#: editor/project_export.cpp
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
msgstr ""
+"Неправилен ключ за шифроване (трябва да бъде с дължина 64 шестнадесетични "
+"знака)"
#: editor/project_export.cpp
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr ""
+msgstr "Ключ за шифроване на GDScript (256 бита, в шестнадесетичен формат):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10352,32 +10317,33 @@ msgstr "Файл ZIP"
#: editor/project_export.cpp
msgid "Godot Game Pack"
-msgstr ""
+msgstr "Игрален пакет на Godot"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr ""
+msgstr "Шаблоните за изнасяне за тази система липсват:"
#: editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr ""
+msgstr "Управление на шаблоните за изнасяне"
#: editor/project_export.cpp
msgid "Export With Debug"
-msgstr ""
+msgstr "Изнасяне с данни за дебъгване"
#: editor/project_manager.cpp
msgid "The path specified doesn't exist."
-msgstr ""
+msgstr "Посоченият път не съществува."
#: editor/project_manager.cpp
msgid "Error opening package file (it's not in ZIP format)."
-msgstr ""
+msgstr "Грешка при отваряне на пакета (не е във формат ZIP)."
#: editor/project_manager.cpp
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
msgstr ""
+"Неправилен проектен файл „.zip“. В него не се съдържа файл „project.godot“."
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
@@ -10389,20 +10355,19 @@ msgstr "Моля, изберете файл от тип „project.godot“ ил
#: editor/project_manager.cpp
msgid "This directory already contains a Godot project."
-msgstr ""
+msgstr "Тази папка вече съдържа проект на Godot."
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr ""
+msgstr "Нов игрален проект"
#: editor/project_manager.cpp
msgid "Imported Project"
msgstr "Внесен проект"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "Неправилно име на проект."
+msgstr "Неправилно име на проекта."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
@@ -10410,21 +10375,23 @@ msgstr "Папката не може да бъде създадена."
#: editor/project_manager.cpp
msgid "There is already a folder in this path with the specified name."
-msgstr ""
+msgstr "В този път вече съществува папка с това име."
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr ""
+msgstr "Няма да е лошо да дадете име на проекта си."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr ""
+msgstr "Неправилен път до проекта (Променяли ли сте нещо?)."
#: editor/project_manager.cpp
msgid ""
"Couldn't load project.godot in project path (error %d). It may be missing or "
"corrupted."
msgstr ""
+"Файлът „project.godot“ не може да бъде зареден от пътя на проекта (грешка "
+"%d). Възможно е той да липсва или да е повреден."
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
@@ -10622,37 +10589,32 @@ msgid "Project Manager"
msgstr "Управление на проектите"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Проекти"
+msgstr "Локални проекти"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Loading, please wait..."
-msgstr "Зареждане…"
+msgstr "Зареждане. Моля, изчакайте…"
#: editor/project_manager.cpp
msgid "Last Modified"
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Изнасяне на проекта"
+msgstr "Редактиране на проекта"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Преименуване на проекта"
+msgstr "Пускане на проекта"
#: editor/project_manager.cpp
msgid "Scan"
msgstr "Сканиране"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Проекти"
+msgstr "Сканиране за проекти"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -10663,14 +10625,12 @@ msgid "New Project"
msgstr "Нов проект"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Внесен проект"
+msgstr "Внасяне на проект"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Преименуване на проекта"
+msgstr "Премахване на проекта"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -10681,9 +10641,8 @@ msgid "About"
msgstr "Относно"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Библиотека с ресурси"
+msgstr "Проекти от Библиотеката с ресурси"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -10708,9 +10667,8 @@ msgid ""
msgstr ""
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Филтриране на свойствата"
+msgstr "Филтриране на проектите"
#: editor/project_manager.cpp
msgid ""
@@ -10912,9 +10870,8 @@ msgid "Override for Feature"
msgstr ""
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Добавяне на превод"
+msgstr "Добавяне на %d превода"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
@@ -11300,9 +11257,8 @@ msgid "Can't paste root node into the same scene."
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Paste Node(s)"
-msgstr "Поставяне на възлите"
+msgstr "Поставяне на възела(възлите)"
#: editor/scene_tree_dock.cpp
msgid "Detach Script"
@@ -11447,9 +11403,8 @@ msgid "Attach Script"
msgstr "Закачане на скрипт"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Cut Node(s)"
-msgstr "Изрязване на възлите"
+msgstr "Изрязване на възела(възлите)"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
@@ -12021,6 +11976,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12098,7 +12061,6 @@ msgid "Step argument is zero!"
msgstr "Аргументът за стъпката е нула!"
#: modules/gdscript/gdscript_functions.cpp
-#, fuzzy
msgid "Not a script with an instance"
msgstr "Скриптът няма инстанция"
@@ -12134,14 +12096,12 @@ msgid "Object can't provide a length."
msgstr ""
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Изнасяне на библиотека с полигонни мрежи"
+msgstr "Изнасяне на полигонна мрежа като GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Изнасяне..."
+msgstr "Изнасяне на GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12200,29 +12160,28 @@ msgid "Snap View"
msgstr ""
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "Изключено"
+msgstr "Отрязването е изключено"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
-msgstr ""
+msgstr "Отрязване над"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Below"
-msgstr ""
+msgstr "Отрязване под"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit X Axis"
-msgstr ""
+msgstr "Редактиране на оста X"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Y Axis"
-msgstr ""
+msgstr "Редактиране на оста Y"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit Z Axis"
-msgstr ""
+msgstr "Редактиране на оста Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate X"
@@ -12303,9 +12262,8 @@ msgid "Indirect lighting"
msgstr ""
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
-#, fuzzy
msgid "Post processing"
-msgstr "Задаване на израз"
+msgstr "Постобработка"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Plotting lightmaps"
@@ -12315,6 +12273,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Запълване на избраното"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12438,14 +12401,12 @@ msgid "Add Output Port"
msgstr "Добавяне на изходящ порт"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Промяна на типа на входящия порт"
+msgstr "Промяна на типа на порта"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Промяна на името на входящия порт"
+msgstr "Промяна на името на порт"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -12556,9 +12517,8 @@ msgid "Add Preload Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Добавяне на възел"
+msgstr "Добавяне на възел(възли)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -12599,14 +12559,12 @@ msgid "Disconnect Nodes"
msgstr "Разкачане на възлите"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Node Data"
-msgstr "Изрязване на възелите"
+msgstr "Свързване на данните на възела"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Node Sequence"
-msgstr "Изрязване на възелите"
+msgstr "Свързване на последователност от възли"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
@@ -12786,225 +12744,215 @@ msgstr "Търсене във VisualScript"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
-msgstr "Изнасяне на всичко"
+msgstr "Изнасяне на APK..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
-msgstr "Инсталирате..."
+msgstr "Деинсталиране..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "Зареждане…"
+msgstr "Инсталиране на устройството. Моля, изчакайте…"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
-msgstr "Файлът не може да бъде записан:"
+msgstr "Не може да се инсталира на устройство: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "Папката не може да бъде създадена."
+msgstr "Изпълнението на устройството е невъзможно."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
+"В настройките на редактора трябва да бъде посочен правилен път към Android "
+"SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
-msgstr ""
+msgstr "Пътят до Android SDK в настройките на редактора е грешен."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
-msgstr ""
+msgstr "Липсва папката „platform-tools“!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
-msgstr ""
+msgstr "Не е намерена командата „adb“ от Android SDK – platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
+"Моля, проверете папката на Android SDK, която е посочена в настройките на "
+"редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
-msgstr ""
+msgstr "Липсва папката „build-tools“!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
-msgstr ""
+msgstr "Не е намерена командата „apksigner “ от Android SDK – build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
-msgstr ""
+msgstr "Неправилен публичен ключ за разширение към APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Неправилно име на пакет:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
+"В настройките на проекта, раздел „android/modules“, присъства неправилен "
+"модул „GodotPaymentV3“ (това е променено във Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"Командата „apksigner“ не може да бъде намерена.\n"
+"Проверете дали командата е налична в папката „build-tools“ на Android SDK.\n"
+"Резултатният файл „%s“ не е подписан."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
-msgstr "Шаблонът не може да се отвори за изнасяне:"
+msgstr "Не е намерено хранилище за ключове. Изнасянето е невъзможно."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "Добавяне на %s..."
+msgstr "Потвърждаване на %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "Изнасяне на всичко"
+msgstr "Изнасяне за Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13012,58 +12960,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
-msgstr "Файлът не може да бъде записан:"
+msgstr "Файлът с пакета за разширение не може да бъде записан!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "Съдържание на пакета:"
+msgstr "Пакетът не е намерен: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "Създаване на полигонна мрежа…"
+msgstr "Създаване на APK…"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Шаблонът не може да се отвори за изнасяне:"
+msgstr ""
+"Не е намерен шаблонен файл APK за изнасяне:\n"
+"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13071,21 +13017,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
-msgstr "Добавяне на %s..."
+msgstr "Добавяне на файлове..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
-msgstr "Файлът не може да бъде записан:"
+msgstr "Файловете на проекта не могат да бъдат изнесени"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13134,29 +13078,24 @@ msgid "Could not write file:"
msgstr "Файлът не може да бъде записан:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Файлът не може да бъде записан:"
+msgstr "Файлът не може да бъде прочетен:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Не може да се прочете персонализирана HTML-обвивка:"
+msgstr "Персонализираната HTML-обвивка не може да бъде прочетена:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Папката не може да бъде създадена."
+msgstr "Папката на HTTP-сървъра не може да бъде създадена:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Грешка при записването:"
+msgstr "Грешка при стартирането на HTTP-сървър:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Името не е правилен идентификатор:"
+msgstr "Неправилен идентификатор на пакета:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
@@ -13576,6 +13515,14 @@ msgstr ""
"NavigationMeshInstance трябва да бъде дъщерен или под-дъщерен на възел от "
"тип Navigation. Той само предоставя данните за навигирането."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13871,6 +13818,14 @@ msgstr "Трябва да се използва правилно разшире
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13911,6 +13866,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 6cd9e3a81c..6c958956bc 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -1052,7 +1052,7 @@ msgstr ""
msgid "Dependencies"
msgstr "নির্ভরতা-সমূহ"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "রিসোর্স"
@@ -1723,14 +1723,14 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom debug template not found."
msgstr "স্বনির্মিত ডিবাগ (debug) প্যাকেজ খুঁজে পাওয়া যায়নি।"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -2147,7 +2147,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "পুনরায় ইম্পোর্ট হচ্ছে"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "শীর্ষ"
@@ -2689,6 +2689,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "বর্তমান দৃশ্যটি সংরক্ষিত হয়নি। তবুও খুলবেন?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "সাবেক অবস্থায় যান/আনডু"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "পুনরায় করুন"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "পূর্বে কখনোই সংরক্ষিত হয়নি এমন দৃশ্য পুনরায়-লোড (রিলোড) করা অসম্ভব।"
@@ -3407,6 +3433,11 @@ msgid "Merge With Existing"
msgstr "বিদ্যমানের সাথে একত্রিত করুন"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "একটি স্ক্রিপ্ট খুলুন এবং চালান"
@@ -3681,6 +3712,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
#, fuzzy
msgid "Make Unique"
@@ -5971,6 +6006,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem সম্পাদন করুন"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "নির্বাচন করুন"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "গ্রুপ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6977,7 +7024,13 @@ msgid "Remove Selected Item"
msgstr "নির্বাচিত বস্তুটি অপসারণ করুন"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "দৃশ্য হতে ইম্পোর্ট করুন"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "দৃশ্য হতে ইম্পোর্ট করুন"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7609,6 +7662,16 @@ msgstr "উৎপাদিত বিন্দুর সংখ্যা:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "রুপান্তর"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "নোড তৈরি করুন"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -8158,12 +8221,14 @@ msgid "Skeleton2D"
msgstr "স্কেলেটন/কাঠাম..."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "প্রাথমিক sRGB ব্যবহার করুন"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "প্রতিস্থাপন"
#: editor/plugins/skeleton_editor_plugin.cpp
#, fuzzy
@@ -8194,6 +8259,71 @@ msgid "Perspective"
msgstr "পরিপ্রেক্ষিত (Perspective)"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "পরিপ্রেক্ষিত (Perspective)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "পরিপ্রেক্ষিত (Perspective)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "পরিপ্রেক্ষিত (Perspective)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "পরিপ্রেক্ষিত (Perspective)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "সমকোণীয় (Orthogonal)"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "পরিপ্রেক্ষিত (Perspective)"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "রুপান্তর নিষ্ফলা করা হয়েছে।"
@@ -8315,42 +8445,22 @@ msgid "Bottom View."
msgstr "নিম্ন দর্শন।"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "নিম্ন"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "বাম দর্শন।"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "বাম"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "ডান দর্শন।"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "ডান"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "সন্মুখ দর্শন।"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "সন্মুখ"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "পশ্চাৎ দর্শন।"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "পশ্চাৎ"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "দর্শনের সাথে সারিবদ্ধ করুন"
@@ -8637,6 +8747,11 @@ msgid "View Portal Culling"
msgstr "Viewport সেটিংস"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Viewport সেটিংস"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8703,8 +8818,9 @@ msgid "Post"
msgstr "পরবর্তী (Post)"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "নামহীন প্রকল্প"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
@@ -13073,6 +13189,16 @@ msgstr "বক্ররেখার বিন্দুর স্থান নি
msgid "Set Portal Point Position"
msgstr "বক্ররেখার বিন্দুর স্থান নির্ধারণ করুন"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Capsule Shape এর ব্যাসার্ধ পরিবর্তন করুন"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "আন্ত-বক্ররেখার স্থান নির্ধারণ করুন"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -13391,6 +13517,11 @@ msgstr "ছবিসমূহ ব্লিটিং (Blitting) করা হচ
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "সব সিলেক্ট করুন"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13927,166 +14058,155 @@ msgstr "Shader Graph Node অপসারণ করুন"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "লিস্ট থেকে ডিভাইস সিলেক্ট করুন"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "%s এর জন্য এক্সপোর্ট (export) হচ্ছে"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "ইন্সটল"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "মিরর রিট্রাইভ করা হচ্ছে, দযা করে অপেক্ষা করুন..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "দৃশ্য ইন্সট্যান্স করা সম্ভব হয়নি!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "স্বনির্মিত স্ক্রিপ্ট চালানো হচ্ছে..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "অগ্রহণযোগ্য ক্লাস নাম"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -14094,63 +14214,63 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"ফাইল স্ক্যান করা হচ্ছে,\n"
"অনুগ্রহপূর্বক অপেক্ষা করুন..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "%s সংযুক্ত হচ্ছে..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "%s এর জন্য এক্সপোর্ট (export) হচ্ছে"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -14158,59 +14278,59 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "টাইলটি খুঁজে পাওয়া যায়নি:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "অ্যানিমেশনের সরঞ্জামসমূহ"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "ওকট্রী (octree) গঠনবিন্যাস তৈরি করা হচ্ছে"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -14218,21 +14338,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "%s সংযুক্ত হচ্ছে..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "টাইলটি খুঁজে পাওয়া যায়নি:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14744,6 +14864,14 @@ msgstr ""
"NavigationMeshInstance-কে অবশ্যই Navigation-এর অংশ অথবা অংশের অংশ হতে হবে। "
"এটা শুধুমাত্র ন্যাভিগেশনের তথ্য প্রদান করে।"
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -15047,6 +15175,14 @@ msgstr "একটি কার্যকর এক্সটেনশন ব্য
msgid "Enable grid minimap."
msgstr "স্ন্যাপ সক্রিয় করুন"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -15095,6 +15231,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -15148,6 +15288,21 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Bottom"
+#~ msgstr "নিম্ন"
+
+#~ msgid "Left"
+#~ msgstr "বাম"
+
+#~ msgid "Right"
+#~ msgstr "ডান"
+
+#~ msgid "Front"
+#~ msgstr "সন্মুখ"
+
+#~ msgid "Rear"
+#~ msgstr "পশ্চাৎ"
+
#, fuzzy
#~ msgid "Package Contents:"
#~ msgstr "ধ্রুবকসমূহ:"
@@ -17072,9 +17227,6 @@ msgstr ""
#~ msgid "Images:"
#~ msgstr "ছবিসমূহ:"
-#~ msgid "Group"
-#~ msgstr "গ্রুপ"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "নমুনা রূপান্তর মোড: (.wav ফাইল):"
diff --git a/editor/translations/br.po b/editor/translations/br.po
index adee6daaba..4db566b371 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -1009,7 +1009,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1638,13 +1638,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2015,7 +2015,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2493,6 +2493,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3116,6 +3140,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Cheñch Treuzfurmadur ar Fiñvskeudenn"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3357,6 +3386,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5397,6 +5430,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6296,7 +6339,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6882,6 +6929,14 @@ msgstr "Fiñval ar Poentoù Bezier"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7376,11 +7431,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7408,6 +7463,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7515,42 +7624,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7812,6 +7901,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7877,7 +7970,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11777,6 +11870,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12057,6 +12158,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12524,159 +12629,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12684,57 +12778,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12742,54 +12836,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12797,19 +12891,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13259,6 +13353,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13548,6 +13650,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13588,6 +13698,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 347fea679b..e2580e35d9 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -1039,7 +1039,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependències"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recurs"
@@ -1708,13 +1708,13 @@ msgstr ""
"Activeu \"Import Etc\" a Configuració del Projecte o desactiveu la opció "
"'Driver Fallback Enabled''."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "No s'ha trobat cap plantilla de depuració personalitzada."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2100,7 +2100,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Important Recursos"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Dalt"
@@ -2611,6 +2611,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "L'escena actual no s'ha desat. Voleu obrir-la igualment?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Desfés"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refés"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "No es pot recarregar una escena mai desada."
@@ -3320,6 +3346,11 @@ msgid "Merge With Existing"
msgstr "Combina amb Existents"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Modifica la Transformació de l'Animació"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Obre i Executa un Script"
@@ -3579,6 +3610,10 @@ msgstr ""
"El recurs seleccionat (%s) no coincideix amb cap tipus esperat per aquesta "
"propietat (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Fes-lo Únic"
@@ -5758,6 +5793,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Modifica el elementCanvas"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Bloca la selecció"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grups"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6741,7 +6788,13 @@ msgid "Remove Selected Item"
msgstr "Elimina l'Element Seleccionat"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importa des de l'Escena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importa des de l'Escena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7350,6 +7403,16 @@ msgstr "Recompte de punts generats:"
msgid "Flip Portal"
msgstr "Invertir Horitzontalment"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Restablir Transformació"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Crea un Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "L'AnimationTree no té ruta assignada cap a un AnimationPlayer"
@@ -7869,13 +7932,13 @@ msgstr "Esquelet2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Make Rest Pose (From Bones)"
-msgstr "Crear Pose de Repòs (A partir dels Ossos)"
+msgid "Reset to Rest Pose"
+msgstr "Establir els ossos a la postura de repós"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Set Bones to Rest Pose"
-msgstr "Establir els ossos a la postura de repós"
+msgid "Overwrite Rest Pose"
+msgstr "Sobreescriu"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7903,6 +7966,71 @@ msgid "Perspective"
msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspectiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "S'ha interromput la Transformació ."
@@ -8021,42 +8149,22 @@ msgid "Bottom View."
msgstr "Vista inferior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Part inferior"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista esquerra."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Esquerra"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista Dreta."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Dreta"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Davant"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista Posterior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Darrere"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "Alinear amb la Vista"
@@ -8334,6 +8442,11 @@ msgid "View Portal Culling"
msgstr "Configuració de la Vista"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Configuració de la Vista"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Configuració..."
@@ -8403,8 +8516,8 @@ msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
-msgid "Nameless gizmo"
-msgstr "Gizmo sense nom"
+msgid "Unnamed Gizmo"
+msgstr "Projecte sense nom"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12771,6 +12884,16 @@ msgstr "Estableix la Posició del Punt de la Corba"
msgid "Set Portal Point Position"
msgstr "Estableix la Posició del Punt de la Corba"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Modifica el radi d'una Forma Càpsula"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Estableix la Posició d'Entrada de la Corba"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Canviar Radi del Cilindre"
@@ -13073,6 +13196,11 @@ msgstr "S'està traçant l'Il·luminació:"
msgid "Class name can't be a reserved keyword"
msgstr "El nom de la classe no pot ser una paraula clau reservada"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Omplir la Selecció"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Final de la traça de la pila d'excepció interna"
@@ -13584,78 +13712,78 @@ msgstr "Elimina el Node de VisualScript"
msgid "Get %s"
msgstr "Obtenir %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "El nom del paquet falta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package segments must be of non-zero length."
msgstr "Els segments de paquets han de ser de longitud no zero."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"El caràcter '%s' no està permès als noms de paquets d'aplicacions Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A digit cannot be the first character in a package segment."
msgstr "Un dígit no pot ser el primer caràcter d'un segment de paquets."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"El caràcter '%s' no pot ser el primer caràcter d'un segment de paquets."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "El paquet ha de tenir com a mínim un separador '. '."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Selecciona un dispositiu de la llista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportant tot"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Desinstal·lar"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "S'estan buscant rèpliques..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "No s'ha pogut començar el subprocés!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Executant Script Personalitzat..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "No s'ha pogut crear el directori."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -13664,102 +13792,91 @@ msgstr ""
"El projecte Android no està instal·lat per a la compilació. Instal·leu-lo "
"des del menú Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en "
"la configuració de l'editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en "
"la configuració de l'editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en "
"la configuració de l'editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Clau pública no vàlida per a l'expansió de l'APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "El nom del paquet no és vàlid:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13767,57 +13884,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Analitzant Fitxers,\n"
"Si Us Plau Espereu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "No es pot obrir la plantilla per exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Afegint %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Exportant tot"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Trying to build from a custom built template, but no version info for it "
@@ -13826,7 +13943,7 @@ msgstr ""
"Intentant construir des d'una plantilla personalitzada, però no existeix "
"informació de versió per a això. Torneu a instal·lar des del menú 'projecte'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build version mismatch:\n"
@@ -13840,27 +13957,27 @@ msgstr ""
"Torneu a instal·lar la plantilla de compilació d'Android des del menú "
"'Projecte'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "No es pot trobat el el fitxer 'project.godot' en el camí del projecte."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "No s'ha pogut escriure el fitxer:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Building Android Project (gradle)"
msgstr "Construint Projecte Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Building of Android project failed, check output for the error.\n"
@@ -13871,34 +13988,34 @@ msgstr ""
"Alternativament visiteu docs.godotengine.org per a la documentació de "
"compilació d'Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animació no trobada: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Creant els contorns..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "No es pot obrir la plantilla per exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13906,21 +14023,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Afegint %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "No s'ha pogut escriure el fitxer:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14467,6 +14584,14 @@ msgstr ""
"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només "
"proporciona dades de navegació."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14787,6 +14912,14 @@ msgstr "Cal utilitzar una extensió vàlida."
msgid "Enable grid minimap."
msgstr "Activar graella del minimapa"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -14842,6 +14975,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14894,6 +15031,29 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Les constants no es poden modificar."
+#, fuzzy
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Crear Pose de Repòs (A partir dels Ossos)"
+
+#~ msgid "Bottom"
+#~ msgstr "Part inferior"
+
+#~ msgid "Left"
+#~ msgstr "Esquerra"
+
+#~ msgid "Right"
+#~ msgstr "Dreta"
+
+#~ msgid "Front"
+#~ msgstr "Davant"
+
+#~ msgid "Rear"
+#~ msgstr "Darrere"
+
+#, fuzzy
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo sense nom"
+
#~ msgid "Package Contents:"
#~ msgstr "Contingut del Paquet:"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 266614bf96..eb257b0af6 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -30,7 +30,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-26 14:18+0000\n"
+"PO-Revision-Date: 2021-09-15 00:46+0000\n"
"Last-Translator: Zbyněk <zbynek.fiala@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
@@ -39,7 +39,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -63,8 +63,7 @@ msgstr "Neplatný vstup %i (nepředán) ve výrazu"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr ""
-"\"self\" nemůže být použito, protože instance je \"null\" (není předána)"
+msgstr "self nemůže být použit, protože jeho instance je null (není platná)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -1047,7 +1046,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Závislosti"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Zdroj"
@@ -1712,13 +1711,13 @@ msgstr ""
"Povolte 'Import Pvrtc' v nastavení projektu, nebo vypněte 'Driver Fallback "
"Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Vlastní ladící šablona nebyla nalezena."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2100,7 +2099,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importování assetů"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Horní"
@@ -2608,6 +2607,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Aktuální scéna neuložena. Přesto otevřít?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Zpět"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Znovu"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nelze načíst scénu, která nebyla nikdy uložena."
@@ -3291,6 +3316,11 @@ msgid "Merge With Existing"
msgstr "Sloučit s existující"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animace: Změna transformace"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Otevřít a spustit skript"
@@ -3547,6 +3577,10 @@ msgstr ""
"Vybraný zdroj (%s) neodpovídá žádnému očekávanému typu pro tuto vlastnost "
"(%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Vytvořit unikátní"
@@ -5674,6 +5708,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Uzamčít vybraný"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Skupiny"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6492,7 +6538,7 @@ msgstr "Vytvořit obrys"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh"
-msgstr "Mesh"
+msgstr "Sítě (Mesh)"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
@@ -6623,7 +6669,13 @@ msgid "Remove Selected Item"
msgstr "Odstranit vybranou položku"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importovat ze scény"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importovat ze scény"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7216,6 +7268,16 @@ msgstr "Počet vygenerovaných bodů:"
msgid "Flip Portal"
msgstr "Převrátit horizontálně"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Promazat transformaci"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Vytvořit uzel"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree nemá nastavenou cestu k AnimstionPlayer"
@@ -7716,12 +7778,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D (Kostra 2D)"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Vytvořit klidovou pózu (z kostí)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Umístit kosti do klidové pózy"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Umístit kosti do klidové pózy"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Přepsat"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7748,6 +7812,71 @@ msgid "Perspective"
msgstr "Perspektivní"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektivní"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektivní"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektivní"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektivní"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonální"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektivní"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformace zrušena."
@@ -7866,42 +7995,22 @@ msgid "Bottom View."
msgstr "Pohled zdola."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Dolní"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Pohled zleva."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Levý"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Pohled zprava."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Pravý"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Čelní pohled."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Přední"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Pohled zezadu."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Zadní"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Zarovnat se zobrazením"
@@ -8174,6 +8283,11 @@ msgid "View Portal Culling"
msgstr "Nastavení viewportu"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Nastavení viewportu"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Nastavení..."
@@ -8239,8 +8353,9 @@ msgid "Post"
msgstr "Po"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo beze jména"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Nepojmenovaný projekt"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12411,6 +12526,16 @@ msgstr "Nastavit pozici bodu křivky"
msgid "Set Portal Point Position"
msgstr "Nastavit pozici bodu křivky"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Změnit poloměr Cylinder Shape"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Nastavit bod do křivky"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Změnit poloměr Cylinder"
@@ -12694,6 +12819,11 @@ msgstr "Vykreslování světelných map"
msgid "Class name can't be a reserved keyword"
msgstr "Název třídy nemůže být rezervované klíčové slovo"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Vyplnit výběr"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Konec zásobníku trasování vnitřní výjimky"
@@ -13173,73 +13303,73 @@ msgstr "Hledat VisualScript"
msgid "Get %s"
msgstr "Přijmi %d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Chybí jméno balíčku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Jméno balíčku musí být neprázdné."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Znak '%s' není povolen v názvu balíčku Android aplikace."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Číslice nemůže být prvním znakem segmentu balíčku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Znak '%s' nemůže být prvním znakem segmentu balíčku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Balíček musí mít alespoň jeden '.' oddělovač."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Vyberte zařízení ze seznamu"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportování všeho"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Odinstalovat"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Načítání, prosím čekejte..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Nelze spustit podproces!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Spouštím skript..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Nelze vytvořit složku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Nelze najít nástroj 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13247,66 +13377,66 @@ msgstr ""
"Šablona sestavení Androidu není pro projekt nainstalována. Nainstalujte jej "
"z nabídky Projekt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Úložiště klíčů k ladění není nakonfigurováno v Nastavení editoru nebo v "
"export profilu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Úložiště klíčů pro vydání je nakonfigurováno nesprávně v profilu exportu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Je vyžadována platná cesta Android SDK v Nastavení editoru."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Neplatná cesta k Android SDK v Nastavení editoru."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Chybí složka \"platform-tools\"!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Nelze najít příkaz adb z nástrojů platformy Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "Zkontrolujte ve složce Android SDK uvedené v Nastavení editoru."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Chybí složka \"build-tools\"!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Nelze najít apksigner, nástrojů Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Neplatný veřejný klíč pro rozšíření APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Neplatné jméno balíčku:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13314,40 +13444,25 @@ msgstr ""
"Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / moduly"
"\" (změněno v Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"Chcete-li používat doplňky, musí být povoleno \"použít vlastní build\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" je platné pouze v případě, že \"Režim Xr\" má hodnotu "
"\"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu "
-"\"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" je validní pouze v případě, že je povolena možnost \"Použít "
"vlastní sestavu\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13355,57 +13470,56 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Skenování souborů,\n"
"Prosím, čekejte..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Nelze otevřít šablonu pro export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Přidávám %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "Exportování všeho"
+msgstr "Export pro systém Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Neplatné jméno souboru! Android App Bundle vyžaduje příponu *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "Rozšíření APK není kompatibilní s Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Neplatné jméno souboru! Android APK vyžaduje příponu *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13413,7 +13527,7 @@ msgstr ""
"Pokus o sestavení z vlastní šablony, ale neexistují pro ni žádné informace o "
"verzi. Přeinstalujte jej z nabídky \"Projekt\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13425,26 +13539,26 @@ msgstr ""
" Verze Godot: %s\n"
"Přeinstalujte šablonu pro sestavení systému Android z nabídky \"Projekt\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Nelze upravit project.godot v umístění projektu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Nelze zapsat soubor:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Buildování projektu pro Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13452,11 +13566,11 @@ msgstr ""
"Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n"
"Případně navštivte dokumentaci o build pro Android na docs.godotengine.org."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Přesunout výstup"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13464,24 +13578,24 @@ msgstr ""
"Nelze kopírovat či přejmenovat exportovaný soubor, zkontrolujte výstupy v "
"adresáři projektu gradle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animace nenalezena: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Vytvářím kontury..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Nelze otevřít šablonu pro export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13489,21 +13603,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Přidávám %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Nelze zapsat soubor:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Zarovnávání APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14029,6 +14143,14 @@ msgstr ""
"NavigationMeshInstance musí být dítětem nebo vnoučetem uzlu Navigation. "
"Poskytuje pouze data pro navigaci."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14352,6 +14474,14 @@ msgstr "Je nutné použít platnou příponu."
msgid "Enable grid minimap."
msgstr "Povolit minimapu mřížky."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14406,6 +14536,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"Velikost pohledu musí být větší než 0, aby bylo možné cokoliv renderovat."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14459,6 +14593,41 @@ msgstr "Přiřazeno uniformu."
msgid "Constants cannot be modified."
msgstr "Konstanty není možné upravovat."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Vytvořit klidovou pózu (z kostí)"
+
+#~ msgid "Bottom"
+#~ msgstr "Dolní"
+
+#~ msgid "Left"
+#~ msgstr "Levý"
+
+#~ msgid "Right"
+#~ msgstr "Pravý"
+
+#~ msgid "Front"
+#~ msgstr "Přední"
+
+#~ msgid "Rear"
+#~ msgstr "Zadní"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo beze jména"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu "
+#~ "\"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Obsah balíčku:"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 2ab69b5f05..008f3b947c 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -1078,7 +1078,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Afhængigheder"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ressource"
@@ -1757,13 +1757,13 @@ msgstr ""
"Aktivér 'Import Pvrtc' i Projektindstillingerne, eller deaktivér 'Driver "
"Fallback Aktiveret'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Brugerdefineret debug skabelonfil ikke fundet."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2171,7 +2171,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Gen)Importér Aktiver"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Top"
@@ -2685,6 +2685,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Nuværende scene er ikke gemt. Åbn alligevel?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Fortryd"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Annuller Fortyd"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Kan ikke genindlæse en scene, der aldrig blev gemt."
@@ -3383,6 +3409,11 @@ msgid "Merge With Existing"
msgstr "Flet Med Eksisterende"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Skift Transformering"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Åben & Kør et Script"
@@ -3635,6 +3666,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5847,6 +5882,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Vælg værktøj"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupper"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6799,7 +6846,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7407,6 +7458,16 @@ msgstr "Indsæt Punkt"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Anim Skift Transformering"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Vælg Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7943,11 +8004,12 @@ msgid "Skeleton2D"
msgstr "Singleton"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Indlæs Default"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7978,6 +8040,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Højre knap."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -8093,42 +8210,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8395,6 +8492,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Rediger Poly"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8461,7 +8563,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12655,6 +12757,15 @@ msgstr "Fjern Kurve Punktets Position"
msgid "Set Portal Point Position"
msgstr "Fjern Kurve Punktets Position"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Fjern Signal"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12952,6 +13063,11 @@ msgstr "Generering af lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "All selection"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13456,166 +13572,155 @@ msgstr "Fjern VisualScript Node"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Vælg enhed fra listen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Eksporter"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Afinstaller"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Henter spejle, vent venligst ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Kunne ikke starte underproces!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Kører Brugerdefineret Script..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Kunne ikke oprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Ugyldigt navn."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13623,63 +13728,63 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Scanner Filer,\n"
"Vent Venligst..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Kan ikke åbne skabelon til eksport:\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Tester"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Eksporter"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13687,58 +13792,58 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Kunne ikke skrive til fil:\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animations Længde (i sekunder)."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Forbinder..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Kan ikke åbne skabelon til eksport:\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13746,21 +13851,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Filtrer filer..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Kunne ikke skrive til fil:\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14273,6 +14378,14 @@ msgstr ""
"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation "
"node. Det giver kun navigationsdata."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14575,6 +14688,14 @@ msgstr "Du skal bruge en gyldig udvidelse."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -14623,6 +14744,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 6d57f3dcad..b0ca136093 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -71,12 +71,13 @@
# Stephan Kerbl <stephankerbl@gmail.com>, 2021.
# Philipp Wabnitz <philipp.wabnitz@s2011.tu-chemnitz.de>, 2021.
# jmih03 <joerni@mail.de>, 2021.
+# Dominik Moos <dominik.moos@protonmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-06 06:47+0000\n"
-"Last-Translator: So Wieso <sowieso@dukun.de>\n"
+"PO-Revision-Date: 2021-08-27 08:25+0000\n"
+"Last-Translator: Dominik Moos <dominik.moos@protonmail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
"Language: de\n"
@@ -84,7 +85,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -433,13 +434,11 @@ msgstr "Einfügen"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "‚%s‘ kann nicht geöffnet werden."
+msgstr "Node ‚%s‘"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "Animation"
@@ -449,9 +448,8 @@ msgstr "AnimationPlayer kann sich nicht selbst animieren, nur andere Objekte."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Eigenschaft ‚%s‘ existiert nicht."
+msgstr "Eigenschaft ‚%s‘"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1092,7 +1090,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Abhängigkeiten"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ressource"
@@ -1756,13 +1754,13 @@ msgstr ""
"Bitte ‚Import Pvrtc‘ in den Projekteinstellungen aktivieren oder ‚Driver "
"Fallback Enabled‘ ausschalten."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Selbst konfigurierte Debug-Exportvorlage nicht gefunden."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1942,7 +1940,7 @@ msgstr "Als aktuell auswählen"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr "Import"
+msgstr "Importieren"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -2149,7 +2147,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Importiere Nutzerinhalte erneut"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Oben"
@@ -2386,6 +2384,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Dreht sich wenn das Editorfenster neu gezeichnet wird.\n"
+"Fortlaufendes Aktualisieren ist aktiviert, was den Energieverbrauch erhöht. "
+"Zum Deaktivieren klicken."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2664,6 +2665,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Die aktuelle Szene ist nicht gespeichert. Trotzdem öffnen?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Rückgängig machen"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Wiederherstellen"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
"Szene kann nicht neu geladen werden, wenn sie vorher nicht gespeichert wurde."
@@ -3361,6 +3388,11 @@ msgid "Merge With Existing"
msgstr "Mit existierendem vereinen"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Transformation bearbeiten"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Skript öffnen und ausführen"
@@ -3395,9 +3427,8 @@ msgid "Select"
msgstr "Auswählen"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Aktuelles auswählen"
+msgstr "Aktuelle auswählen"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3620,6 +3651,10 @@ msgstr ""
"Die ausgewählte Ressource (%s) stimmt mit keinem erwarteten Typ dieser "
"Eigenschaft (%s) überein."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Einzigartig machen"
@@ -3912,14 +3947,12 @@ msgid "Download from:"
msgstr "Herunterladen von:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Im Browser ausführen"
+msgstr "In Web-Browser öffnen"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Fehlermeldung kopieren"
+msgstr "Mirror-URL kopieren"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -5730,6 +5763,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem „%s“ zu (%d, d%) verschieben"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Sperren ausgewählt"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Gruppe"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6589,7 +6634,6 @@ msgid "Create Simplified Convex Collision Sibling"
msgstr "Vereinfachtes konvexes Kollisionsnachbarelement erzeugen"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a simplified convex collision shape.\n"
"This is similar to single collision shape, but can result in a simpler "
@@ -6604,7 +6648,6 @@ msgid "Create Multiple Convex Collision Siblings"
msgstr "Mehrere konvexe Kollisionsunterelemente erzeugen"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
@@ -6679,7 +6722,13 @@ msgid "Remove Selected Item"
msgstr "Ausgewähltes Element entfernen"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Aus Szene importieren"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Aus Szene importieren"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7273,6 +7322,16 @@ msgstr "Generiere Punkte"
msgid "Flip Portal"
msgstr "Portal umdrehen"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Transform leeren"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Erzeuge Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7779,12 +7838,14 @@ msgid "Skeleton2D"
msgstr "Skelett2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Ruhe-Pose erstellen (aus Knochen)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Kochen in Ruhe-Pose setzen"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Kochen in Ruhe-Pose setzen"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Überschreiben"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7811,6 +7872,71 @@ msgid "Perspective"
msgstr "Perspektivisch"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektivisch"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektivisch"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektivisch"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektivisch"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Senkrecht"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektivisch"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformation abgebrochen."
@@ -7918,42 +8044,22 @@ msgid "Bottom View."
msgstr "Sicht von unten."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Unten"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Sicht von links."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Links"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Sicht von Rechts."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Rechts"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Sicht von vorne."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Vorne"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Sicht von hinten."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Hinten"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Transform auf Sicht ausrichten"
@@ -8228,6 +8334,11 @@ msgid "View Portal Culling"
msgstr "Portal-Culling anzeigen"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Portal-Culling anzeigen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Einstellungen…"
@@ -8293,8 +8404,9 @@ msgid "Post"
msgstr "Nachher"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Namenloser Manipulator"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Unbenanntes Projekt"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8620,7 +8732,7 @@ msgstr "Am Importieren von Elementen {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Updating the editor"
-msgstr "Den Editor aktualisieren?"
+msgstr "Am Aktualisieren des Editors"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Finalizing"
@@ -8753,6 +8865,9 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Einen Thementyp aus der Liste auswählen um dessen Elementen zu bearbeiten.\n"
+"Weiter kann ein eigener Typ hinzugefügt oder ein Typ inklusive seiner "
+"Elemente aus einem andern Thema importiert werden."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8783,6 +8898,9 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Dieser Thementyp ist leer.\n"
+"Zusätzliche Elemente können manuell oder durch Importieren aus einem andern "
+"Thema hinzugefügt werden."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -9715,7 +9833,7 @@ msgstr "UniformRef-Name geändert"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
-msgstr "Eckpunkt"
+msgstr "Vertex"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Fragment"
@@ -11001,7 +11119,7 @@ msgstr "Projekt ausführen"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr "Scannen"
+msgstr "Durchsuchen"
#: editor/project_manager.cpp
msgid "Scan Projects"
@@ -11297,7 +11415,7 @@ msgstr "Ressourcen-Umleitung entfernen"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap Option"
-msgstr "Ressourcen-Umleitungsoption entfernen"
+msgstr "Ressourcen-Neuzuordungsoption entfernen"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter"
@@ -12426,14 +12544,22 @@ msgid "Change Ray Shape Length"
msgstr "Ändere Länge der Strahlenform"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Kurvenpunktposition festlegen"
+msgstr "Room-Point-Position festlegen"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Kurvenpunktposition festlegen"
+msgstr "Portal-Point-Position festlegen"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Zylinderformradius ändern"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Kurven-Eingangsposition festlegen"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12717,6 +12843,11 @@ msgstr "Lightmaps auftragen"
msgid "Class name can't be a reserved keyword"
msgstr "Der Klassenname kann nicht ein reserviertes Schlüsselwort sein"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Auswahl füllen"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Ende des inneren Exception-Stack-Traces"
@@ -13205,68 +13336,68 @@ msgstr "VisualScript suchen"
msgid "Get %s"
msgstr "%s abrufen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Paketname fehlt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Paketsegmente dürfen keine Länge gleich Null haben."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Das Zeichen ‚%s‘ ist in Android-Anwendungspaketnamen nicht gestattet."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Eine Ziffer kann nicht das erste Zeichen eines Paketsegments sein."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Das Zeichen ‚%s‘ kann nicht das erste Zeichen in einem Paketsegment sein."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Das Paket muss mindestens einen Punkt-Unterteiler ‚.‘ haben."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Gerät aus Liste auswählen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "Läuft auf %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "APK exportieren…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "Am Deinstallieren…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "Am Installieren auf Gerät, bitte warten..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Konnte Installation auf Gerät nicht durchführen: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "Auf Gerät ausführen…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "Ließ sich nicht auf Gerät ausführen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Das ‚apksigner‘-Hilfswerkzeug konnte nicht gefunden werden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13274,7 +13405,7 @@ msgstr ""
"Es wurde keine Android-Buildvorlage für dieses Projekt installiert. Es kann "
"im Projektmenü installiert werden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13282,13 +13413,13 @@ msgstr ""
"Die drei Einstellungen Debug Keystore, Debug User und Debug Password müssen "
"entweder alle angegeben, oder alle nicht angegeben sein."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Debug-Keystore wurde weder in den Editoreinstellungen noch in der Vorlage "
"konfiguriert."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13296,54 +13427,54 @@ msgstr ""
"Die drei Einstellungen Release Keystore, Release User und Release Password "
"müssen entweder alle angegeben, oder alle nicht angegeben sein."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Release-Keystore wurde nicht korrekt konfiguriert in den Exporteinstellungen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Es wird ein gültiger Android-SDK-Pfad in den Editoreinstellungen benötigt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Ungültiger Android-SDK-Pfad in den Editoreinstellungen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "‚platform-tools‘-Verzeichnis fehlt!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"‚adb‘-Anwendung der Android-SDK-Platform-Tools konnte nicht gefunden werden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Schauen Sie im Android-SDK-Verzeichnis das in den Editoreinstellungen "
"angegeben wurde nach."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "‚build-tools‘-Verzeichnis fehlt!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"‚apksigner‘-Anwendung der Android-SDK-Build-Tools konnte nicht gefunden "
"werden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Ungültiger öffentlicher Schlüssel für APK-Erweiterung."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Ungültiger Paketname:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13351,38 +13482,23 @@ msgstr ""
"Ungültiges „GodotPaymentV3“-Modul eingebunden in den „android/modules“-"
"Projekteinstellungen (wurde in Godot 3.2.2 geändert).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"„Use Custom Build“ muss aktiviert werden um die Plugins nutzen zu können."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"„Degrees Of Freedom“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ "
-"gesetzt wurde."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"„Hand Tracking“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ "
"gesetzt wurde."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"„Focus Awareness“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ "
-"gesetzt wurde."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13393,54 +13509,54 @@ msgstr ""
"Ist das Programm im Android SDK build-tools-Verzeichnis vorhanden?\n"
"Das resultierende %s ist nicht signiert."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "Signiere Debug-Build %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "Signiere Release-Build %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "‚apksigner‘ gab Fehlercode #%d zurück"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "Verifiziere %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "‚apksigner‘-Verifizierung von %s fehlgeschlagen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Exportiere für Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Ungültiger Dateiname. Android App Bundles benötigen .aab als "
"Dateinamenendung."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK-Expansion ist nicht kompatibel mit Android App Bundles."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
"Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "Nicht unterstütztes Exportformat!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13449,7 +13565,7 @@ msgstr ""
"existieren keine Versionsinformation für sie. Neuinstallation im ‚Projekt‘-"
"Menü benötigt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13461,26 +13577,26 @@ msgstr ""
" Godot-Version: %s\n"
"Bitte Android-Build-Vorlage im ‚Projekt‘-Menü neu installieren."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
"Kann res://android/build/res/*.xml Dateien nicht mit Projektnamen "
"überschreiben"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "Konnte Projektdateien nicht als Gradle-Projekt exportieren\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "Konnte Expansion-Package-Datei nicht schreiben!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Baue Android-Projekt (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13490,11 +13606,11 @@ msgstr ""
"Alternativ befindet sich die Android-Build-Dokumentation auf docs."
"godotengine.org."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Verschiebe Ausgabe"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13502,15 +13618,15 @@ msgstr ""
"Exportdatei kann nicht kopiert und umbenannt werden. Fehlermeldungen sollten "
"im Gradle Projektverzeichnis erscheinen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr "Paket nicht gefunden: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Erzeuge APK…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13518,7 +13634,7 @@ msgstr ""
"Konnte keine APK-Vorlage zum Exportieren finden:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13530,19 +13646,19 @@ msgstr ""
"Es muss entweder eine Exportvorlage mit den allen benötigten Bibliotheken "
"gebaut werden oder die angegebenen Architekturen müssen abgewählt werden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Füge Dateien hinzu…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "Projektdateien konnten nicht exportiert werden"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Richte APK aus..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "Temporäres unausgerichtetes APK konnte nicht entpackt werden."
@@ -14093,6 +14209,14 @@ msgstr ""
"NavigationMeshInstance muss ein Unterobjekt erster oder zweiter Ordnung "
"eines Navigation-Nodes sein. Es liefert nur Navigationsinformationen."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14237,36 +14361,46 @@ msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"RoomList-Pfad ist ungültig.\n"
+"Wurde der RoomList-Zweig im RoomManager zugewiesen?"
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList einhält keine Rooms, breche ab."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Falsch benannte Nodes entdeckt, siehe Log-Ausgabe für Details. Breche ab."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
-msgstr ""
+msgstr "Portal-Link-Room nicht gefunden, siehe Log-Ausgabe für Details."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Portal-Autolink fehlgeschlagen, siehe Log-Ausgabe für Details.\n"
+"Zeigt das Portal nach außen vom Quellraum ausgesehen?"
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Raumüberlappung festgestellt, Kameras werden im Überlappungsbereich "
+"wahrscheinlich nicht richtig funktionieren.\n"
+"Siehe Log-Ausgabe für Details."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Fehler beim Berechnen der Raumbegrenzungen.\n"
+"Enthalten alle Räume Geometrie oder manuelle Begrenzungen?"
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14440,6 +14574,14 @@ msgstr "Eine gültige Datei-Endung muss verwendet werden."
msgid "Enable grid minimap."
msgstr "Gitterübersichtskarte aktivieren."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14497,6 +14639,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"Die Größe des Viewports muss größer als 0 sein um etwas rendern zu können."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14555,6 +14701,41 @@ msgstr "Zuweisung an Uniform."
msgid "Constants cannot be modified."
msgstr "Konstanten können nicht verändert werden."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Ruhe-Pose erstellen (aus Knochen)"
+
+#~ msgid "Bottom"
+#~ msgstr "Unten"
+
+#~ msgid "Left"
+#~ msgstr "Links"
+
+#~ msgid "Right"
+#~ msgstr "Rechts"
+
+#~ msgid "Front"
+#~ msgstr "Vorne"
+
+#~ msgid "Rear"
+#~ msgstr "Hinten"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Namenloser Manipulator"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "„Degrees Of Freedom“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile "
+#~ "VR“ gesetzt wurde."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "„Focus Awareness“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ "
+#~ "gesetzt wurde."
+
#~ msgid "Package Contents:"
#~ msgstr "Paketinhalte:"
@@ -16714,9 +16895,6 @@ msgstr "Konstanten können nicht verändert werden."
#~ msgid "Images:"
#~ msgstr "Bilder:"
-#~ msgid "Group"
-#~ msgstr "Gruppe"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Audio-Umwandlungs-Modus: (.wav-Dateien):"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index 0f3b125484..47aa1d3a22 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -987,7 +987,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1616,13 +1616,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1992,7 +1992,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2470,6 +2470,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3093,6 +3117,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3333,6 +3361,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5373,6 +5405,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6271,7 +6313,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6855,6 +6901,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7349,11 +7403,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7381,6 +7435,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7488,42 +7596,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7785,6 +7873,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7850,7 +7942,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11750,6 +11842,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12030,6 +12130,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12496,159 +12600,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12656,57 +12749,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12714,54 +12807,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12769,19 +12862,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13231,6 +13324,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13520,6 +13621,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13560,6 +13669,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 93b5941f64..ea1c91f4b5 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -1041,7 +1041,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Εξαρτήσεις"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Πόρος"
@@ -1709,13 +1709,13 @@ msgstr ""
"Ενεργοποιήστε το 'Εισαγωγή PVRTC' στις Ρυθμίσεις Έργου, ή απενεργοποιήστε το "
"'Ενεργοποίηση εναλλαγής οδηγού'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Δεν βρέθηκε προσαρμοσμένο πακέτο αποσφαλμάτωσης."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2099,7 +2099,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Επαν)εισαγωγή"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Κορυφή"
@@ -2614,6 +2614,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Η τρέχουσα σκηνή δεν έχει αποθηκευτεί. Συνέχεια με το άνοιγμα;"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Αναίρεση"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Ακύρωση αναίρεσης"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
"Δεν είναι δυνατό να φορτώσετε εκ νέου μια σκηνή που δεν αποθηκεύτηκε ποτέ."
@@ -3319,6 +3345,11 @@ msgid "Merge With Existing"
msgstr "Συγχώνευση με υπάρχων"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Αλλαγή Μετασχηματισμού Κίνησης"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Άνοιξε & Τρέξε μία δέσμη ενεργειών"
@@ -3575,6 +3606,10 @@ msgstr ""
"Ο επιλεγμένος πόρος (%s) δεν ταιριάζει σε κανέναν αναμενόμενο τύπο γι'αυτήν "
"την ιδιότητα (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Κάνε μοναδικό"
@@ -5722,6 +5757,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Μετακίνηση CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Κλείδωσε το Επιλεγμένο"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Ομάδες"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6678,7 +6725,13 @@ msgid "Remove Selected Item"
msgstr "Αφαίρεση του επιλεγμένου στοιοχείου"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Εισαγωγή από την σκηνή"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Εισαγωγή από την σκηνή"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7283,6 +7336,16 @@ msgstr "Αριθμός δημιουργημένων σημείων:"
msgid "Flip Portal"
msgstr "Αναστροφή Οριζόντια"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Εκκαθάριση Μετασχηματισμού"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Δημιουργία κόμβου"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "Το AnimationTree δεν έχει διαδρομή σε AnimationPlayer"
@@ -7792,12 +7855,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Κάνε Στάση Αδράνειας (Από Οστά)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Θέσε Οστά σε Στάση Αδράνειας"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Θέσε Οστά σε Στάση Αδράνειας"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Αντικατάσταση"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7824,6 +7889,71 @@ msgid "Perspective"
msgstr "Προοπτική"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Προοπτική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Προοπτική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Προοπτική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Προοπτική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Αξονομετρική"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Προοπτική"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Ο μετασχηματισμός ματαιώθηκε."
@@ -7943,42 +8073,22 @@ msgid "Bottom View."
msgstr "Κάτω όψη."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Κάτω"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Αριστερή όψη."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Αριστερά"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Δεξιά όψη."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Δεξιά"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Εμπρόσθια όψη."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Μπροστά"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Πίσω όψη."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Πίσω"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Στοίχιση Μετασχηματισμού με Προβολή"
@@ -8254,6 +8364,11 @@ msgid "View Portal Culling"
msgstr "Ρυθμίσεις οπτικής γωνίας"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Ρυθμίσεις οπτικής γωνίας"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Ρυθμίσεις..."
@@ -8319,8 +8434,9 @@ msgid "Post"
msgstr "Μετά"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Ανώνυμο μαραφέτι"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Ανώνυμο έργο"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12528,6 +12644,16 @@ msgstr "Ορισμός θέσης σημείου καμπύλης"
msgid "Set Portal Point Position"
msgstr "Ορισμός θέσης σημείου καμπύλης"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Αλλαγή Ακτίνας Σχήματος Κυλίνδρου"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Ορισμός θέσης εισόδου καμπύλης"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Αλλαγή Ακτίνας Κυλίνδρου"
@@ -12818,6 +12944,11 @@ msgstr "Τοποθέτηση φώτων:"
msgid "Class name can't be a reserved keyword"
msgstr "Το όνομα της κλάσης δεν μπορεί να είναι λέξη-κλειδί"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Γέμισμα Επιλογής"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Τέλος ιχνηλάτησης στοίβας εσωτερικής εξαίρεσης"
@@ -13309,77 +13440,77 @@ msgstr "Αναζήτηση VisualScript"
msgid "Get %s"
msgstr "Διάβασε %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Το όνομα του πακέτου λείπει."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Τα τμήματα του πακέτου πρέπει να έχουν μη μηδενικό μήκος."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"Ο χαρακτήρας «%s» απαγορεύεται στο όνομα πακέτου των εφαρμογών Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
"Ένα ψηφίο δεν μπορεί να είναι ο πρώτος χαρακτήρας σε ένα τμήμα πακέτου."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Ο χαρακτήρας '%s' δεν μπορεί να είναι ο πρώτος χαρακτήρας σε ένα τμήμα "
"πακέτου."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Το πακέτο πρέπει να έχει τουλάχιστον έναν '.' διαχωριστή."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Επιλέξτε συσκευή από την λίστα"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Εξαγωγή Όλων"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Απεγκατάσταση"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Ανάκτηση δεδοένων κατοπτρισμού, παρακαλώ περιμένετε..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Δεν ήταν δυνατή η δημιουργία στιγμιοτύπου της σκηνής!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Εκτέλεση Προσαρμοσμένης Δέσμης Ενεργειών..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Αδύνατη η δημιουργία φακέλου."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13387,75 +13518,75 @@ msgstr ""
"Λείπει το πρότυπο δόμησης Android από το έργο. Εγκαταστήστε το από το μενού "
"«Έργο»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Το «debug keystore» δεν έχει καθοριστεί στις Ρυθμίσεις Επεξεργαστή ή την "
"διαμόρφωση."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Εσφαλμένη ρύθμιση αποθετηρίου κλειδιών διανομής στην διαμόρφωση εξαγωγής."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις "
"Επεξεργαστή."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις "
"Επεξεργαστή."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις "
"Επεξεργαστή."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Μη έγκυρο δημόσιο κλειδί (public key) για επέκταση APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Άκυρο όνομα πακέτου:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13463,38 +13594,23 @@ msgstr ""
"Εσφαλμένη λειτουργική μονάδα «GodotPaymentV3» στην ρύθμιση εργου «Android/"
"Modules» (άλλαξε στην Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"Η επιλογή «Use Custom Build» πρέπει να ενεργοποιηθεί για χρήση προσθέτων."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"Το «Degrees Of Freedom» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus "
-"Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"Το «Hand Tracking» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus Mobile "
"VR»."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"Το «Focus Awareness» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus "
-"Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13502,57 +13618,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Σάρωση αρχείων,\n"
"Παρακαλώ περιμένετε..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Σφάλμα κατά το άνοιγμα προτύπου για εξαγωγή:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Προσθήκη %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Εξαγωγή Όλων"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13560,7 +13676,7 @@ msgstr ""
"Δοκιμή δόμησης από προσαρμοσμένο πρότυπο δόμησης, αλλά δεν υπάρχουν "
"πληροφορίες έκδοσης. Παρακαλούμε κάντε επανεγκατάσταση από το μενού «Έργο»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13573,26 +13689,26 @@ msgstr ""
"Παρακαλούμε να επανεγκαταστήσετε το πρότυπο δόμησης Android από το μενού "
"«Έργο»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Απέτυχε η εγγραφή σε αρχείο:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Δόμηση Έργου Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13601,34 +13717,34 @@ msgstr ""
"Εναλλακτικά, επισκεφτείτε τη σελίδα docs.godotengine.org για τεκμηρίωση "
"δόμησης Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Δεν βρέθηκε η κίνηση: «%s»"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Δημιουργία περιγραμμάτων..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Σφάλμα κατά το άνοιγμα προτύπου για εξαγωγή:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13636,21 +13752,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Προσθήκη %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Απέτυχε η εγγραφή σε αρχείο:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14197,6 +14313,14 @@ msgstr ""
"Ένας κόμβος τύπου στιγμιοτύπου πλέγματος πλοήγησης πρέπει να κληρονομεί έναν "
"κόμβο τύπου πλοήγηση, διότι διαθέτει μόνο δεδομένα πλοήγησης."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14525,6 +14649,14 @@ msgstr "Απαιτείται η χρήση έγκυρης επέκτασης."
msgid "Enable grid minimap."
msgstr "Ενεργοποίηση κουμπώματος"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14582,6 +14714,10 @@ msgstr ""
"Το μέγεθος της οπτικής γωνίας πρέπει να είναι μεγαλύτερο του 0 για να γίνει "
"απόδοση."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14633,6 +14769,41 @@ msgstr "Ανάθεση σε ενιαία μεταβλητή."
msgid "Constants cannot be modified."
msgstr "Οι σταθερές δεν μπορούν να τροποποιηθούν."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Κάνε Στάση Αδράνειας (Από Οστά)"
+
+#~ msgid "Bottom"
+#~ msgstr "Κάτω"
+
+#~ msgid "Left"
+#~ msgstr "Αριστερά"
+
+#~ msgid "Right"
+#~ msgstr "Δεξιά"
+
+#~ msgid "Front"
+#~ msgstr "Μπροστά"
+
+#~ msgid "Rear"
+#~ msgstr "Πίσω"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Ανώνυμο μαραφέτι"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "Το «Degrees Of Freedom» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus "
+#~ "Mobile VR»."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "Το «Focus Awareness» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus "
+#~ "Mobile VR»."
+
#~ msgid "Package Contents:"
#~ msgstr "Περιεχόμενα Πακέτου:"
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 9f8c869bee..5987003cb7 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -17,7 +17,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2021-07-31 19:44+0000\n"
+"PO-Revision-Date: 2021-08-14 19:04+0000\n"
"Last-Translator: mourning20s <mourning20s@protonmail.com>\n"
"Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/"
"godot/eo/>\n"
@@ -374,13 +374,12 @@ msgstr "Animado Enmetu"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr ""
+msgstr "nodo '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animacio"
+msgstr "animacio"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -388,9 +387,8 @@ msgstr "AnimationPlayer ne povas animi si mem, nur aliajn ludantojn."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Atributo"
+msgstr "atributo"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -601,7 +599,7 @@ msgstr "Iri al Antaŭa Paŝo"
#: editor/animation_track_editor.cpp
msgid "Apply Reset"
-msgstr ""
+msgstr "Almeti rekomencigon"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -620,9 +618,8 @@ msgid "Use Bezier Curves"
msgstr "Uzu Bezier-kurbojn"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Alglui trakojn"
+msgstr "Krei RESET-trako(j)n"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -947,9 +944,8 @@ msgid "Edit..."
msgstr "Redakti..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Iru al metodo"
+msgstr "Iri al metodo"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -969,7 +965,7 @@ msgstr "Ne rezultoj por \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Ne priskribo disponeblas por %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1029,7 +1025,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependecoj"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Rimedo"
@@ -1069,17 +1065,16 @@ msgid "Owners Of:"
msgstr "Proprietuloj de:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Forigi selektajn dosierojn el la projekto? (ne malfaro)\n"
-"Vi povas trovi la forigajn dosierojn en la sistema rubujo por restaŭri ilin."
+"Forigi la elektitajn dosierojn el la projekto? (ne malfareblas)\n"
+"Depende de la agordo de via dosiersistemo, la dosierojn aŭ movos al rubujo "
+"de la sistemo aŭ forigos ĉiame."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1087,9 +1082,11 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"La forigotaj dosieroj bezonas por ke aliaj risurcoj funkciadi.\n"
-"Forigu ilin iel? (ne malfaro)\n"
-"Vi povas trovi la forigajn dosierojn en la sistema rubujo por restaŭri ilin."
+"La forigotaj dosieroj estas bezoni de aliaj risurcoj por ke ili eblas "
+"funkciadi.\n"
+"Forigi ilin iel? (ne malfareblas)\n"
+"Depende de la agordo de via dosiersistemo, la dosierojn aŭ movos al rubujo "
+"de la sistemo aŭ forigos ĉiame."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1259,55 +1256,51 @@ msgid "Licenses"
msgstr "Permesiloj"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Eraro dum malfermi pakaĵan dosieron (ne estas en ZIP-formo)."
+msgstr ""
+"Eraro dum malfermi pakaĵan dosieron por \"%s\" (ne estas de ZIP-formo)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
msgstr "%s (jam ekzistante)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"Enhavaĵoj de pakaĵo \"%s\" - %d dosiero(j) konfliktas kun via projekto:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "Enhavaĵoj de pakaĵo \"%s\" - Ne dosiero konfliktas kun via projekto:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr "Maldensigas havaĵojn"
+msgstr "Malkompaktigas havaĵojn"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "La jenaj dosieroj malplenumis malkompaktigi el la pakaĵo:"
+msgstr "La jenajn dosierojn malsukcesis malkompaktigi el la pakaĵo \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Kaj %s pli dosieroj."
+msgstr "(kaj %s pli dosieroj)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pakaĵo instalis sukcese!"
+msgstr "Pakaĵo \"%s\" instalis sukcese!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Success!"
-msgstr "Sukcese!"
+msgstr "Sukceso!"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
msgstr "Instali"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Pakaĵa instalilo"
+msgstr "Instalilo de pakaĵo"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1334,9 +1327,8 @@ msgid "Toggle Audio Bus Mute"
msgstr "Baskuli la muta reĝimo de la aŭdia buso"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Toggle Audio Bus Bypass Effects"
-msgstr "Baskuli preterpasajn efektojn de aŭdia buso"
+msgstr "Baskuli la preterpasajn efektojn de aŭdbuso"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -1371,9 +1363,8 @@ msgid "Bypass"
msgstr "Preterpase"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Busaj agordoj"
+msgstr "Agordoj de buso"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1539,13 +1530,13 @@ msgid "Can't add autoload:"
msgstr "Ne aldoneblas aŭtoŝargon:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "Dosiero ne ekzistas."
+msgstr "%s estas invalida dosierindiko. Dosiero ne ekzistas."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
msgstr ""
+"%s estas invalida dosierindiko. Ne estas ĉe risurca dosierindiko (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1569,9 +1560,8 @@ msgid "Name"
msgstr "Nomo"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Renomi variablon"
+msgstr "Malloka variablo"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1695,22 +1685,21 @@ msgstr ""
"Ebligu 'Import Pvrtc' en projektaj agordoj, aŭ malŝalti 'Driver Fallback "
"Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Propra sencimiga ŝablonon ne trovitis."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
msgstr "Propra eldona ŝablono ne trovitis."
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-#, fuzzy
msgid "Template file not found:"
-msgstr "Ŝablonan dosieron ne trovitis:"
+msgstr "Ŝablonan dosieron ne trovis:"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -1731,7 +1720,7 @@ msgstr "Biblioteko de havaĵoj"
#: editor/editor_feature_profile.cpp
msgid "Scene Tree Editing"
-msgstr "Redaktado de scena arbo"
+msgstr "Redaktado de scenoarbo"
#: editor/editor_feature_profile.cpp
msgid "Node Dock"
@@ -1747,48 +1736,51 @@ msgstr "Doko de enporto"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Permesas vidi kaj redakti 3D-scenojn."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Permesas redakti skriptojn per la integrita skript-redaktilo."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Provizas integritan atingon al la Biblioteko de havaĵoj."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Permesas redakti la hierarkion de nodoj en la Sceno-doko."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Permesas labori la signalojn kaj la grupojn de la nodo elektitas en la Sceno-"
+"doko."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Permesas esplori la lokan dosiersistemon per dediĉita doko."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Permesas agordi enportajn agordojn por individuaj havaĵoj. Bezonas ke la "
+"doko Dosiersistemo funkcias."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Aktuala)"
+msgstr "(aktuale)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(nenio)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Forigi aktuale elektitan profilon '%s'? Ne malfareblas."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1819,19 +1811,16 @@ msgid "Enable Contextual Editor"
msgstr "Ŝalti kuntekstan redaktilon"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Maletendi ĉiajn atributojn"
+msgstr "Atributoj de la klaso:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Ŝaltitaj eblecoj:"
+msgstr "Ĉefa eblaĵoj:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Ŝaltitaj klasoj:"
+msgstr "Nodoj kaj klasoj:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1848,7 +1837,6 @@ msgid "Error saving profile to path: '%s'."
msgstr "Eraras konservi profilon al dosierindiko: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
msgstr "Rekomencigi al defaŭltoj"
@@ -1857,14 +1845,12 @@ msgid "Current Profile:"
msgstr "Aktuala profilo:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Viŝi profilon"
+msgstr "Krei profilon"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Forigi punkton"
+msgstr "Forigi profilon"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1884,18 +1870,17 @@ msgid "Export"
msgstr "Eksporti"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Aktuala profilo:"
+msgstr "Agordi elektitan profilon:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Agordoj de klaso:"
+msgstr "Pli agordoj:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Krei aŭ enporti profilon por redakti disponeblajn klasojn kaj atributojn."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1922,7 +1907,6 @@ msgid "Select Current Folder"
msgstr "Elekti aktualan dosierujon"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "Dosiero ekzistas, superskribi?"
@@ -2085,7 +2069,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)enportas havaĵoj"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Supro"
@@ -2242,7 +2226,7 @@ msgstr "Atributo:"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Set %s"
-msgstr ""
+msgstr "Agordis %s"
#: editor/editor_inspector.cpp
msgid "Set Multiple:"
@@ -2322,6 +2306,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Rotacius kiam la fenestro de la redaktilo redesegniĝus.\n"
+"'Ĝisdatigi konstante' estas ŝaltita, kiu eblas pliiĝi kurentuzado. Alklaku "
+"por malŝalti ĝin."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2358,19 +2345,16 @@ msgid "Can't open file for writing:"
msgstr "Ne malfermeblas dosieron por skribi:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Requested file format unknown:"
-msgstr "Petitan dosierformon senkonatas:"
+msgstr "Petitan dosierformon nekonas:"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Error while saving."
-msgstr "Eraro dum la konservo."
+msgstr "Eraro dum la konservado."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Can't open '%s'. The file could have been moved or deleted."
-msgstr "Ne malfermeblas '%s'. La dosiero estus movita aŭ forigita."
+msgstr "Ne malfermeblas '%s'. La dosiero eble estis movita aŭ forigita."
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
@@ -2559,35 +2543,34 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"La aktula sceno havas ne radika nodo, sed %d modifita(j) ekstera(j) "
+"risurco(j) konserviĝis iel."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Radika nodo estas necesita por konservi la scenon."
+msgstr ""
+"Radikan nodon bezonas por konservi la scenon. Vi eblas aldoni radikan nodon "
+"per la Scenoarbo-doko."
#: editor/editor_node.cpp
msgid "Save Scene As..."
msgstr "Konservi sceno kiel..."
#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "This operation can't be done without a scene."
-msgstr "Ĉi tiu funkciado ne povas fari sen sceno."
+msgstr "Ĉi tian operacion ne povas fari sen sceno."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Export Mesh Library"
-msgstr "Eksporti maŝajn bibliotekon"
+msgstr "Eksporti bibliotekon de maŝoj"
#: editor/editor_node.cpp
-#, fuzzy
msgid "This operation can't be done without a root node."
-msgstr "Ĉi tiu funkciado ne povas fari sen radika nodo."
+msgstr "Ĉi tian operacion ne povas fari sen radika nodo."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Export Tile Set"
msgstr "Eksporti kahelaron"
@@ -2600,13 +2583,38 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Nuna sceno ne estas konservita. Malfermi ĉuikaze?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Malfari"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refari"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Ne povas reŝarĝi scenon, kiu konservis neniam."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Saved Scene"
-msgstr "Konservi scenon"
+msgstr "Reŝargi konservitan scenon"
#: editor/editor_node.cpp
msgid ""
@@ -2650,13 +2658,12 @@ msgstr ""
"Konservi ŝanĝojn al la jena(j) sceno(j) antaŭ malfermi projektan mastrumilon?"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
msgstr ""
-"Tiu ĉi opcio estas evitinda. Statoj en kiu aktualigo deviĝi estas nun "
-"konsideri kiel cimo. Bonvolu raporti."
+"Tia ĉi opcio estas evitinda. Statoj en kiu bezonus ĝisdatigo nun konsideras "
+"kiel cimo. Bonvolu raporti."
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -2707,13 +2714,12 @@ msgstr ""
"estas en ila reĝimo."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
-"Sceno '%s' aŭtomate enportiĝis, do ne eblas redakti ĝin.\n"
-"Por ŝanĝu ĝin, nova heredita sceno povas kreiĝi."
+"Sceno '%s' aŭtomate enportiĝis, do ĝin ne eblas modifi.\n"
+"Por ŝanĝi ĝin, povas krei novan hereditan scenon."
#: editor/editor_node.cpp
msgid ""
@@ -2908,9 +2914,8 @@ msgid "Redo"
msgstr "Refari"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Miscellaneous project or scene-wide tools."
-msgstr "Diversa projekto aŭ sceno-abundaj iloj."
+msgstr "Diversa projekto aŭ tut-scenaj iloj."
#: editor/editor_node.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
@@ -2922,14 +2927,12 @@ msgid "Project Settings..."
msgstr "Projektaj agordoj..."
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Version Control"
msgstr "Versikontrolo"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Set Up Version Control"
-msgstr "Altlevi versitenan sistemon"
+msgstr "Agordi versikontrolon"
#: editor/editor_node.cpp
msgid "Shut Down Version Control"
@@ -2952,14 +2955,12 @@ msgid "Tools"
msgstr "Iloj"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Orphan Resource Explorer..."
-msgstr "Eksplorilo da orfaj risurcoj..."
+msgstr "Eksplorilo de orfaj risurcoj..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Renomi projekton"
+msgstr "Renomi aktualan projekton"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -2983,14 +2984,17 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
+"Kiam ĉi tiu opcio ŝaltus, uzado de unu-alklaka disponigo igos la "
+"komandodosieron provus konekti al la IP-adreso de ĉi tiu komputilo por ke la "
+"rulata projekto eblus sencimigi.\n"
+"Ĉi tiu opcio destiniĝas por fora sencimigado (tipe kun portebla aparato).\n"
+"Vi ne devas ŝalti ĝin por uzi la GDScript-sencimigilon loke."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Small Deploy with Network Filesystem"
-msgstr "Eta disponigo kun reta dosiersistemo"
+msgstr "Malgranda disponigo kun reta dosiersistemo"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, using one-click deploy for Android will only "
"export an executable without the project data.\n"
@@ -2999,53 +3003,51 @@ msgid ""
"On Android, deploying will use the USB cable for faster performance. This "
"option speeds up testing for projects with large assets."
msgstr ""
-"Kiam ĉi tiun agordon estas ŝaltita, eksporti aŭ malfaldi produktos minimuman "
-"plenumeblan dosieron.\n"
-"La dosiersistemon disponigas el la projekto fare de editilo per la reto.\n"
-"En Android, malfaldo uzantos la USB-kablon por pli rapida rendimento. Ĉi tui "
-"agordo rapidigas testadon por ludoj kun larĝa areo."
+"Kiam ĉi tiun agordon ŝaltus, uzado de unu-alklaka disponigo por Android nur "
+"eksportos komandodosieron sen la datumoj de projekto.\n"
+"La dosiersistemo proviziĝos el la projekto per la redaktilo per la reto.\n"
+"Per Android, disponigado uzos la USB-kablon por pli rapida rendimento. Ĉi "
+"tiu opcio rapidigas testadon por projektoj kun grandaj havaĵoj."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
msgstr "Videblaj koliziaj formoj"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
msgstr ""
-"Koliziaj formoj kaj radĵetaj nodoj (por 2D kaj 3D) estos videblaj en la "
-"rulas ludo, se ĉi tiu agordo estas ŝaltita."
+"Kiam ĉi tia opcio ŝaltus, koliziaj formoj kaj radĵetaj nodoj (por 2D kaj 3D) "
+"estos videblaj en la rula projekto."
#: editor/editor_node.cpp
msgid "Visible Navigation"
msgstr "Videbla navigacio"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
msgstr ""
-"Navigaciaj maŝoj kaj poligonoj estos videblaj en la rulas ludo, se ĉi tiu "
-"agordo estas ŝaltita."
+"Kiam ĉi tiu opcio ŝaltus, navigaciaj maŝoj kaj plurlateroj estos videblaj en "
+"la rula projekto."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
msgstr "Sinkronigi ŝanĝojn en sceno"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any changes made to the scene in the editor "
"will be replicated in the running project.\n"
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"Kiam tuin ĉi agordo estas ŝaltita, iuj ŝanĝoj ke faris al la scenon en la "
-"editilo replikos en la rulas ludo.\n"
-"Kiam uzantis malproksime en aparato, estas pli efika kun reta dosiersistemo."
+"Kiam ĉi tiu opcio ŝaltus, iuj ŝanĝoj ke faris al la scenon en la redaktilo "
+"replikos en la rula projekto.\n"
+"Kiam uzantus fore en aparato, tiu estas pli efika kiam la reta dosiersistema "
+"opcio estas ŝaltita."
#: editor/editor_node.cpp
msgid "Synchronize Script Changes"
@@ -3284,6 +3286,11 @@ msgid "Merge With Existing"
msgstr "Kunfandi kun ekzistanta"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Aliigi Transformon de Animado"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Malfermi & ruli skripto"
@@ -3541,6 +3548,10 @@ msgstr ""
"La elektinta risurco (%s) ne kongruas ian atenditan tipon por ĉi tiu "
"atributo (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Farigi unikan"
@@ -5670,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Movi CanvasItem \"%s\" al (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Ŝlosi elektiton"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupoj"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6619,7 +6642,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7207,6 +7234,15 @@ msgstr "Nombrado de generintaj punktoj:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Krei nodon"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7703,12 +7739,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Rekomencigi al defaŭltoj"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Superskribi"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7735,6 +7773,63 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Malsupre maldekstre"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Maldekstra butono"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Dekstra butono"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7851,42 +7946,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8157,6 +8232,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8222,8 +8301,9 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Sennoma projekto"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -11881,7 +11961,7 @@ msgstr "Renomi nodon"
#: editor/scene_tree_editor.cpp
msgid "Scene Tree (Nodes):"
-msgstr "Scena arbo (nodoj):"
+msgstr "Scenoarbo (nodoj):"
#: editor/scene_tree_editor.cpp
msgid "Node Configuration Warning!"
@@ -12263,6 +12343,15 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Krei okludan plurlateron"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12547,6 +12636,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13026,165 +13119,154 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Eksporti..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Malinstali"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Ŝargas, bonvolu atendi..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Ne eble komencas subprocezon!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Rulas propran skripton..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Ne povis krei dosierujon."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13192,61 +13274,61 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Skanas dosierojn,\n"
"Bonvolu atendi..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Aldonas %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13254,57 +13336,57 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Ne eblas redakti project.godot en projekta dosierindiko."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Enhavo de pakaĵo:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Konektas..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13312,21 +13394,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Aldonas %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Ne eble komencas subprocezon!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13781,6 +13863,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14070,6 +14160,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14110,6 +14208,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/es.po b/editor/translations/es.po
index eef4affde3..95a4a08bfd 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -69,11 +69,12 @@
# pabloggomez <pgg2733@gmail.com>, 2021.
# Erick Figueroa <querecuto@hotmail.com>, 2021.
# jonagamerpro1234 ss <js398704@gmail.com>, 2021.
+# davidrogel <david.rogel.pernas@icloud.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
+"PO-Revision-Date: 2021-08-27 08:25+0000\n"
"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
@@ -82,7 +83,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -433,15 +434,13 @@ msgstr "Insertar Animación"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "No se puede abrir '%s'."
+msgstr "nodo '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animación"
+msgstr "animación"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -449,9 +448,8 @@ msgstr "Un AnimationPlayer no puede animarse a sí mismo, solo a otros players."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "No existe la propiedad '%s'."
+msgstr "propiedad '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -690,7 +688,7 @@ msgstr "Crear pista(s) RESET"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
-msgstr "Optimizar animación"
+msgstr "Optimizar Animación"
#: editor/animation_track_editor.cpp
msgid "Max. Linear Error:"
@@ -795,7 +793,7 @@ msgstr "%d coincidencias."
#: editor/code_editor.cpp editor/find_in_files.cpp
msgid "Match Case"
-msgstr "Distinguir mayúsculas y minúsculas"
+msgstr "Coincidir Mayus./Minus."
#: editor/code_editor.cpp editor/find_in_files.cpp
msgid "Whole Words"
@@ -1094,7 +1092,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependencias"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recursos"
@@ -1755,13 +1753,13 @@ msgstr ""
"Activa Import Pvrtc' en Configuración del Proyecto, o desactiva 'Driver "
"Fallback Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "No se encontró la plantilla de depuración personalizada."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2146,7 +2144,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importación de Assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Superior"
@@ -2234,7 +2232,7 @@ msgstr "Buscar en la Ayuda"
#: editor/editor_help_search.cpp
msgid "Case Sensitive"
-msgstr "Respetar mayús/minúsculas"
+msgstr "Respetar Mayus./Minus."
#: editor/editor_help_search.cpp
msgid "Show Hierarchy"
@@ -2383,6 +2381,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Gira cuando la ventana del editor se vuelve a dibujar.\n"
+"Si Update Continuously está habilitado puede incrementarse el consumo. Clica "
+"para deshabilitarlo."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2661,6 +2662,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Escena actual no guardada ¿Abrir de todos modos?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Deshacer"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Rehacer"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "No se puede volver a cargar una escena que nunca se guardó."
@@ -3215,7 +3242,7 @@ msgstr "Apoyar el desarrollo de Godot"
#: editor/editor_node.cpp
msgid "Play the project."
-msgstr "Ejecutar el proyecto."
+msgstr "Reproducir el proyecto."
#: editor/editor_node.cpp
msgid "Play"
@@ -3356,6 +3383,11 @@ msgid "Merge With Existing"
msgstr "Combinar Con Existentes"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Cambiar Transformación de la Animación"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Abrir y Ejecutar un Script"
@@ -3613,6 +3645,10 @@ msgstr ""
"El recurso seleccionado (%s) no coincide con ningún tipo esperado para esta "
"propiedad (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Hacer Único"
@@ -3911,14 +3947,12 @@ msgid "Download from:"
msgstr "Descargar desde:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Ejecutar en Navegador"
+msgstr "Abrir en el Navegador Web"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copiar Error"
+msgstr "Copiar Mirror URL"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -5731,6 +5765,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Mover CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Bloqueo Seleccionado"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupo"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6676,7 +6722,13 @@ msgid "Remove Selected Item"
msgstr "Eliminar Elemento Seleccionado"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importar desde escena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importar desde escena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7274,6 +7326,16 @@ msgstr "Generar puntos"
msgid "Flip Portal"
msgstr "Voltear Portal"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Reestablecer Transformación"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Crear Nodo"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "El AnimationTree no tiene una ruta asignada a un AnimationPlayer"
@@ -7605,15 +7667,15 @@ msgstr "Seleccionar Color"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Convert Case"
-msgstr "Convertir Mayús./Minús."
+msgstr "Convertir Mayus./Minus."
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Uppercase"
-msgstr "Mayúscula"
+msgstr "Mayúsculas"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Lowercase"
-msgstr "Minúscula"
+msgstr "Minúsculas"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Capitalize"
@@ -7777,12 +7839,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Crear Pose de Descanso (Desde Huesos)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Asignar Pose de Descanso a Huesos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Asignar Pose de Descanso a Huesos"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sobreescribir"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7809,6 +7873,71 @@ msgid "Perspective"
msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspectiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformación Abortada."
@@ -7916,42 +8045,22 @@ msgid "Bottom View."
msgstr "Vista Inferior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Abajo"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista Izquierda."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Izquierda"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista Derecha."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Derecha"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Frente"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista Posterior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Detrás"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Alinear la Transformación con la Vista"
@@ -8223,6 +8332,11 @@ msgid "View Portal Culling"
msgstr "Ver Eliminación de Portales"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Ver Eliminación de Portales"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Configuración..."
@@ -8288,8 +8402,9 @@ msgid "Post"
msgstr "Posterior"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo sin nombre"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Proyecto Sin Nombre"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8747,6 +8862,9 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Selecciona un Theme de la lista para editar sus propiedades.\n"
+"Puedes añadir un Theme personalizado o importar un Theme con sus propiedades "
+"desde otro Theme."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8777,6 +8895,8 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Este Theme está vacío.\n"
+"Añade más propiedades manualmente o impórtalas desde otro Theme."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -11567,15 +11687,15 @@ msgstr "snake_case a PascalCase"
#: editor/rename_dialog.cpp
msgid "Case"
-msgstr "Mayús./Minús."
+msgstr "Mayus./Minus."
#: editor/rename_dialog.cpp
msgid "To Lowercase"
-msgstr "A minúsculas"
+msgstr "A Minúsculas"
#: editor/rename_dialog.cpp
msgid "To Uppercase"
-msgstr "A mayúsculas"
+msgstr "A Mayúsculas"
#: editor/rename_dialog.cpp
msgid "Reset"
@@ -12417,14 +12537,22 @@ msgid "Change Ray Shape Length"
msgstr "Cambiar Longitud de la Forma del Rayo"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Establecer Posición de Punto de Curva"
+msgstr "Establecer Posición del Room Point"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Establecer Posición de Punto de Curva"
+msgstr "Establecer Posición del Portal Point"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Cambiar Radio de la Forma del Cilindro"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Establecer Posición de Entrada de Curva"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12711,6 +12839,11 @@ msgstr "Trazar lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr "El nombre de la clase no puede ser una palabra reservada"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Rellenar Selección"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fin del reporte de la pila de excepciones"
@@ -13197,70 +13330,70 @@ msgstr "Buscar en VisualScript"
msgid "Get %s"
msgstr "Obtener %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Falta el nombre del paquete."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Los segmentos del paquete deben ser de largo no nulo."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"El carácter '%s' no está permitido en nombres de paquete de aplicación "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Un dígito no puede ser el primer carácter en un segmento de paquete."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"El carácter '%s' no puede ser el primer carácter en un segmento de paquete."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "El paquete debe tener al menos un '.' como separador."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Seleccionar dispositivo de la lista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "Ejecutar en %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "Exportar APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "Desinstalando..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "Instalando en el dispositivo, espera por favor..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "No se pudo instalar en el dispositivo: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "Ejecutando en el dispositivo..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "No se ha podido ejecutar en el dispositivo."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "No se pudo encontrar la herramienta 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13268,7 +13401,7 @@ msgstr ""
"La plantilla de exportación de Android no esta instalada en el proyecto. "
"Instalala desde el menú de Proyecto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13276,12 +13409,12 @@ msgstr ""
"Deben configurarse los ajustes de Depuración de Claves, Depuración de "
"Usuarios Y Depuración de Contraseñas O ninguno de ellos."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Debug keystore no configurada en Configuración del Editor ni en el preset."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13289,57 +13422,57 @@ msgstr ""
"Deben configurarse los ajustes de Liberación del Almacén de Claves, "
"Liberación del Usuario Y Liberación de la Contraseña O ninguno de ellos."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Release keystore no está configurado correctamente en el preset de "
"exportación."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Se requiere una ruta válida del SDK de Android en la Configuración del "
"Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Ruta del SDK de Android inválida en la Configuración del Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "¡No se encontró el directorio 'platform-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"No se pudo encontrar el comando adb de las herramientas de la plataforma SDK "
"de Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Por favor, comprueba el directorio del SDK de Android especificado en la "
"Configuración del Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "¡No se encontró el directorio 'build-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"No se pudo encontrar el comando apksigner de las herramientas de "
"construcción del SDK de Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Clave pública inválida para la expansión de APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nombre de paquete inválido:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13347,37 +13480,22 @@ msgstr ""
"El módulo \"GodotPaymentV3\" incluido en los ajustes del proyecto \"android/"
"modules\" es inválido (cambiado en Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Use Custom Build\" debe estar activado para usar los plugins."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
-"VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR"
-"\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13389,52 +13507,52 @@ msgstr ""
"SDK build-tools.\n"
"El resultado %s es sin firma."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "Firma de depuración %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "Firmando liberación %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "No se pudo encontrar la keystore, no se puedo exportar."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' ha retornado con error #%d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "Verificando %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "La verificación de 'apksigner' de %s ha fallado."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Exportando para Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"¡Nombre del archivo inválido! Android App Bundle requiere la extensión *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "La Expansión APK no es compatible con Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "¡Formato de exportación no compatible!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13443,7 +13561,7 @@ msgstr ""
"información de la versión para ello. Por favor, reinstala desde el menú "
"'Proyecto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13456,26 +13574,26 @@ msgstr ""
"Por favor, reinstala la plantilla de compilación de Android desde el menú "
"'Proyecto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
"No se puede sobrescribir los archivos res://android/build/res/*.xml con el "
"nombre del proyecto"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "¡No se pudo escribir el archivo del paquete de expansión!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Construir Proyecto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13484,11 +13602,11 @@ msgstr ""
"También puedes visitar docs.godotengine.org para consultar la documentación "
"de compilación de Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Moviendo salida"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13496,15 +13614,15 @@ msgstr ""
"No se puede copiar y renombrar el archivo de exportación, comprueba el "
"directorio del proyecto de gradle para ver los resultados."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr "Paquete no encontrado:% s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Creando APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13512,7 +13630,7 @@ msgstr ""
"No se pudo encontrar la plantilla APK para exportar:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13524,19 +13642,19 @@ msgstr ""
"Por favor, construya una plantilla con todas las bibliotecas necesarias, o "
"desmarque las arquitecturas que faltan en el preajuste de exportación."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Añadiendo archivos ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "No se pudieron exportar los archivos del proyecto"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Alineando APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "No se pudo descomprimir el APK no alineado temporal."
@@ -14090,6 +14208,14 @@ msgstr ""
"NavigationMeshInstance debe ser hijo o nieto de un nodo Navigation. Ya que "
"sólo proporciona los datos de navegación."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14229,36 +14355,50 @@ msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"La ruta del RoomList no es válida.\n"
+"Por favor, comprueba que la rama de la RoomList ha sido asignada al "
+"RoomManager."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "La RoomList no contiene Rooms, abortando."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Nodos con nombres incorrectos detectados, comprueba la salida del Log para "
+"más detalles. Abortando."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"No se encuentra Portal link room, comprueba la salida del Log para más "
+"detalles."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Fallo en el Portal autolink, comprueba la salida del Log para más detalles.\n"
+"Comprueba si el portal está mirando hacia fuera de la room de origen."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Detectada superposición de la Room, las cámaras pueden funcionar "
+"incorrectamente en las zonas donde hay superposición.\n"
+"Comrpueba la salida del Log para más detalles."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Error al calcular los límites de la room.\n"
+"Asegúrate de que todas las rooms contienen geometría o límites manuales."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14426,6 +14566,14 @@ msgstr "Debe tener una extensión válida."
msgid "Enable grid minimap."
msgstr "Activar minimapa de cuadrícula."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14481,6 +14629,10 @@ msgstr ""
"El tamaño del Viewport debe ser mayor que 0 para poder renderizar cualquier "
"cosa."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14539,6 +14691,41 @@ msgstr "Asignación a uniform."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Crear Pose de Descanso (Desde Huesos)"
+
+#~ msgid "Bottom"
+#~ msgstr "Abajo"
+
+#~ msgid "Left"
+#~ msgstr "Izquierda"
+
+#~ msgid "Right"
+#~ msgstr "Derecha"
+
+#~ msgid "Front"
+#~ msgstr "Frente"
+
+#~ msgid "Rear"
+#~ msgstr "Detrás"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo sin nombre"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
+#~ "VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Contenido del Paquete:"
@@ -16735,9 +16922,6 @@ msgstr "Las constantes no pueden modificarse."
#~ msgid "Images:"
#~ msgstr "Imágenes:"
-#~ msgid "Group"
-#~ msgstr "Grupo"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Modo de conversión de muestreo: (archivos .wav):"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index d5c955a347..0decc83e9f 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -17,12 +17,13 @@
# Cristian Yepez <cristianyepez@gmail.com>, 2020.
# Skarline <lihue-molina@hotmail.com>, 2020.
# Joakker <joaquinandresleon108@gmail.com>, 2020.
+# M3CG <cgmario1999@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-06 06:47+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2021-09-06 16:32+0000\n"
+"Last-Translator: M3CG <cgmario1999@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
"Language: es_AR\n"
@@ -30,7 +31,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -380,15 +381,13 @@ msgstr "Insertar Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "No se puede abrir '%s'."
+msgstr "nodo '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animación"
+msgstr "animación"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -396,9 +395,8 @@ msgstr "Un AnimationPlayer no puede animarse a sí mismo, solo a otros players."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "No existe la propiedad '%s'."
+msgstr "propiedad '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1038,7 +1036,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependencias"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recursos"
@@ -1078,18 +1076,16 @@ msgid "Owners Of:"
msgstr "Dueños De:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n"
-"Podés encontrar los archivos eliminados en la papelera de reciclaje del "
-"sistema para restaurarlos."
+"¿Eliminar los archivos seleccionados del proyecto? (No se puede deshacer).\n"
+"Dependiendo de la configuración de tu sistema de archivos, los archivos se "
+"moverán a la papelera del sistema o se eliminarán permanentemente."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1097,11 +1093,11 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Los archivos que se están removiendo son requeridos por otros recursos para "
+"Los archivos que se están eliminando son requeridos por otros recursos para "
"funcionar.\n"
-"¿Eliminarlos de todos modos? (irreversible)\n"
-"Podés encontrar los archivos eliminados en la papelera de reciclaje del "
-"sistema para restaurarlos."
+"¿Eliminarlos de todos modos? (No se puede deshacer).\n"
+"Dependiendo de la configuración de tu sistema de archivos, los archivos se "
+"moverán a la papelera del sistema o se eliminarán permanentemente."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1271,9 +1267,10 @@ msgid "Licenses"
msgstr "Licencias"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Error al abrir el archivo de paquete (no esta en formato ZIP)."
+msgstr ""
+"Error al abrir el archivo de assets para \"%s\" (no se encuentra en formato "
+"ZIP)."
#: editor/editor_asset_installer.cpp
msgid "%s (already exists)"
@@ -1282,10 +1279,12 @@ msgstr "%s (ya existe)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"Contenido del asset \"%s\" - %d archivo(s) en conflicto con tu proyecto:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Contenido del asset \"%s\" - No hay archivos en conflicto con tu proyecto:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1699,13 +1698,13 @@ msgstr ""
"Activá Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver "
"Fallback Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Plantilla debug personalizada no encontrada."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1782,6 +1781,8 @@ msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Permite ajustar los parámetros de importación para assets individuales. "
+"Requiere del panel Sistema de Archivos para funcionar."
#: editor/editor_feature_profile.cpp
msgid "(current)"
@@ -1793,7 +1794,7 @@ msgstr "(ninguno)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "¿Eliminar el perfil seleccionado, '%s'? No se puede deshacer."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1897,6 +1898,7 @@ msgstr "Opciones Extra:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Crear o importar un perfil para editar las clases y propiedades disponibles."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -2085,7 +2087,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importando Assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Cima"
@@ -2322,6 +2324,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Gira cuando la ventana del editor se redibuja.\n"
+"Update Continuously está habilitado, lo que puede aumentar el consumo "
+"eléctrico. Click para desactivarlo."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2561,13 +2566,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"La escena actual no contiene un nodo raíz, pero %d resource(s) externo(s) "
+"modificado(s) fueron guardados de todos modos."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Se necesita un nodo raíz para guardar la escena."
+msgstr ""
+"Se requiere un nodo raíz para guardar la escena. Podés agregar un nodo raíz "
+"usando el dock de árbol de Escenas."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2598,6 +2606,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Escena actual sin guardar. Abrir de todos modos?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Deshacer"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Rehacer"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "No se puede volver a cargar una escena que nunca se guardó."
@@ -3240,9 +3274,8 @@ msgid "Install from file"
msgstr "Instalar desde archivo"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Seleccioná una Mesh de Origen:"
+msgstr "Seleccionar archivo de fuentes de Android"
#: editor/editor_node.cpp
msgid ""
@@ -3292,6 +3325,11 @@ msgid "Merge With Existing"
msgstr "Mergear Con Existentes"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Cambiar Transform de Anim"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Abrir y Correr un Script"
@@ -3362,9 +3400,8 @@ msgid "No sub-resources found."
msgstr "No se encontró ningún sub-recurso."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "No se encontró ningún sub-recurso."
+msgstr "Abra una lista de sub-recursos."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3409,9 +3446,8 @@ msgid "Measure:"
msgstr "Medida:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Duración de Frame (seg)"
+msgstr "Duración de Frame (ms)"
#: editor/editor_profiler.cpp
msgid "Average Time (ms)"
@@ -3442,6 +3478,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"Inclusivo: Incluye el tiempo de otras funciones llamadas por esta función.\n"
+"Usalo para detectar cuellos de botella.\n"
+"\n"
+"Propio: Sólo contabiliza el tiempo empleado en la propia función, no en "
+"otras funciones llamadas por esa función.\n"
+"Utilizalo para buscar funciones individuales que optimizar."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3544,6 +3586,10 @@ msgstr ""
"El recurso seleccionado (%s) no concuerda con ningún tipo esperado para esta "
"propiedad (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Convertir en Unico"
@@ -3614,11 +3660,10 @@ msgid "Did you forget the '_run' method?"
msgstr "Te olvidaste del método '_run'?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Mantené pulsado Ctrl para redondear a enteros. Mantené pulsado Shift para "
-"cambios más precisos."
+"Mantené %s para redondear a números enteros. Mantené Mayús para cambios más "
+"precisos."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3710,10 +3755,9 @@ msgid "Error getting the list of mirrors."
msgstr "Error al obtener la lista de mirrors."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr ""
-"Error al parsear el JSON de la lista de mirrors. ¡Por favor reportá este "
+"Error al parsear el JSON con la lista de mirrors. ¡Por favor, reportá este "
"problema!"
#: editor/export_template_manager.cpp
@@ -3771,24 +3815,21 @@ msgid "SSL Handshake Error"
msgstr "Error de Handshake SSL"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "No se puede abir el zip de plantillas de exportación."
+msgstr "No se puede abrir el archivo de plantillas de exportación."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Formato de version.txt inválido dentro de plantillas: %s."
+msgstr "Formato de version.txt inválido dentro de archivo de plantillas: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "No se encontro ningún version.txt dentro de las plantillas."
+msgstr ""
+"No se ha encontrado el archivo version.txt dentro del archivo de plantillas."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Error creando rutas para las plantillas:"
+msgstr "Error al crear la ruta para extraer las plantillas:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3799,9 +3840,8 @@ msgid "Importing:"
msgstr "Importando:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Quitar plantilla version '%s'?"
+msgstr "¿Quitar plantillas para la versión '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3833,29 +3873,28 @@ msgstr "Abrir Carpeta"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
msgstr ""
+"Abra la carpeta que contiene las plantillas instaladas para la versión "
+"actual."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Desinstalar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valor inicial para el contador"
+msgstr "Desinstalar las plantillas de la versión actual."
#: editor/export_template_manager.cpp
msgid "Download from:"
msgstr "Descargar desde:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Ejecutar en el Navegador"
+msgstr "Abrir en el Navegador Web"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copiar Error"
+msgstr "Copiar URL del Mirror"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -3866,6 +3905,8 @@ msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Descargar e instalar plantillas para la versión actual de el mejor mirror "
+"posible."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -3911,6 +3952,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Las plantillas seguirán descargándose.\n"
+"Puede que el editor se frice brevemente cuando terminen."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -5504,7 +5547,7 @@ msgstr "Archivo ZIP de Assets"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Reproducir/Pausar Previsualización de Audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5664,6 +5707,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Mover CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Bloqueo Seleccionado"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupo"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5765,13 +5820,13 @@ msgstr "Cambiar Anclas"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"Reemplazar Cámara del Juego\n"
-"Reemplaza la cámara del juego con la cámara del viewport del editor."
+"Reemplazar Cámara del Proyecto\n"
+"Reemplaza la cámara del proyecto en ejecución con la cámara del viewport del "
+"editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5780,6 +5835,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Reemplazo de la Cámara de Proyecto\n"
+"No se está ejecutando ninguna instancia del proyecto. Ejecutá el proyecto "
+"desde el editor para utilizar esta función."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5847,31 +5905,27 @@ msgstr "Modo Seleccionar"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Quitar el nodo o transición seleccionado/a."
+msgstr "Arrastrar: Rotar el nodo seleccionado alrededor del pivote."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Arrastrae: Mover"
+msgstr "Alt+Arrastrar: Mover el nodo seleccionado"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Quitar el nodo o transición seleccionado/a."
+msgstr "V: Establecer la posición de pivote del nodo seleccionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Mostrar una lista de todos los objetos en la posicion cliqueada\n"
-"(igual que Alt+Click Der. en modo selección)."
+"Alt+Click Der.: Mostrar una lista de todos los nodos en la posición "
+"clickeada, incluyendo bloqueados."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "Click Der.: Añadir un nodo en la posición clickeada."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6412,9 +6466,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "No se pudo crear una forma de colisión única."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Crear Forma Convexa Única"
+msgstr "Crear una Figura Convexa Simplificada"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6451,9 +6504,8 @@ msgid "No mesh to debug."
msgstr "No hay meshes para depurar."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "El modelo no tiene UV en esta capa"
+msgstr "La malla no tiene UV en la capa %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6518,9 +6570,8 @@ msgstr ""
"Esta es la opción mas rápida (pero menos exacta) para detectar colisiones."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Crear Colisión Convexa Única Hermana"
+msgstr "Crear Colisión Convexa Simplificada Hermana"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6528,20 +6579,23 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Crea una forma de colisión convexa simplificada.\n"
+"Esto es similar a la forma de colisión única, pero puede resultar en una "
+"geometría más simple en algunos casos, a costa de precisión."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
msgstr "Crear Múltiples Colisiones Convexas como Nodos Hermanos"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Crea una forma de colisión basada en polígonos.\n"
-"Esto está en un punto medio de rendimiento entre las dos opciones de arriba."
+"Esto es un punto medio de rendimiento entre una colisión convexa única y una "
+"colisión basada en polígonos."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -6608,7 +6662,13 @@ msgid "Remove Selected Item"
msgstr "Remover Item Seleccionado"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importar desde Escena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importar desde Escena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7187,24 +7247,30 @@ msgid "ResourcePreloader"
msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Espejar Horizontalmente"
+msgstr "Invertir Portales"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Conteo de Puntos Generados:"
+msgstr "Generar Puntos en la Room"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
msgstr "Conteo de Puntos Generados:"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Espejar Horizontalmente"
+msgstr "Invertir Portal"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Reestablecer Transform"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Crear Nodo"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7709,12 +7775,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Crear Pose de Descanso"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Setear Huesos a la Pose de Descanso"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Setear Huesos a la Pose de Descanso"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sobreescribir"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7741,6 +7809,71 @@ msgid "Perspective"
msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspectiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformación Abortada."
@@ -7767,20 +7900,17 @@ msgid "None"
msgstr "Ninguno"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Estado"
+msgstr "Rotar"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Trasladar:"
+msgstr "Trasladar"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Escala:"
+msgstr "Escalar"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7803,48 +7933,40 @@ msgid "Animation Key Inserted."
msgstr "Clave de Animación Insertada."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Altura"
+msgstr "Cabeceo:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Guiñada:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Tamaño: "
+msgstr "Tamaño:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Objetos Dibujados"
+msgstr "Objetos Dibujados:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Cambios de Material"
+msgstr "Cambios de Material:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Cambios de Shader"
+msgstr "Cambios de Shaders:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Cambios de Superficie"
+msgstr "Cambios de Superficies:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Llamadas de Dibujado"
+msgstr "Llamadas de Dibujado:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Vértices"
+msgstr "Vértices:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -7859,42 +7981,22 @@ msgid "Bottom View."
msgstr "Vista Inferior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Fondo"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista Izquierda."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Izquierda"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista Derecha."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Derecha"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Frente"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista Anterior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Detrás"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Alinear Transform con Vista"
@@ -8003,9 +8105,8 @@ msgid "Freelook Slow Modifier"
msgstr "Modificador de Velocidad de Vista Libre"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Cambiar Tamaño de Cámara"
+msgstr "Alternar Vista Previa de la Cámara"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8027,9 +8128,8 @@ msgstr ""
"No se puede utilizar como un indicador fiable del rendimiento en el juego."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Convertir A %s"
+msgstr "Convertir Rooms"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8051,7 +8151,6 @@ msgstr ""
"opacas (\"x-ray\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "Ajustar Nodos al Suelo"
@@ -8069,7 +8168,7 @@ msgstr "Usar Ajuste"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "Convertir rooms para hacer culling de portales."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8165,9 +8264,13 @@ msgid "View Grid"
msgstr "Ver Grilla"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Ajustes de Viewport"
+msgstr "Ver Culling de Portales"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Ver Culling de Portales"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8235,8 +8338,9 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo sin nombre"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Proyecto Sin Nombre"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8487,129 +8591,112 @@ msgid "TextureRegion"
msgstr "Región de Textura"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Color"
+msgstr "Colores"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Tipografía"
+msgstr "Fuentes"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Icono"
+msgstr "Iconos"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Styleboxes"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "No se encontró ningún sub-recurso."
+msgstr "No se encontraron colores."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Constantes"
+msgstr "{num} constante(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Constante de color."
+msgstr "No se encontraron constantes."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} fuente(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "No se encontró!"
+msgstr "No se encontraron fuentes."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} ícono(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "No se encontró!"
+msgstr "No se encontraron íconos."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "No se encontró ningún sub-recurso."
+msgstr "No se encontraron styleboxes."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} seleccionado(s) actualmente"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "No se seleccionó nada para la importación."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Importar Tema"
+msgstr "Importando Items de Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "Importando items {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Salir del editor?"
+msgstr "Actualizando el editor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "Analizando"
+msgstr "Finalizando"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtro: "
+msgstr "Filtro:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Con Data"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Seleccionar un Nodo"
+msgstr "Seleccionar por tipo de datos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Seleccioná una división para borrarla."
+msgstr "Seleccionar todos los elementos color visibles."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Seleccione todos los elementos visibles de color y sus datos."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Quitar selección a todos los elementos visibles de color."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Selecciona un ítem primero!"
+msgstr "Seleccionar todos elementos constant visibles."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
@@ -8620,9 +8707,8 @@ msgid "Deselect all visible constant items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Selecciona un ítem primero!"
+msgstr "Seleccionar todos los elementos font visibles."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
@@ -8633,19 +8719,16 @@ msgid "Deselect all visible font items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Selecciona un ítem primero!"
+msgstr "Seleccionar todos los elementos icon visibles."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Selecciona un ítem primero!"
+msgstr "Seleccionar todos los elementos icon visibles y sus datos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Selecciona un ítem primero!"
+msgstr "Deseleccionar todos los elementos icon visibles."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
@@ -8666,42 +8749,36 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Colapsar Todos"
+msgstr "Colapsar tipos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Expandir Todos"
+msgstr "Expandir tipos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Elegir Archivo de Plantilla"
+msgstr "Seleccionar todos los elementos del Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Seleccionar Puntos"
+msgstr "Seleccionar Con Datos"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "Seleccionar todos los elementos del Tema con los datos del elemento."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Seleccionar Todo"
+msgstr "Deseleccionar Todo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Deseleccionar todos los elementos del Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importar Escena"
+msgstr "Importar Seleccionado"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8715,36 +8792,33 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Selecciona un tipo de tema de la list para editar sus elementos.\n"
+"Podés agregar un tipo customizado o importar un tipo con sus elementos desde "
+"otro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
msgstr "Quitar Todos los Ítems"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Remover Item"
+msgstr "Renombrar Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Quitar Todos los Ítems"
+msgstr "Eliminar Todos los Elementos Constant"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Quitar Todos los Ítems"
+msgstr "Eliminar Todos los Elementos Font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Quitar Todos los Ítems"
+msgstr "Eliminar Todos los Elementos de Iconos"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Quitar Todos los Ítems"
+msgstr "Eliminar Todos los Elementos de StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8753,161 +8827,132 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Agregar Items de Clases"
+msgstr "Añadir Elemento Color"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Agregar Items de Clases"
+msgstr "Añadir Elemento Constant"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Agregar Item"
+msgstr "Añadir Elemento Font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
msgstr "Agregar Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Agregar Todos los Items"
+msgstr "Añadir Elemento Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Quitar Ítems de Clases"
+msgstr "Cambiar Nombre del Elemento Color"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Quitar Ítems de Clases"
+msgstr "Cambiar Nombre del Elemento Constant"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Renombrar Nodo"
+msgstr "Renombrar Elemento Font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Renombrar Nodo"
+msgstr "Renombrar Elemento Icon"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Remover Item Seleccionado"
+msgstr "Renombrar Elemento Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Archivo inválido. No es un layout de bus de audio."
+msgstr "Archivo inválido, no es un recurso del Theme."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Archivo inválido, idéntico al recurso del Theme editado."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Administrar Plantillas"
+msgstr "Administrar Elementos del Theme"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Ítem Editable"
+msgstr "Editar Elementos"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tipo:"
+msgstr "Tipos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tipo:"
+msgstr "Añadir Tipo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Agregar Item"
+msgstr "Añadir Elemento:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Agregar Todos los Items"
+msgstr "Añadir Elemento StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Remover Item"
+msgstr "Eliminar Elementos:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Quitar Ítems de Clases"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Quitar Ítems de Clases"
+msgstr "Eliminar Elementos Personalizados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Quitar Todos los Ítems"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Items de Tema de la GUI"
+msgstr "Agregar Elemento del Theme"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nombre de Nodo:"
+msgstr "Nombre Antiguo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importar Tema"
+msgstr "Importar Elementos"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Por Defecto"
+msgstr "Theme Predeterminado"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
msgstr "Editar Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Eliminar Recurso"
+msgstr "Seleccionar Otro Recurso del Theme:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Importar Tema"
+msgstr "Otro Theme"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Renombrar pista de animación"
+msgstr "Confirmar Cambio de Nombre del Elemento"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Renombrar en Masa"
+msgstr "Cancelar Renombrado de Elemento"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Reemplazos(Overrides)"
+msgstr "Reemplazar Elemento"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
@@ -12438,6 +12483,16 @@ msgstr "Setear Posición de Punto de Curva"
msgid "Set Portal Point Position"
msgstr "Setear Posición de Punto de Curva"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Cambiar Radio de Shape Cilindro"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Setear Posición de Entrada de Curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Cambiar Radio de Cilindro"
@@ -12724,6 +12779,11 @@ msgstr "Trazando lightmatps"
msgid "Class name can't be a reserved keyword"
msgstr "El nombre de la clase no puede ser una palabra reservada"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Llenar la Selección"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fin del stack trace de excepción interna"
@@ -13212,76 +13272,76 @@ msgstr "Buscar en VisualScript"
msgid "Get %s"
msgstr "Obtener %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Nombre de paquete faltante."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Los segmentos del paquete deben ser de largo no nulo."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"El caracter '%s' no está permitido en nombres de paquete de aplicación "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Un dígito no puede ser el primer caracter en un segmento de paquete."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"El caracter '%s' no puede ser el primer caracter en un segmento de paquete."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "El paquete debe tener al menos un '.' como separador."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Seleccionar dispositivo de la lista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportar Todo"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Desinstalar"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Cargando, esperá, por favor..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "No se pudo instanciar la escena!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Ejecutando Script Personalizado..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "No se pudo crear la carpeta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "No se pudo encontrar la herramienta 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13289,7 +13349,7 @@ msgstr ""
"La plantilla de exportación de Android no esta instalada en el proyecto. "
"Instalala desde el menú de Proyecto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13297,12 +13357,12 @@ msgstr ""
"Deben estar configurados o bien Debug Keystore, Debug User Y Debug Password "
"o bien ninguno de ellos."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Keystore debug no configurada en Configuración del Editor ni en el preset."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13310,53 +13370,53 @@ msgstr ""
"Deben estar configurados o bien Release Keystore, Release User y Release "
"Passoword o bien ninguno de ellos."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Release keystore no está configurado correctamente en el preset de "
"exportación."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Se requiere una ruta válida al SDK de Android en la Configuración del Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Ruta del SDK de Android inválida en la Configuración del Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "¡No se encontró el directorio 'platform-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "No se pudo encontrar el comando adb en las Android SDK platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Por favor, comprueba el directorio del SDK de Android especificado en la "
"Configuración del Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "¡No se encontró el directorio 'build-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"No se pudo encontrar el comando apksigner en las Android SDK build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Clave pública inválida para la expansión de APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nombre de paquete inválido:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13364,37 +13424,22 @@ msgstr ""
"El módulo \"GodotPaymentV3\" incluido en el ajuste de proyecto \"android/"
"modules\" es inválido (cambiado en Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Use Custom Build\" debe estar activado para usar los plugins."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
-"VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR"
-"\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13402,58 +13447,58 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Examinando Archivos,\n"
"Aguardá, por favor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "No se pudo abrir la plantilla para exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Agregando %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Exportar Todo"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "La Expansión APK no es compatible con Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13462,7 +13507,7 @@ msgstr ""
"información de la versión para ello. Por favor, reinstalá desde el menú "
"'Proyecto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13475,26 +13520,26 @@ msgstr ""
"Por favor, reinstalá la plantilla de compilación de Android desde el menú "
"'Proyecto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "No se pudo obtener project.godot en la ruta de proyecto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "No se pudo escribir el archivo:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Construir Proyecto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13503,11 +13548,11 @@ msgstr ""
"También podés visitar docs.godotengine.org para consultar la documentación "
"de compilación de Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Moviendo salida"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13515,24 +13560,24 @@ msgstr ""
"No se puede copiar y renombrar el archivo de exportación, comprobá el "
"directorio del proyecto de gradle para ver los resultados."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "No se encontró la animación: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Creando contornos..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "No se pudo abrir la plantilla para exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13540,21 +13585,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Agregando %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "No se pudo escribir el archivo:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14107,6 +14152,14 @@ msgstr ""
"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo "
"provee datos de navegación."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14436,6 +14489,14 @@ msgstr "Debe ser una extensión válida."
msgid "Enable grid minimap."
msgstr "Activar minimapa de grilla."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14488,6 +14549,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "El tamaño del viewport debe ser mayor a 0 para poder renderizar."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14541,6 +14606,41 @@ msgstr "Asignación a uniform."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Crear Pose de Descanso"
+
+#~ msgid "Bottom"
+#~ msgstr "Fondo"
+
+#~ msgid "Left"
+#~ msgstr "Izquierda"
+
+#~ msgid "Right"
+#~ msgstr "Derecha"
+
+#~ msgid "Front"
+#~ msgstr "Frente"
+
+#~ msgid "Rear"
+#~ msgstr "Detrás"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo sin nombre"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
+#~ "VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Contenido del Paquete:"
@@ -16517,9 +16617,6 @@ msgstr "Las constantes no pueden modificarse."
#~ msgid "Images:"
#~ msgstr "Imágenes:"
-#~ msgid "Group"
-#~ msgstr "Grupo"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Modo de Conversión de Muestras: (archivos .wav):"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index 13019cd9e3..2c59035681 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -1006,7 +1006,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Sõltuvused"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ressurss"
@@ -1659,13 +1659,13 @@ msgstr ""
"Lülitage projekti sätetes sisse „Impordi ETC” või keelake „Draiveri "
"tagasilangemine lubatud”."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2051,7 +2051,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Taas)impordin varasid"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Ülaosa"
@@ -2534,6 +2534,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Võta tagasi"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Tee uuesti"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3169,6 +3195,10 @@ msgid "Merge With Existing"
msgstr "Liida olemasolevaga"
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3414,6 +3444,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5470,6 +5504,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Rühmad"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6369,7 +6414,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6955,6 +7004,15 @@ msgstr "Liiguta Bezieri punkte"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Kustuta sõlm(ed)"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7449,11 +7507,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Laadi vaikimisi"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7481,6 +7540,65 @@ msgid "Perspective"
msgstr "Perspektiiv"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektiiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektiiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektiiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektiiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektiiv"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7599,42 +7717,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7898,6 +7996,11 @@ msgid "View Portal Culling"
msgstr "Vaateakna sätted"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Vaateakna sätted"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Sätted..."
@@ -7963,7 +8066,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11923,6 +12026,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12206,6 +12317,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Poolresolutioon"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12675,161 +12791,150 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Ekspordi..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Ei saanud luua kausta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12837,58 +12942,58 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Sätted..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12896,56 +13001,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Paigutuse nime ei leitud!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Sätted..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12953,20 +13058,20 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Ei saanud luua kausta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13421,6 +13526,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13710,6 +13823,14 @@ msgstr "Peab kasutama kehtivat laiendit."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13750,6 +13871,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Vaateakne suurus peab olema suurem kui 0, et kuvada."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 7b6934ff33..ddcf8f5d37 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -1005,7 +1005,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Mendekotasunak"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Baliabidea"
@@ -1649,13 +1649,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2032,7 +2032,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Aktiboak (bir)inportatzen"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2510,6 +2510,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Desegin"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Berregin"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3138,6 +3164,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animazioaren transformazioa aldatu"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3382,6 +3413,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5447,6 +5482,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6347,7 +6392,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6933,6 +6982,15 @@ msgstr "Mugitu Bezier puntuak"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Blend4 nodoa"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7427,12 +7485,13 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "gainidatzi:"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7459,6 +7518,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7568,42 +7681,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7867,6 +7960,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7932,7 +8029,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11889,6 +11986,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12170,6 +12275,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12637,164 +12746,153 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Esportatu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Desinstalatu"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr ""
"Fitxategiak arakatzen,\n"
"Itxaron mesedez..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12802,60 +12900,60 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Fitxategiak arakatzen,\n"
"Itxaron mesedez..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12863,55 +12961,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Paketearen edukia:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12919,19 +13017,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13382,6 +13480,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13672,6 +13778,14 @@ msgstr "Baliozko luzapena erabili behar du."
msgid "Enable grid minimap."
msgstr "Gaitu atxikitzea"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13712,6 +13826,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index bb761cf137..2d086fe827 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -21,12 +21,13 @@
# ItzMiad44909858f5774b6d <maidggg@gmail.com>, 2020.
# YASAN <yasandev@gmail.com>, 2021.
# duniyal ras <duniyalr@gmail.com>, 2021.
+# عبدالرئوف عابدی <abdolraoofabedi@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-13 06:13+0000\n"
-"Last-Translator: duniyal ras <duniyalr@gmail.com>\n"
+"PO-Revision-Date: 2021-08-27 08:25+0000\n"
+"Last-Translator: عبدالرئوف عابدی <abdolraoofabedi@gmail.com>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot/fa/>\n"
"Language: fa\n"
@@ -34,7 +35,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -390,7 +391,6 @@ msgstr "در حال اتصال..."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "انیمیشن"
@@ -400,9 +400,8 @@ msgstr "انیمیشن پلیر نمی تواند خود را انیمیت کن
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "ویژگی '%s' موجود نیست."
+msgstr "ویژگی \"٪ s\""
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -610,9 +609,8 @@ msgid "Go to Previous Step"
msgstr "برو به گام پیشین"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "بازنشانی بزرگنمایی"
+msgstr "بازنشانی را اعمال کنید"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -631,9 +629,8 @@ msgid "Use Bezier Curves"
msgstr "بکارگیری منحنی بِزیِر"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "جاگذاری مسیر ها"
+msgstr "ایجاد آهنگ (های) بازنشانی"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -975,12 +972,13 @@ msgid "Create New %s"
msgstr "ساختن %s جدید"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
+#, fuzzy
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "هیچ نتیجه ای برای \"٪ s\" وجود ندارد."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "توضیحی برای٪ s در دسترس نیست."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1040,7 +1038,7 @@ msgstr ""
msgid "Dependencies"
msgstr "بستگی‌ها"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "منبع"
@@ -1085,7 +1083,10 @@ msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
-msgstr "آیا پرونده‌های انتخاب شده از طرح حذف شوند؟ (غیر قابل بازیابی)"
+msgstr ""
+"فایلهای انتخابی از پروژه حذف شوند؟ (قابل واگرد نیست.)\n"
+"بسته به پیکربندی سیستم فایل شما ، فایل ها یا به سطل زباله سیستم منتقل می "
+"شوند و یا برای همیشه حذف می شوند."
#: editor/dependency_editor.cpp
#, fuzzy
@@ -1096,10 +1097,10 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"پرونده‌هایی که می‌خواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار "
-"کنند.\n"
-"آیا در هر صورت حذف شوند؟(بدون برگشت)\n"
-"شما میتوانید فایل های حذف شده را در سطل زباله سیستم عامل خود بیابید ."
+"فایل های در حال حذف توسط منابع دیگر مورد نیاز است تا بتوانند کار کنند.\n"
+"به هر حال آنها را حذف کنم؟ (قابل واگرد نیست.)\n"
+"بسته به پیکربندی سیستم فایل شما ، فایل ها یا به سطل زباله سیستم منتقل می "
+"شوند و یا برای همیشه حذف می شوند."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1687,13 +1688,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2073,7 +2074,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(در حال) وارد کردن دوباره عست ها"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2551,6 +2552,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "عقب‌گرد"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "جلوگرد"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3194,6 +3221,11 @@ msgid "Merge With Existing"
msgstr "ترکیب کردن با نمونه ی موجود"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "تغییر دگرشکل متحرک"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "گشودن و اجرای یک اسکریپت"
@@ -3448,6 +3480,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5645,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "همه‌ی انتخاب ها"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "گروه ها"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6598,7 +6646,13 @@ msgid "Remove Selected Item"
msgstr "حذف مورد انتخاب‌شده"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "وارد کردن از صحنه"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "وارد کردن از صحنه"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7204,6 +7258,16 @@ msgstr "حذف کن"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "انتقال را در انیمیشن تغییر بده"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "ساختن گره"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7743,11 +7807,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "بارگیری پیش فرض"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7777,6 +7842,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "دکمهٔ راست."
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7894,42 +8014,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8201,6 +8301,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "ویرایش سیگنال"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8267,8 +8372,9 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "پروژه بی نام"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
@@ -12485,6 +12591,15 @@ msgstr "برداشتن موج"
msgid "Set Portal Point Position"
msgstr "برداشتن موج"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "برداشتن موج"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12791,6 +12906,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "همه‌ی انتخاب ها"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13304,165 +13424,154 @@ msgstr "حذف گره اسکریپتِ دیداری"
msgid "Get %s"
msgstr "گرفتن %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "صدور"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "نصب کردن"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "بارگیری"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "ناتوان در ساختن پوشه."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "نام نامعتبر."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13470,60 +13579,60 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "ترجیحات"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "صدور"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13531,58 +13640,58 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "طول انیمیشن (به ثانیه)."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "در حال اتصال..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13590,21 +13699,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "یافتن"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "نمی‌تواند یک پوشه ایجاد شود."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14117,6 +14226,14 @@ msgstr ""
"NavigationMeshInstance باید یک فرزند یا نوه‌ی یک گره Navigation باشد. این "
"تنها داده‌ی پیمایش را فراهم می‌کند."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14422,6 +14539,14 @@ msgstr "باید یک پسوند معتبر بکار گیرید."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -14470,6 +14595,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index ffedccec28..79a1e722b5 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-10 21:40+0000\n"
+"PO-Revision-Date: 2021-09-21 15:22+0000\n"
"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
@@ -25,7 +25,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -374,15 +374,13 @@ msgstr "Animaatio: lisää"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Ei voida avata tiedostoa '%s'."
+msgstr "solmu '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animaatio"
+msgstr "animaatio"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -390,9 +388,8 @@ msgstr "AnimationPlayer ei voi animoida itseään, vain muita toistimia."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Ominaisuutta '%s' ei löytynyt."
+msgstr "ominaisuus '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1025,7 +1022,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Riippuvuudet"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resurssi"
@@ -1685,13 +1682,13 @@ msgstr ""
"Kytke 'Import Pvrtc' päälle projektin asetuksista tai poista 'Driver "
"Fallback Enabled' asetus."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Mukautettua debug-vientimallia ei löytynyt."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2072,7 +2069,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Tuodaan (uudelleen) assetteja"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Yläpuoli"
@@ -2309,6 +2306,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Pyörii editori-ikkunan piirtäessä.\n"
+"Päivitä jatkuvasti -asetus on päällä, mikä voi lisätä virrankulutusta. "
+"Napsauta kytkeäksesi se pois päältä."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2584,6 +2584,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Nykyistä skeneä ei ole tallennettu. Avaa joka tapauksessa?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Peru"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Tee uudelleen"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Ei voida ladata uudelleen skeneä, jota ei ole koskaan tallennettu."
@@ -3263,6 +3289,11 @@ msgid "Merge With Existing"
msgstr "Yhdistä olemassaolevaan"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animaatio: muuta muunnosta"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Avaa ja suorita skripti"
@@ -3521,6 +3552,10 @@ msgstr ""
"Valittu resurssi (%s) ei vastaa mitään odotettua tyyppiä tälle "
"ominaisuudelle (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Tee yksilölliseksi"
@@ -3590,10 +3625,9 @@ msgid "Did you forget the '_run' method?"
msgstr "Unohditko '_run' metodin?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Pidä Ctrl pohjassa pyöristääksesi kokonaislukuun. Pidä Shift pohjassa "
+"Pidä %s pohjassa pyöristääksesi kokonaislukuun. Pidä Shift pohjassa "
"tarkempia muutoksia varten."
#: editor/editor_sub_scene.cpp
@@ -3614,21 +3648,19 @@ msgstr "Tuo solmusta:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Avaa kansio, joka sisältää nämä vientimallit."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Poista näiden vientimallien asennus."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "Tiedostoa '%s' ei ole."
+msgstr "Peilipalvelimia ei ole saatavilla."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Noudetaan peilipalvelimia, hetkinen..."
+msgstr "Noudetaan luetteloa peilipalvelimista..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
@@ -3688,7 +3720,6 @@ msgid "Error getting the list of mirrors."
msgstr "Virhe peilipalvelimien listan haussa."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr ""
"Virhe jäsennettäessä peilipalvelimien JSON-listaa. Raportoi tämä ongelma, "
@@ -3753,19 +3784,16 @@ msgid "Can't open the export templates file."
msgstr "Vientimallien tiedostoa ei voida avata."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Vientimalli sisältää virheellisen version.txt tiedoston: %s."
+msgstr "Vientimalli sisältää virheellisen version.txt tallennusmuodon: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Vientimalleista ei löytynyt version.txt tiedostoa."
+msgstr "Vientimallista ei löytynyt version.txt tiedostoa."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Virhe luotaessa polkua malleille:"
+msgstr "Virhe luotaessa polkua vientimallien purkamista varten:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3776,9 +3804,8 @@ msgid "Importing:"
msgstr "Tuodaan:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Poista mallin versio '%s'?"
+msgstr "Poista vientimallit versiolle '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3794,11 +3821,11 @@ msgstr "Nykyinen versio:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
-msgstr ""
+msgstr "Vientimallit puuttuvat. Lataa ne tai asenna ne tiedostosta."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Vientimallit ovat asennettu ja valmiita käyttöä varten."
#: editor/export_template_manager.cpp
msgid "Open Folder"
@@ -3806,30 +3833,27 @@ msgstr "Avaa kansio"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Avaa kansio, joka sisältää vientimallit nykyistä versiota varten."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Poista asennus"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Laskurin alkuarvo"
+msgstr "Poista vientimallien asennus nykyiseltä versiolta."
#: editor/export_template_manager.cpp
msgid "Download from:"
msgstr "Lataa sijannista:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Suorita selaimessa"
+msgstr "Avaa selaimessa"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Kopioi virhe"
+msgstr "Kopioi peilipalvelimen web-osoite"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -4070,7 +4094,7 @@ msgstr "Nimeä uudelleen..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Kohdista hakukenttään"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4416,18 +4440,16 @@ msgid "Extra resource options."
msgstr "Ylimääräiset resurssivalinnat."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Muokkaa resurssien leikepöytää"
+msgstr "Muokkaa leikepöydän resurssia"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Kopioi resurssi"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Tee sisäänrakennettu"
+msgstr "Tee resurssista sisäänrakennettu"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4442,9 +4464,8 @@ msgid "History of recently edited objects."
msgstr "Viimeisimmin muokatut objektit."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Avaa dokumentaatio"
+msgstr "Avaa dokumentaatio tälle objektille."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4455,9 +4476,8 @@ msgid "Filter properties"
msgstr "Suodata ominaisuuksia"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Objektin ominaisuudet."
+msgstr "Hallitse objektin ominaisuuksia."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4702,9 +4722,8 @@ msgid "Blend:"
msgstr "Sulautus:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Parametri muutettu"
+msgstr "Parametri muutettu:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5434,7 +5453,7 @@ msgstr "Kaikki"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Hae malleja, projekteja ja esimerkkejä"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
@@ -5641,6 +5660,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Siirrä CanvasItem \"%s\" koordinaattiin (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Lukitse valitut"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Ryhmät"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5826,31 +5857,27 @@ msgstr "Valintatila"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Poista valittu solmu tai siirtymä."
+msgstr "Vedä: kierrä valittua solmua kääntökeskiön ympäri."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Vedä: Siirrä"
+msgstr "Alt+Vedä: Siirrä valittua solmua."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Poista valittu solmu tai siirtymä."
+msgstr "V: Aseta nykyisen solmun kääntökeskiön sijainti."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Näytä lista kaikista napsautetussa kohdassa olevista objekteista\n"
-"(sama kuin Alt + Hiiren oikea painike valintatilassa)."
+"Alt+Hiiren oikea painike: Näytä lista kaikista napsautetussa kohdassa "
+"olevista solmuista, mukaan lukien lukituista."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "Hiiren oikea painike: Lisää solmu napsautettuun paikkaan."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6088,14 +6115,12 @@ msgid "Clear Pose"
msgstr "Tyhjennä asento"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Lisää solmu"
+msgstr "Lisää solmu tähän"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Luo ilmentymä skenestä tai skeneistä"
+msgstr "Luo ilmentymä skenestä tähän"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6111,49 +6136,43 @@ msgstr "Panorointinäkymä"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Aseta lähennystasoksi 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Aseta lähennystasoksi 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Aseta lähennystasoksi 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Loitonna"
+msgstr "Aseta lähennystasoksi 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Aseta lähennystasoksi 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6398,9 +6417,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "Ei voitu luoda yksittäistä konveksia törmäysmuotoa."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Luo yksittäinen konveksi muoto"
+msgstr "Luo pelkistetty konveksi muoto"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6435,9 +6453,8 @@ msgid "No mesh to debug."
msgstr "Ei meshiä debugattavaksi."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "Mallilla ei ole UV-kanavaa tällä kerroksella"
+msgstr "Meshillä ei ole UV-kanavaa kerroksella %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6502,9 +6519,8 @@ msgstr ""
"Tämä on nopein (mutta epätarkin) vaihtoehto törmäystunnistukselle."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Luo yksittäisen konveksin törmäyksen sisar"
+msgstr "Luo pelkistetty konveksin törmäyksen sisar"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6512,20 +6528,24 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Luo pelkistetyn konveksin törmäysmuodon.\n"
+"Tämä on samankaltainen kuin yksittäinen törmäysmuoto, mutta voi johtaa "
+"joissakin tapauksissa yksinkertaisempaan geometriaan tarkkuuden "
+"kustannuksella."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
msgstr "Luo useita konvekseja törmäysmuotojen sisaria"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Luo polygonipohjaisen törmäysmuodon.\n"
-"Tämä on suorituskyvyltään välimaastoa kahdelle yllä olevalle vaihtoehdolle."
+"Tämä on suorituskyvyltään yksittäisen konveksin törmäyksen ja "
+"polygonipohjaisen törmäyksen välimaastoa."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -6592,7 +6612,13 @@ msgid "Remove Selected Item"
msgstr "Poista valitut kohteet"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Tuo skenestä"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Tuo skenestä"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7171,24 +7197,30 @@ msgid "ResourcePreloader"
msgstr "Resurssien esilataaja"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Käännä vaakasuorasti"
+msgstr "Käännä portaalit"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Luotujen pisteiden määrä:"
+msgstr "Luo huoneen pisteet"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Luotujen pisteiden määrä:"
+msgstr "Luo pisteet"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Käännä vaakasuorasti"
+msgstr "Käännä portaali"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Tyhjennä muunnos"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Luo solmu"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7693,12 +7725,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Tee lepoasento (luista)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Aseta luut lepoasentoon"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Aseta luut lepoasentoon"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Ylikirjoita"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7725,6 +7759,71 @@ msgid "Perspective"
msgstr "Perspektiivi"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektiivi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektiivi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektiivi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektiivi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonaalinen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektiivi"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Muunnos keskeytetty."
@@ -7751,20 +7850,17 @@ msgid "None"
msgstr "Ei mitään"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Kiertotila"
+msgstr "Kierrä"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Siirrä:"
+msgstr "Siirrä"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Skaalaus:"
+msgstr "Skaalaa"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7787,52 +7883,44 @@ msgid "Animation Key Inserted."
msgstr "Animaatioavain lisätty."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Nyökkäys (pitch)"
+msgstr "Nyökkäyskulma:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Kääntymiskulma:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Koko: "
+msgstr "Koko:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Objekteja piirretty"
+msgstr "Objekteja piirretty:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Materiaalimuutokset"
+msgstr "Materiaalimuutokset:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Sävytinmuutokset"
+msgstr "Sävytinmuutokset:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Pintamuutokset"
+msgstr "Pintamuutokset:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Piirtokutsuja"
+msgstr "Piirtokutsuja:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Kärkipisteet"
+msgstr "Kärkipisteitä:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7843,42 +7931,22 @@ msgid "Bottom View."
msgstr "Pohjanäkymä."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Pohja"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vasen näkymä."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Vasen"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Oikea näkymä."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Oikea"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Etunäkymä."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Etu"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Takanäkymä."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Taka"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Kohdista muunnos näkymään"
@@ -7987,9 +8055,8 @@ msgid "Freelook Slow Modifier"
msgstr "Liikkumisen hitauskerroin"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Muuta kameran kokoa"
+msgstr "Aseta kameran esikatselu"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8011,9 +8078,8 @@ msgstr ""
"Sitä ei voi käyttää luotettavana pelin sisäisenä tehokkuuden ilmaisimena."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Muunna muotoon %s"
+msgstr "Muunna huoneet"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8035,7 +8101,6 @@ msgstr ""
"läpi (\"röntgen\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "Tarraa solmut lattiaan"
@@ -8053,7 +8118,7 @@ msgstr "Käytä tarttumista"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "Muunna huoneet portaalien harvennukseen."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8149,9 +8214,13 @@ msgid "View Grid"
msgstr "Näytä ruudukko"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Näyttöruudun asetukset"
+msgstr "Näytä portaalien harvennus"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Näytä portaalien harvennus"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8219,8 +8288,9 @@ msgid "Post"
msgstr "Jälki"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Nimetön muokkain"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Nimetön projekti"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8471,221 +8541,196 @@ msgid "TextureRegion"
msgstr "Tekstuurialue"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Väri"
+msgstr "Värit"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Fontti"
+msgstr "Fontit"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Kuvake"
+msgstr "Kuvakkeet"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Tyylilaatikot"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} väriä"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Aliresursseja ei löydetty."
+msgstr "Värejä ei löytynyt."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Vakiot"
+msgstr "{num} vakiota"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Värivakio."
+msgstr "Vakioita ei löytynyt."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} fonttia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Ei löytynyt!"
+msgstr "Fontteja ei löytynyt."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} kuvaketta"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Ei löytynyt!"
+msgstr "Kuvakkeita ei löytynyt."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} tyylilaatikkoa"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Aliresursseja ei löydetty."
+msgstr "Tyylilaatikkoja ei löytynyt."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} tällä hetkellä valittuna"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Mitään ei ollut valittuna tuontia varten."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Tuo teema"
+msgstr "Teeman osien tuonti"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "Tuodaan teeman osia {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Poistu editorista?"
+msgstr "Päivitetään editoria"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "Analysoidaan"
+msgstr "Viimeistellään"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Suodatin: "
+msgstr "Suodatin:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Datan kanssa"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Valitse solmu"
+msgstr "Valitse datatyypin mukaan:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Valitse jako poistaaksesi sen."
+msgstr "Valitse kaikki näkyvät värit."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Valitse kaikki näkyvät värit ja niiden data."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Poista kaikkien näkyvien värien valinta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Valitse asetus ensin!"
+msgstr "Valitse kaikki näkyvät vakiot."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Valitse kaikki näkyvät vakiot ja niiden data."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Poista kaikkien näkyvien vakioiden valinta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Valitse asetus ensin!"
+msgstr "Valitse kaikki näkyvät fontit."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Valitse kaikki näkyvät fontit ja niiden data."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Poista kaikkien näkyvien fonttien valinta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Valitse asetus ensin!"
+msgstr "Valitse kaikki näkyvät kuvakkeet."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Valitse asetus ensin!"
+msgstr "Valitse kaikki näkyvät kuvakkeet ja niiden data."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Valitse asetus ensin!"
+msgstr "Poista kaikkien näkyvien kuvakkeiden valinta."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "Valitse kaikki näkyvät tyylilaatikot."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "Valitse kaikki näkyvät tyylilaatikot ja niiden data."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "Poista kaikkien näkyvien tyylilaatikoiden valinta."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Varoitus: kuvakkeiden datan lisäys voi kasvattaa teemaresurssisi kokoa "
+"merkittävästi."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Tiivistä kaikki"
+msgstr "Tiivistä tyypit."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Laajenna kaikki"
+msgstr "Laajenna tyypit."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Valitse mallitiedosto"
+msgstr "Valitse kaikki teeman osat."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Valitse pisteet"
+msgstr "Valitse datan kanssa"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "Valitse kaikki teeman osat datan kanssa."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Valitse kaikki"
+msgstr "Poista kaikki valinnat"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Poista kaikkien teeman osien valinta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Tuo skene"
+msgstr "Tuo valittu"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8693,283 +8738,249 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
+"Tuo osat -välilehdellä on joitakin osia valittuna. Valinta menetetään tämän "
+"ikkunan sulkeuduttua.\n"
+"Suljetaanko silti?"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Valitse teeman tyyppi luettelosta muokataksesi sen osia.\n"
+"Voit lisätä mukautetun tyypin tai tuoda tyypin osineen toisesta teemasta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Poista kaikki"
+msgstr "Poista kaikki värit"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Poista"
+msgstr "Nimeä osa uudellen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Poista kaikki"
+msgstr "Poista kaikki vakiot"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Poista kaikki"
+msgstr "Poista kaikki fontit"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Poista kaikki"
+msgstr "Poista kaikki kuvakkeet"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Poista kaikki"
+msgstr "Poista kaikki tyylilaatikot"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Tämä teema on tyhjä.\n"
+"Lisää siihen osia käsin tai tuomalla niitä toisesta teemasta."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Lisää luokka"
+msgstr "Lisää väri"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Lisää luokka"
+msgstr "Lisää vakio"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Lisää kohde"
+msgstr "Lisää fontti"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Lisää kohde"
+msgstr "Lisää kuvake"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Lisää kaikki"
+msgstr "Lisää tyylilaatikko"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Poista luokka"
+msgstr "Nimeä väri uudelleen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Poista luokka"
+msgstr "Nimeä vakio uudelleen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Nimeä solmu uudelleen"
+msgstr "Nimeä fontti uudelleen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Nimeä solmu uudelleen"
+msgstr "Nimeä kuvake uudelleen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Poista valitut kohteet"
+msgstr "Nimeä tyylilaatikko uudelleen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään."
+msgstr "Virheellinen tiedosto, ei ole teemaresurssi."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Virheellinen tiedosto, sama kuin muokattu teemaresurssi."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Hallinnoi malleja"
+msgstr "Hallinnoi teeman osia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Muokattava osanen"
+msgstr "Muokkaa osia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tyyppi:"
+msgstr "Tyypit:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tyyppi:"
+msgstr "Lisää tyyppi:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Lisää kohde"
+msgstr "Lisää osa:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Lisää kaikki"
+msgstr "Lisää tyylilaatikko"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Poista"
+msgstr "Poista osia:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Poista luokka"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Poista luokka"
+msgstr "Poista mukautettuja osia"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Poista kaikki"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Käyttöliittymäteeman osat"
+msgstr "Lisää teeman osa"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Solmun nimi:"
+msgstr "Vanha nimi:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Tuo teema"
+msgstr "Tuo osia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Oletus"
+msgstr "Oletusteema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Muokkaa teemaa"
+msgstr "Editorin teema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Poista resurssi"
+msgstr "Valitse toinen teemaresurssi:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Tuo teema"
+msgstr "Toinen teema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Animaatioraita: nimeä uudelleen"
+msgstr "Vahvista osan uudelleen nimeäminen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Niputettu uudelleennimeäminen"
+msgstr "Peruuta osan uudelleen nimeäminen"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Ylikirjoittaa"
+msgstr "Ylikirjoita osa"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Irrota tämä tyylilaatikko päätyylistä."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Kiinnitä tämä tyylilaatikko päätyyliksi. Sen ominaisuuksien muokkaaminen "
+"päivittää kaikkien muiden tämän tyyppisten tyylilaatikoiden ominaisuuksia."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Tyyppi"
+msgstr "Lisää tyyppi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Lisää kohde"
+msgstr "Lisää osan tyyppi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Solmun tyyppi"
+msgstr "Solmutyypit:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Lataa oletus"
+msgstr "Näytä oletus"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
-msgstr ""
+msgstr "Näytä oletustyypin osat ylikirjoitettujen osien ohella."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Ylikirjoittaa"
+msgstr "Ylikirjoita kaikki"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Ylikirjoita kaikki oletustyypin osat."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Teema"
+msgstr "Teema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Hallinnoi vientimalleja..."
+msgstr "Hallinnoi osia..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Lisää, poista, järjestele ja tuo teeman osia."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Esikatselu"
+msgstr "Lisää esikatselu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Päivitä esikatselu"
+msgstr "Oletusesikatselu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Valitse lähdemesh:"
+msgstr "Valitse käyttöliittymäskene:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
"Toggle the control picker, allowing to visually select control types for "
"edit."
msgstr ""
+"Kytke päälle tai pois kontrollien valitsija, joka antaa valita "
+"kontrollityypit muokkausta varten visuaalisesti."
#: editor/plugins/theme_editor_preview.cpp
msgid "Toggle Button"
@@ -9004,7 +9015,6 @@ msgid "Checked Radio Item"
msgstr "Valittu valintapainike"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Named Separator"
msgstr "Nimetty erotin"
@@ -9059,19 +9069,21 @@ msgstr "On,Useita,Asetuksia"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Virheellinen polku, PackedScene resurssi oli todennäköisesti siirretty tai "
+"poistettu."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
+"Virheellinen PackedScene resurssi, juurisolmuna täytyy olla Control solmu."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään."
+msgstr "Virheellinen tiedosto, ei ole PackedScene resurssi."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Lataa skenen uudelleen vastaamaan sen varsinaista tilaa."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -9658,7 +9670,7 @@ msgstr "Aseta lauseke"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Resize VisualShader node"
-msgstr "Muuta VisualShader solmun kokoa"
+msgstr "Muuta visuaalisen sävyttimen solmun kokoa"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
@@ -9670,7 +9682,7 @@ msgstr "Aseta oletustuloportti"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Node to Visual Shader"
-msgstr "Lisää solmu Visual Shaderiin"
+msgstr "Lisää solmu visuaaliseen sävyttimeen"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Node(s) Moved"
@@ -9691,7 +9703,7 @@ msgstr "Poista solmut"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
-msgstr "Visual Shaderin syötteen tyyppi vaihdettu"
+msgstr "Visuaalisen sävyttimen syötteen tyyppi vaihdettu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "UniformRef Name Changed"
@@ -9703,7 +9715,7 @@ msgstr "Kärkipiste"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Fragment"
-msgstr "Fragmentti"
+msgstr "Kuvapiste"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Light"
@@ -9715,7 +9727,7 @@ msgstr "Näytä syntyvä sävytinkoodi."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Create Shader Node"
-msgstr "Luo Shader solmu"
+msgstr "Luo sävytinsolmu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color function."
@@ -10412,18 +10424,18 @@ msgstr "Viittaus olemassa olevaan uniformiin."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
-msgstr "(Vain Fragment/Light tilat) Skalaariderivaattafunktio."
+msgstr "(Vain kuvapiste- tai valotilassa) Skalaariderivaattafunktio."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Vector derivative function."
-msgstr "(Vain Fragment/Light tilat) Vektoriderivaattafunktio."
+msgstr "(Vain kuvapiste- tai valotilassa) Vektoriderivaattafunktio."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Vain Fragment/Light tilat) (Vektori) 'x' derivaatta käyttäen "
+"(Vain kuvapiste- tai valotilassa) (Vektori) 'x' derivaatta käyttäen "
"paikallisdifferentiaalia."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10431,7 +10443,7 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Vain Fragment/Light tilat) (Skalaari) 'x' derivaatta käyttäen "
+"(Vain kuvapiste- tai valotilassa) (Skalaari) 'x' derivaatta käyttäen "
"paikallisdifferentiaalia."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10439,7 +10451,7 @@ msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Vain Fragment/Light tilat) (Vektori) 'y' derivaatta käyttäen "
+"(Vain kuvapiste- tai valotilassa) (Vektori) 'y' derivaatta käyttäen "
"paikallisdifferentiaalia."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10447,7 +10459,7 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Vain Fragment/Light tilat) (Skalaari) 'y' derivaatta käyttäen "
+"(Vain kuvapiste- tai valotilassa) (Skalaari) 'y' derivaatta käyttäen "
"paikallisdifferentiaalia."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10455,15 +10467,15 @@ msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Vain Fragment/Light tilat) (Vektori) 'x' ja 'y' derivaattojen itseisarvojen "
-"summa."
+"(Vain kuvapiste- tai valotilassa) (Vektori) 'x' ja 'y' derivaattojen "
+"itseisarvojen summa."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Vain Fragment/Light tilat) (Skalaari) 'x' ja 'y' derivaattojen "
+"(Vain kuvapiste- tai valotilassa) (Skalaari) 'x' ja 'y' derivaattojen "
"itseisarvojen summa."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10471,13 +10483,12 @@ msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Muokkaa visuaalista ominaisuutta"
+msgstr "Muokkaa visuaalista ominaisuutta:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
-msgstr "Visual Shaderin tila vaihdettu"
+msgstr "Visuaalisen sävyttimen tila vaihdettu"
#: editor/project_export.cpp
msgid "Runnable"
@@ -10539,7 +10550,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Export Path"
-msgstr "Vie polku"
+msgstr "Vientipolku"
#: editor/project_export.cpp
msgid "Resources"
@@ -10599,9 +10610,8 @@ msgid "Script"
msgstr "Skripti"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Skriptin vientitila:"
+msgstr "GDScriptin vientitila:"
#: editor/project_export.cpp
msgid "Text"
@@ -10609,21 +10619,19 @@ msgstr "Teksti"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Käännetty bytekoodi (nopeampi latautuminen)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "Salattu (syötä avain alla)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "Virheellinen salausavain (oltava 64 merkkiä pitkä)"
+msgstr "Virheellinen salausavain (oltava 64 heksadesimaalimerkkiä pitkä)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "Skriptin salausavain (256-bittinen heksana):"
+msgstr "GDScriptin salausavain (256-bittinen heksadesimaalina):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10697,7 +10705,6 @@ msgid "Imported Project"
msgstr "Tuotu projekti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
msgstr "Virheellinen projektin nimi."
@@ -10921,14 +10928,12 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Haluatko varmasti suorittaa %d projektia yhdenaikaisesti?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Valitse laite listasta"
+msgstr "Poista %d projektia listasta?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Valitse laite listasta"
+msgstr "Poistetaanko tämä projekti listasta?"
#: editor/project_manager.cpp
msgid ""
@@ -10961,9 +10966,8 @@ msgid "Project Manager"
msgstr "Projektinhallinta"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projektit"
+msgstr "Paikalliset projektit"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -10974,23 +10978,20 @@ msgid "Last Modified"
msgstr "Viimeksi muutettu"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Vie projekti"
+msgstr "Muokkaa projektia"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Nimetä projekti"
+msgstr "Aja projekti"
#: editor/project_manager.cpp
msgid "Scan"
msgstr "Tutki"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projektit"
+msgstr "Skannaa projektit"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11001,14 +11002,12 @@ msgid "New Project"
msgstr "Uusi projekti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Tuotu projekti"
+msgstr "Tuo projekti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Nimetä projekti"
+msgstr "Poista projekti"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11019,9 +11018,8 @@ msgid "About"
msgstr "Tietoja"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Asset-kirjasto"
+msgstr "Asset-kirjaston projektit"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11033,7 +11031,7 @@ msgstr "Poista kaikki"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Poista myös projektien sisältö (ei voi kumota!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11048,18 +11046,16 @@ msgstr ""
"Haluaisitko selata virallisia esimerkkiprojekteja Asset-kirjastosta?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Suodata ominaisuuksia"
+msgstr "Suodata projekteja"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"Hakulaatikko suodattaa projektit nimen ja polun loppuosan mukaan.\n"
+"Tämä kenttä suodattaa projektit nimen ja polun loppuosan mukaan.\n"
"Suodattaaksesi projektit nimen ja koko polun mukaan, haussa tulee olla "
"mukana vähintään yksi `/` merkki."
@@ -11069,7 +11065,7 @@ msgstr "Näppäin "
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "Fyysinen avain"
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11117,7 +11113,7 @@ msgstr "Laite"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (fyysinen)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11260,23 +11256,20 @@ msgid "Override for Feature"
msgstr "Ominaisuuden ohitus"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Lisää käännös"
+msgstr "Lisää %d käännöstä"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
msgstr "Poista käännös"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Lisää resurssin korvaavuus"
+msgstr "Käännösresurssin uudelleenmäppäys: lisää %d polkua"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Lisää resurssin korvaavuus"
+msgstr "Käännösresurssin uudelleenmäppäys: lisää %d uudelleenmäppäystä"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -11722,12 +11715,15 @@ msgstr "Poista solmu \"%s\"?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"Haaran tallentaminen skenenä edellyttää, että skene on avoinna editorissa."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Haaran tallentaminen skenenä edellyttää, että vain yksi solmu on valittuna, "
+"mutta olet valinnut %d solmua."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11736,6 +11732,11 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Ei voida tallentaa juurisolmun haaraa skenen ilmentymänä.\n"
+"Luodaksesi muokattavan kopion nykyisestä skenestä, monista se "
+"Tiedostojärjestelmä-telakan pikavalikosta\n"
+"tai luo vaihtoehtoisesti periytetty skene Skene > Uusi periytetty skene... "
+"valikosta."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11743,6 +11744,9 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Skenestä, joka on jo ilmentymä, ei voida luoda haaraa.\n"
+"Luodaksesi muunnelman skenestä voit sen sijaan tehdä periytetyn skenen "
+"skeneilmentymästä Skene > Uusi periytetty skene... valikosta."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12150,6 +12154,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Varoitus: skriptin nimeäminen sisäänrakennetun tyypin nimiseksi ei ole "
+"yleensä toivottua."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12221,7 +12227,7 @@ msgstr "Kopioi virhe"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Avaa C++ lähdekoodi GitHubissa"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12400,14 +12406,22 @@ msgid "Change Ray Shape Length"
msgstr "Vaihda säteen muodon pituutta"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Aseta käyräpisteen sijainti"
+msgstr "Aseta huoneen pisteen sijainti"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Aseta käyräpisteen sijainti"
+msgstr "Aseta portaalin pisteen sijainti"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Muuta sylinterimuodon sädettä"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Aseta käyrän aloitussijainti"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12522,14 +12536,12 @@ msgid "Object can't provide a length."
msgstr "Objektille ei voida määrittää pituutta."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Vie mesh-kirjasto"
+msgstr "Vie mesh GLTF2:na"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Vie..."
+msgstr "Vie GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12572,9 +12584,8 @@ msgid "GridMap Paint"
msgstr "Ruudukon maalaus"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "Täytä valinta"
+msgstr "Ruudukon valinta"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12697,6 +12708,11 @@ msgstr "Piirretään lightmappeja"
msgid "Class name can't be a reserved keyword"
msgstr "Luokan nimi ei voi olla varattu avainsana"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Täytä valinta"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Sisemmän poikkeuksen kutsupinon loppu"
@@ -12826,14 +12842,12 @@ msgid "Add Output Port"
msgstr "Lisää lähtöportti"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Muuta tyyppiä"
+msgstr "Vaihda portin tyyppi"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Vaihda tuloportin nimi"
+msgstr "Vaihda portin nimi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -12949,9 +12963,8 @@ msgid "Add Preload Node"
msgstr "Lisää esiladattu solmu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Lisää solmu"
+msgstr "Lisää solmuja"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13183,73 +13196,67 @@ msgstr "Hae VisualScriptistä"
msgid "Get %s"
msgstr "Hae %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Paketin nimi puuttuu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Paketin osioiden pituuksien täytyy olla nollasta poikkeavia."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Merkki '%s' ei ole sallittu Android-sovellusten pakettien nimissä."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Paketin osion ensimmäinen merkki ei voi olla numero."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Merkki '%s' ei voi olla paketin osion ensimmäinen merkki."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Paketilla on oltava ainakin yksi '.' erotinmerkki."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Valitse laite listasta"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "Ajetaan %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
-msgstr "Viedään kaikki"
+msgstr "Viedään APK:ta..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
-msgstr "Poista asennus"
+msgstr "Poistetaan asennusta..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "Ladataan, hetkinen..."
+msgstr "Asennetaan laitteelle, hetkinen..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
-msgstr "Aliprosessia ei voitu käynnistää!"
+msgstr "Ei voitu asentaa laitteelle: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
-msgstr "Suoritetaan mukautettua skriptiä..."
+msgstr "Ajetaan laitteella..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "Kansiota ei voitu luoda."
+msgstr "Ei voitu suorittaa laitteella."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "'apksigner' työkalua ei löydy."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13257,7 +13264,7 @@ msgstr ""
"Android-käännösmallia ei ole asennettu projektiin. Asenna se Projekti-"
"valikosta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13265,12 +13272,12 @@ msgstr ""
"Joko Debug Keystore, Debug User JA Debug Password asetukset on kaikki "
"konfiguroitava TAI ei mitään niistä."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Debug keystore ei ole määritettynä editorin asetuksissa eikä esiasetuksissa."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13278,48 +13285,48 @@ msgstr ""
"Joko Release Keystore, Release User JA Release Password asetukset on kaikki "
"konfiguroitava TAI ei mitään niistä."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "Release keystore on konfiguroitu väärin viennin esiasetuksissa."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Editorin asetuksiin tarvitaan kelvollinen Android SDK -polku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Editorin asetuksissa on virheellinen Android SDK -polku."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "'platform-tools' hakemisto puuttuu!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Android SDK platform-tools adb-komentoa ei löydy."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Ole hyvä ja tarkista editorin asetuksissa määritelty Android SDK -hakemisto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "'build-tools' hakemisto puuttuu!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Android SDK build-tools apksigner-komentoa ei löydy."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Virheellinen julkinen avain APK-laajennosta varten."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Virheellinen paketin nimi:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13327,102 +13334,85 @@ msgstr ""
"\"android/modules\" projektiasetukseen on liitetty virheellinen "
"\"GodotPaymentV3\" moduuli (muuttunut Godotin versiossa 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"\"Use Custom Build\" asetuksen täytyy olla päällä, jotta liittännäisiä voi "
"käyttää."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus "
-"on \"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus on "
"\"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus on "
-"\"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" on käyttökelpoinen vain, kun \"Use Custom Build\" asetus on "
"päällä."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"'apksigner' ei löydy.\n"
+"Ole hyvä ja tarkista, että komento on saatavilla Android SDK build-tools "
+"hakemistossa.\n"
+"Tuloksena syntynyt %s on allekirjoittamaton."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "Allekirjoitetaan debug %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
-msgstr ""
-"Selataan tiedostoja,\n"
-"Hetkinen…"
+msgstr "Allekirjoitetaan release %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
-msgstr "Mallin avaus vientiin epäonnistui:"
+msgstr "Keystorea ei löytynyt, ei voida viedä."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' palautti virheen #%d"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "Lisätään %s..."
+msgstr "Todennetaan %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "'apksigner' todennus kohteelle %s epäonnistui."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "Viedään kaikki"
+msgstr "Viedään Androidille"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Virheellinen tiedostonimi! Android App Bundle tarvitsee *.aab "
"tiedostopäätteen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion ei ole yhteensopiva Android App Bundlen kanssa."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
"Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Vientiformaatti ei ole tuettu!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13430,7 +13420,7 @@ msgstr ""
"Yritetään kääntää mukautetulla käännösmallilla, mutta sillä ei ole "
"versiotietoa. Ole hyvä ja uudelleenasenna se 'Projekti'-valikosta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13442,26 +13432,26 @@ msgstr ""
" Godotin versio: %s\n"
"Ole hyvä ja uudelleenasenna Androidin käännösmalli 'Projekti'-valikosta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Ei voitu ylikirjoittaa res://android/build/res/*.xml tiedostoja projektin "
+"nimellä"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun."
+msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
-msgstr "Ei voitu kirjoittaa tiedostoa:"
+msgstr "Ei voitu kirjoittaa laajennuspakettitiedostoa!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Käännetään Android-projektia (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13470,11 +13460,11 @@ msgstr ""
"Vaihtoehtoisesti, lue docs.godotengine.org sivustolta Androidin "
"käännösdokumentaatio."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Siirretään tulostetta"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13482,48 +13472,48 @@ msgstr ""
"Vientitiedoston kopiointi ja uudelleennimeäminen ei onnistu, tarkista "
"tulosteet gradle-projektin hakemistosta."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "Animaatio ei löytynyt: '%s'"
+msgstr "Pakettia ei löytynyt: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "Luodaan korkeuskäyriä..."
+msgstr "Luodaan APK:ta..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Mallin avaus vientiin epäonnistui:"
+msgstr ""
+"Ei löydetty APK-vientimallia vientiä varten:\n"
+"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"Vientimalleista puuttuu kirjastoja valituille arkkitehtuureille: %s.\n"
+"Ole hyvä ja kokoa malli, jossa on kaikki tarvittavat kirjastot, tai poista "
+"puuttuvien arkkitehtuurien valinta viennin esiasetuksista."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
-msgstr "Lisätään %s..."
+msgstr "Lisätään tiedostoja..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
-msgstr "Ei voitu kirjoittaa tiedostoa:"
+msgstr "Ei voitu viedä projektin tiedostoja"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Tasataan APK:ta..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "Ei voitu purkaa väliaikaista unaligned APK:ta."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
@@ -13570,45 +13560,40 @@ msgid "Could not write file:"
msgstr "Ei voitu kirjoittaa tiedostoa:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Ei voitu kirjoittaa tiedostoa:"
+msgstr "Ei voitu lukea tiedostoa:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Ei voitu lukea mukautettua HTML tulkkia:"
+msgstr "Ei voitu lukea HTML tulkkia:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Kansiota ei voitu luoda."
+msgstr "Ei voitu luoda HTTP-palvelimen hakemistoa:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Virhe tallennettaessa skeneä."
+msgstr "Virhe käynnistettäessä HTTP-palvelinta:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Virheellinen Identifier osio:"
+msgstr "Virheellinen bundle-tunniste:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "Notarisointi: koodin allekirjoitus tarvitaan."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Notarisointi: hardened runtime tarvitaan."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Notarointi: Apple ID nimeä ei ole määritetty."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Notarointi: Apple ID salasanaa ei ole määritetty."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -14041,6 +14026,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"GIProben Compress-ominaisuus on poistettu käytöstä tiedossa olevien bugien "
+"vuoksi, eikä sillä ole enää mitään vaikutusta.\n"
+"Poista GIProben Compress-ominaisuus käytöstä poistaaksesi tämän varoituksen."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -14061,6 +14049,14 @@ msgstr ""
"NavigationMeshInstance solmun täytyy olla Navigation solmun alaisuudessa. Se "
"tarjoaa vain navigointidataa."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14130,15 +14126,15 @@ msgstr "Solmujen A ja B tulee olla eri PhysicsBody solmut"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomManager solmun ei pitäisi sijaita Portal solmun alla."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Room solmun ei pitäisi sijaita Portal solmun alla."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomGroup solmun ei pitäisi sijaita Portal solmun alla."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14150,79 +14146,96 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Room solmun alla ei voi olla toista Room solmua."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "RoomManager solmua ei pitäisi sijoittaa Room solmun sisään."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "RoomGroup solmua ei pitäisi sijoittaa Room solmun sisään."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"Huoneen konveksi runko sisältää suuren määrän tasoja.\n"
+"Harkitse huoneen rajojen yksinkertaistamista suorituskyvyn lisäämiseksi."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "RoomManager solmua ei pitäisi sijoittaa RoomGroup solmun sisään."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "RoomList solmua ei ole määrätty."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "RoomList solmun tulisi olla Spatial (tai periytynyt Spatial solmusta)."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"Portaalin Depth Limit on asetettu nollaksi.\n"
+"Vain se huone, jossa kamera on, piirretään."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Skenepuussa pitäisi olla vain yksi RoomManager solmu."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"RoomList solmun polku on virheellinen.\n"
+"Ole hyvä ja tarkista, että RoomList haara on määrätty RoomManager solmussa."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList solmulla ei ole Room solmuja, keskeytetään."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Havaittiin väärin nimettyjä solmuja, tarkista yksityiskohdat tulostelokista. "
+"Keskeytetään."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Portaalin linkkihuonetta ei löydetty, tarkista yksityiskohdat tulostelokista."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Portaalin automaatinen linkitys epäonnistui, tarkista yksityiskohdat "
+"tulostelokista.\n"
+"Tarkista, että portaali on suunnattu ulospäin lähtöhuoneesta katsottuna."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Havaittiin päällekkäisiä huoneita, kamerat saattavat toimia virheellisesti "
+"päällekkäisillä alueilla.\n"
+"Tarkista yksityiskohdat tulostelokista."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Virhe laskettaessa huoneen rajoja.\n"
+"Varmista, että kaikki huoneet sisältävät geometrian tai käsin syötetyt rajat."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14287,7 +14300,7 @@ msgstr "Animaatio ei löytynyt: '%s'"
#: scene/animation/animation_player.cpp
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "Tee animaation palautus"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14388,6 +14401,14 @@ msgstr "Käytä sopivaa tiedostopäätettä."
msgid "Enable grid minimap."
msgstr "Käytä ruudukon pienoiskarttaa."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14441,6 +14462,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"Näyttöruudun koko on oltava suurempi kuin 0, jotta mitään renderöidään."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14462,25 +14487,29 @@ msgid "Invalid comparison function for that type."
msgstr "Virheellinen vertailufunktio tälle tyypille."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa."
+msgstr "Varying tyyppiä ei voi sijoittaa '%s' funktiossa."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"Varying muuttujia, jotka on sijoitettu 'vertex' funktiossa, ei voi "
+"uudelleensijoittaa 'fragment' tai 'light' funktioissa."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"Varying muuttujia, jotka on sijoitettu 'fragment' funktiossa, ei voi "
+"uudelleensijoittaa 'vertex' tai 'light' funktioissa."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
msgstr ""
+"Kuvapistevaiheen varying muuttujaa ei voitu käyttää mukautetussa funktiossa!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
@@ -14494,6 +14523,41 @@ msgstr "Sijoitus uniformille."
msgid "Constants cannot be modified."
msgstr "Vakioita ei voi muokata."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Tee lepoasento (luista)"
+
+#~ msgid "Bottom"
+#~ msgstr "Pohja"
+
+#~ msgid "Left"
+#~ msgstr "Vasen"
+
+#~ msgid "Right"
+#~ msgstr "Oikea"
+
+#~ msgid "Front"
+#~ msgstr "Etu"
+
+#~ msgid "Rear"
+#~ msgstr "Taka"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Nimetön muokkain"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" "
+#~ "asetus on \"Oculus Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus "
+#~ "on \"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Paketin sisältö:"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index e53b7bb1a7..c227244f65 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -1003,7 +1003,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1632,13 +1632,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2010,7 +2010,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2489,6 +2489,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3114,6 +3138,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Pagbago ng Transform ng Animation"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3356,6 +3385,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5401,6 +5434,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6302,7 +6345,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6889,6 +6936,15 @@ msgstr "Maglipat ng (mga) Bezier Point"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "3D Transform Track"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7383,11 +7439,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7415,6 +7471,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7522,42 +7632,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7819,6 +7909,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7884,7 +7978,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11801,6 +11895,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12082,6 +12184,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12554,159 +12660,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12714,57 +12809,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12772,54 +12867,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12827,19 +12922,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13289,6 +13384,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13578,6 +13681,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13618,6 +13729,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index e6e2c9021e..9416a14cdc 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -66,7 +66,7 @@
# Fabrice <fabricecipolla@gmail.com>, 2019.
# Romain Paquet <titou.paquet@gmail.com>, 2019.
# Xavier Sellier <contact@binogure-studio.com>, 2019.
-# Sofiane <Sofiane-77@caramail.fr>, 2019.
+# Sofiane <Sofiane-77@caramail.fr>, 2019, 2021.
# Camille Mohr-Daurat <pouleyketchoup@gmail.com>, 2019.
# Pierre Stempin <pierre.stempin@gmail.com>, 2019.
# Pierre Caye <pierrecaye@laposte.net>, 2020, 2021.
@@ -87,8 +87,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
-"Last-Translator: Blackiris <divjvc@free.fr>\n"
+"PO-Revision-Date: 2021-08-20 06:04+0000\n"
+"Last-Translator: Pierre Caye <pierrecaye@laposte.net>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -445,15 +445,13 @@ msgstr "Insérer une animation"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Mode d'aimantation (%s)"
+msgstr "nœud '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animation"
+msgstr "animation"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -462,9 +460,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Il n'y a pas de propriété « %s »."
+msgstr "propriété « %s »"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1108,7 +1105,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dépendances"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ressource"
@@ -1774,13 +1771,13 @@ msgstr ""
"Activez 'Import Pvrtc' dans les paramètres du projet, ou désactivez 'Driver "
"Fallback Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Modèle de débogage personnalisé introuvable."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2165,7 +2162,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Ré-importation des assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Dessus"
@@ -2402,6 +2399,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Tourne lorsque la fenêtre de l'éditeur est redessinée.\n"
+"L'option Mettre à jour en Permanence est activée, ce qui peut augmenter la "
+"consommation de puissance. Cliquez pour le désactiver."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2684,6 +2684,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "La scène actuelle n'est pas enregistrée. Ouvrir quand même ?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Annuler"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refaire"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Impossible de recharger une scène qui n'a jamais été sauvegardée."
@@ -3382,6 +3408,11 @@ msgid "Merge With Existing"
msgstr "Fusionner avec l'existant"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Changer la transformation de l’animation"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Ouvrir et exécuter un script"
@@ -3640,6 +3671,10 @@ msgstr ""
"La ressource sélectionnée (%s) ne correspond à aucun des types attendus pour "
"cette propriété (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Rendre unique"
@@ -3935,14 +3970,12 @@ msgid "Download from:"
msgstr "Télécharger depuis :"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Exécuter dans le navigateur"
+msgstr "Ouvrir dans le navigateur Web"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copier l'erreur"
+msgstr "Copier l'URL du miroir"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -5760,6 +5793,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Déplacer le CanvasItem « %s » vers (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Verrouillage Sélectionné"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Groupes"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6710,7 +6755,13 @@ msgid "Remove Selected Item"
msgstr "Supprimer l'élément sélectionné"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importer depuis la scène"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importer depuis la scène"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7308,6 +7359,16 @@ msgstr "Générer des points"
msgid "Flip Portal"
msgstr "Retourner le Portal"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Supprimer la transformation"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Créer un nœud"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree n'a pas de chemin défini vers un AnimationPlayer"
@@ -7812,12 +7873,14 @@ msgid "Skeleton2D"
msgstr "Squelette 2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Créer la position de repos (d'après les os)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Assigner les os à la position de repos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Assigner les os à la position de repos"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Écraser"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7844,6 +7907,71 @@ msgid "Perspective"
msgstr "Perspective"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspective"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspective"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspective"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspective"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Orthogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspective"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformation annulée."
@@ -7951,42 +8079,22 @@ msgid "Bottom View."
msgstr "Vue de dessous."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Dessous"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vue de gauche."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Gauche"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vue de droite."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Droite"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vue avant."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Avant"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vue arrière."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Arrière"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Aligner Transform avec la vue"
@@ -8261,6 +8369,11 @@ msgid "View Portal Culling"
msgstr "Afficher le Portal culling"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Afficher le Portal culling"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Paramètres..."
@@ -8326,8 +8439,9 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gadget sans nom"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Projet sans titre"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8790,6 +8904,9 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Sélectionnez un type de thème dans la liste pour modifier ses éléments. \n"
+"Vous pouvez ajouter un type personnalisé ou importer un type avec ses "
+"éléments à partir d’un autre thème."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8820,6 +8937,9 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Ce type de thème est vide.\n"
+"Ajoutez-lui des éléments manuellement ou en important à partir d'un autre "
+"thème."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -12474,14 +12594,22 @@ msgid "Change Ray Shape Length"
msgstr "Changer la longueur d'une forme en rayon"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Définir la position du point de la courbe"
+msgstr "Définir la position du point de la pièce"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Définir la position du point de la courbe"
+msgstr "Définir la position du point du Portal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Changer le rayon de la forme du cylindre"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Définir position d'entrée de la courbe"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12596,9 +12724,8 @@ msgid "Object can't provide a length."
msgstr "L'objet ne peut fournir une longueur."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Exporter le Maillage GLTF2"
+msgstr "Exporter le Maillage en GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
msgid "Export GLTF..."
@@ -12769,6 +12896,11 @@ msgstr "Tracer des lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr "Le nom de classe ne peut pas être un mot-clé réservé"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Remplir la sélection"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fin de la trace d'appel (stack trace) intrinsèque"
@@ -13020,9 +13152,8 @@ msgid "Add Preload Node"
msgstr "Ajouter un nœud préchargé"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Ajouter un nœud"
+msgstr "Ajouter Node(s)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13257,73 +13388,72 @@ msgstr "Rechercher VisualScript"
msgid "Get %s"
msgstr "Obtenir %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Nom du paquet manquant."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Les segments du paquet doivent être de longueur non nulle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"Le caractère « %s » n'est pas autorisé dans les noms de paquet "
"d'applications Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
"Un chiffre ne peut pas être le premier caractère d'un segment de paquet."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Le caractère \"%s\" ne peut pas être le premier caractère d'un segment de "
"paquet."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Le paquet doit comporter au moins un séparateur « . »."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Sélectionner appareil depuis la liste"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr "En cours d'exécution sur %s"
+msgstr "Exécution sur %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "Exportation de l'APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "Désinstallation..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "Installation sur l'appareil, veuillez patienter..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Impossible d'installer sur l'appareil : %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "En cours d'exécution sur l'appareil..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "Impossible d'exécuter sur l'appareil."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Impossible de trouver l'outil 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13331,7 +13461,7 @@ msgstr ""
"Le modèle de compilation Android n'est pas installé dans le projet. "
"Installez-le à partir du menu Projet."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13339,13 +13469,13 @@ msgstr ""
"Il faut configurer soit les paramètres Debug Keystore, Debug User ET Debug "
"Password, soit aucun d'entre eux."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Le Debug keystore n'est pas configuré dans les Paramètres de l'éditeur, ni "
"dans le préréglage."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13353,55 +13483,55 @@ msgstr ""
"Il faut configurer soit les paramètres Release Keystore, Release User ET "
"Release Password, soit aucun d'entre eux."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"La clé de version n'est pas configurée correctement dans le préréglage "
"d'exportation."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Un chemin d'accès valide au SDK Android est requis dans les paramètres de "
"l'éditeur."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"Chemin d'accès invalide au SDK Android dans les paramètres de l'éditeur."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Dossier « platform-tools » manquant !"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Impossible de trouver la commande adb du SDK Android platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Veuillez vérifier le répertoire du SDK Android spécifié dans les paramètres "
"de l'éditeur."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Dossier « build-tools » manquant !"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"Impossible de trouver la commande apksigner du SDK Android build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Clé publique invalide pour l'expansion APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nom de paquet invalide :"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13409,40 +13539,24 @@ msgstr ""
"Module \"GodotPaymentV3\" invalide inclus dans le paramétrage du projet "
"\"android/modules\" (modifié dans Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "« Use Custom Build » doit être activé pour utiliser les plugins."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"« Degrés de liberté » est valide uniquement lorsque le « Mode Xr » est « "
-"Oculus Mobile VR »."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"« Suivi de la main » est valide uniquement lorsque le « Mode Xr » est « "
"Oculus Mobile VR »."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"« Sensibilité de la mise au point » est valide uniquement lorsque le « Mode "
-"Xr » est « Oculus Mobile VR »."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"« Export AAB » est valide uniquement lorsque l'option « Use Custom Build » "
"est activée."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13454,61 +13568,57 @@ msgstr ""
"du SDK Android.\n"
"Le paquet sortant %s est non signé."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "Signature du debug %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "Signature de la version %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "Impossible de trouver le keystore, impossible d'exporter."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr "'apksigner' a terminé avec l'erreur #%d"
+msgstr "'apksigner' est retourné avec l'erreur #%d"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "Vérification de %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr "La vérification de %s avec 'apksigner' a échoué."
+msgstr "La vérification de %s par 'apksigner' a échoué."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Exportation vers Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Nom de fichier invalide ! Le bundle d'application Android nécessite "
"l'extension *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
"L'expansion de fichier APK n'est pas compatible avec le bundle d'application "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
"Nom de fichier invalide ! Les fichiers APK d'Android nécessitent l'extension "
"*.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "Format d'export non supporté !\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13517,7 +13627,7 @@ msgstr ""
"information de version n'existe pour lui. Veuillez réinstaller à partir du "
"menu 'Projet'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13529,27 +13639,26 @@ msgstr ""
" Version Godot : %s\n"
"Veuillez réinstaller la version d'Android depuis le menu 'Projet'."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
"Impossible d'écraser les fichiers res://android/build/res/*.xml avec le nom "
"du projet"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "Impossible d'écrire le fichier du paquet d'expansion !"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Construire le Project Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13559,11 +13668,11 @@ msgstr ""
"Sinon, visitez docs.godotengine.org pour la documentation de construction "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Déplacement du résultat"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13571,17 +13680,15 @@ msgstr ""
"Impossible de copier et de renommer le fichier d'export, vérifiez le dossier "
"du projet gradle pour les journaux."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "Paquet introuvable : « %s »"
+msgstr "Paquet non trouvé : %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "Création du fichier APK..."
+msgstr "Création de l'APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13589,33 +13696,31 @@ msgstr ""
"Impossible de trouver le modèle de l'APK à exporter :\n"
"%s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
-"Bibliothèques manquantes dans le modèle d'export pour les architectures "
+"Bibliothèques manquantes dans le modèle d'exportation pour les architectures "
"sélectionnées : %s.\n"
"Veuillez construire un modèle avec toutes les bibliothèques requises, ou "
-"désélectionner les architectures manquantes dans le préréglage de l'export."
+"désélectionner les architectures manquantes dans le préréglage d'exportation."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Ajout de fichiers..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "Impossible d'exporter les fichiers du projet"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Alignement de l'APK…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "Impossible de décompresser l'APK temporaire non aligné."
@@ -13668,9 +13773,8 @@ msgid "Could not read file:"
msgstr "Impossible de lire le fichier :"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Impossible de lire le shell HTML personnalisé :"
+msgstr "Impossible de lire le shell HTML :"
#: platform/javascript/export/export.cpp
msgid "Could not create HTTP server directory:"
@@ -13681,26 +13785,24 @@ msgid "Error starting HTTP server:"
msgstr "Erreur de démarrage du serveur HTTP :"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Identifiant invalide :"
+msgstr "Identificateur de bundle non valide :"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Notarization: code signing required."
msgstr "Certification : signature du code requise."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Certification : exécution renforcée requise."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Certification : Identifiant Apple ID non spécifié."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Certification : Mot de passe Apple ID non spécifié."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -14145,7 +14247,6 @@ msgstr ""
"A la place utilisez une BakedLightMap."
#: scene/3d/gi_probe.cpp
-#, fuzzy
msgid ""
"The GIProbe Compress property has been deprecated due to known bugs and no "
"longer has any effect.\n"
@@ -14176,6 +14277,14 @@ msgstr ""
"Un NavigationMeshInstance doit être enfant ou sous-enfant d'un nœud de type "
"Navigation. Il fournit uniquement des données de navigation."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14269,78 +14378,100 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
msgstr ""
+"Une pièce ne peut pas avoir une autre pièce comme enfant ou petit-enfant."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "Le RoomManager ne doit pas être placé à l'intérieur d'une pièce."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "Un RoomGroup ne doit pas être placé à l'intérieur d'une pièce."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"La coque convexe de la pièce contient un grand nombre de plans.\n"
+"Envisagez de simplifier la limite de la pièce afin d'augmenter les "
+"performances."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "Le RoomManager ne doit pas être placé à l'intérieur d'un RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "La RoomList n'a pas été assignée."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "Le nœud RoomList doit être un Spatial (ou un dérivé de Spatial)."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"La limite de profondeur du portail est fixée à zéro.\n"
+"Seule la pièce dans laquelle se trouve la caméra sera rendue."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Il ne doit y avoir qu'un seul RoomManager dans le SceneTree."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Le chemin de la RoomList est invalide.\n"
+"Veuillez vérifier que la branche RoomList a été attribuée dans le "
+"RoomManager."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList ne contient aucune pièce, abandon."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Des nœuds mal nommés ont été détectés, vérifiez le journal de sortie pour "
+"plus de détails. Abandon."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Lien entre le portail et la pièce introuvable, vérifiez le journal de sortie "
+"pour plus de détails."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"La liaison automatique du portail a échoué, vérifiez le journal de sortie "
+"pour plus de détails.\n"
+"Vérifiez que le portail est orienté vers l'extérieur de la pièce source."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Chevauchement de pièces détecté, les caméras peuvent fonctionner de manière "
+"incorrecte dans la zone de chevauchement.\n"
+"Consultez le journal de sortie pour plus de détails."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Erreur de calcul des limites de la pièce.\n"
+"Assurez-vous que toutes les pièces contiennent une géométrie ou des limites "
+"manuelles."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14406,7 +14537,7 @@ msgstr "Animation introuvable : « %s »"
#: scene/animation/animation_player.cpp
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "Animer Appliquer Réinitialiser"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14509,6 +14640,14 @@ msgstr "Utilisez une extension valide."
msgid "Enable grid minimap."
msgstr "Activer l'alignement."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14565,6 +14704,10 @@ msgstr ""
"La taille de la fenêtre d'affichage doit être supérieure à 0 pour pouvoir "
"afficher quoi que ce soit."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14586,25 +14729,30 @@ msgid "Invalid comparison function for that type."
msgstr "Fonction de comparaison invalide pour ce type."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Les variations ne peuvent être affectées que dans la fonction vertex."
+msgstr "Varying ne peut pas être assigné dans la fonction '%s'."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"Les Varyings assignées dans la fonction \"vertex\" ne peuvent pas être "
+"réassignées dans 'fragment' ou 'light'."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"Les Varyings attribuées dans la fonction 'fragment' ne peuvent pas être "
+"réattribuées dans 'vertex' ou 'light'."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
msgstr ""
+"La varying de l'étape fragment n'a pas pu être accédée dans la fonction "
+"personnalisée !"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
@@ -14618,6 +14766,41 @@ msgstr "Affectation à la variable uniform."
msgid "Constants cannot be modified."
msgstr "Les constantes ne peuvent être modifiées."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Créer la position de repos (d'après les os)"
+
+#~ msgid "Bottom"
+#~ msgstr "Dessous"
+
+#~ msgid "Left"
+#~ msgstr "Gauche"
+
+#~ msgid "Right"
+#~ msgstr "Droite"
+
+#~ msgid "Front"
+#~ msgstr "Avant"
+
+#~ msgid "Rear"
+#~ msgstr "Arrière"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gadget sans nom"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "« Degrés de liberté » est valide uniquement lorsque le « Mode Xr » est « "
+#~ "Oculus Mobile VR »."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "« Sensibilité de la mise au point » est valide uniquement lorsque le « "
+#~ "Mode Xr » est « Oculus Mobile VR »."
+
#~ msgid "Package Contents:"
#~ msgstr "Contenu du paquetage :"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index 872463b1a9..da5c9051ed 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -995,7 +995,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Acmhainn"
@@ -1625,13 +1625,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2002,7 +2002,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2481,6 +2481,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3105,6 +3129,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3345,6 +3373,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5391,6 +5423,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6289,7 +6331,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6873,6 +6919,15 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Nód Cumaisc2"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7367,11 +7422,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7399,6 +7454,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7507,42 +7616,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7804,6 +7893,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7869,7 +7962,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11782,6 +11875,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12063,6 +12164,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12533,159 +12638,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12693,57 +12787,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12751,55 +12845,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Ábhar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12807,19 +12901,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13269,6 +13363,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13558,6 +13660,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13598,6 +13708,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index 054b62690d..285cdf4e3b 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -10,7 +10,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
+"PO-Revision-Date: 2021-08-12 21:32+0000\n"
"Last-Translator: davidrogel <david.rogel.pernas@icloud.com>\n"
"Language-Team: Galician <https://hosted.weblate.org/projects/godot-engine/"
"godot/gl/>\n"
@@ -368,13 +368,12 @@ msgstr "Engadir Animación"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr ""
+msgstr "nodo '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animación"
+msgstr "animación"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -382,9 +381,8 @@ msgstr "Un AnimationPlayer non pode animarse a si mesmo, só a outros players."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Non existe a propiedade '%s'."
+msgstr "propiedade '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1024,7 +1022,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependencias"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recurso"
@@ -1693,13 +1691,13 @@ msgstr ""
"Active 'Importar Pvrtc' na 'Configuración do Proxecto' ou desactive "
"'Controlador de Respaldo Activado'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Non se encontrou un modelo de depuración personalizado."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2080,7 +2078,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importando Assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Superior"
@@ -2592,6 +2590,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Escena actual non gardada ¿Abrir de todos os modos?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Desfacer"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refacer"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Non se pode volver a cargar unha escena que nunca foi gardada."
@@ -3275,6 +3299,11 @@ msgid "Merge With Existing"
msgstr "Combinar Con Existentes"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Cambiar Transformación da Animación"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Abrir e Executar un Script"
@@ -3528,6 +3557,10 @@ msgstr ""
"O recurso seleccionado (%s) non coincide con ningún tipo esperado para esta "
"propiedade (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Facer Único"
@@ -5616,6 +5649,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupos"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6555,7 +6599,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7145,6 +7193,15 @@ msgstr "Número de Puntos Xerados:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Crear Nodo"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7641,12 +7698,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Crear Pose de Repouso (a partir dos Ósos)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Asignar Pose de Repouso aos Ósos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Asignar Pose de Repouso aos Ósos"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sobreescribir"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7673,6 +7732,71 @@ msgid "Perspective"
msgstr "Perspetiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspetiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7791,42 +7915,22 @@ msgid "Bottom View."
msgstr "Vista Inferior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Inferior"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista Esquerda."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Esquerda"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista Dereita."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Dereita"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Frontal"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista Traseria."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Traseira"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Aliñar Transformación con Perspectiva"
@@ -8100,6 +8204,11 @@ msgid "View Portal Culling"
msgstr "Axustes de Visión"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Axustes de Visión"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Axustes..."
@@ -8165,8 +8274,9 @@ msgid "Post"
msgstr "Posterior (Post)"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo sen nome"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Proxecto Sen Nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12240,6 +12350,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12523,6 +12641,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Resolución á Metade"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12992,170 +13115,159 @@ msgstr "Buscar en VisualScript"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportar..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Desinstalar"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Cargando, por favor agarde..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Non se puido iniciar subproceso!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Non se puido crear cartafol."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Non está configurado o Keystore de depuración nin na configuración do "
"editor, nin nos axustes de exportación."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"O Keystore Release non está configurado correctamente nos axustes de "
"exportación."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"\"Use Custom Build\" debe estar activado para usar estas características "
"adicionais (plugins)."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13163,61 +13275,61 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Examinando arquivos,\n"
"Por favor, espere..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Engadindo %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13225,25 +13337,25 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Construir Proxecto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13253,33 +13365,33 @@ msgstr ""
"Ou visita docs.godotengine.org para ver a documentación sobre compilación "
"para Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Contenido do Paquete:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Conectando..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13287,21 +13399,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Engadindo %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Non se puido iniciar subproceso!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13794,6 +13906,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14101,6 +14221,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14150,6 +14278,10 @@ msgstr ""
"As dimensións da Mini-Ventá (Viewport) deben de ser maior que 0 para poder "
"renderizar nada."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14200,6 +14332,27 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Crear Pose de Repouso (a partir dos Ósos)"
+
+#~ msgid "Bottom"
+#~ msgstr "Inferior"
+
+#~ msgid "Left"
+#~ msgstr "Esquerda"
+
+#~ msgid "Right"
+#~ msgstr "Dereita"
+
+#~ msgid "Front"
+#~ msgstr "Frontal"
+
+#~ msgid "Rear"
+#~ msgstr "Traseira"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo sen nome"
+
#~ msgid "Singleton"
#~ msgstr "Singleton"
diff --git a/editor/translations/he.po b/editor/translations/he.po
index d0a09565de..15c4694949 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -1041,7 +1041,7 @@ msgstr ""
msgid "Dependencies"
msgstr "תלויות"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "משאב"
@@ -1692,13 +1692,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "תבנית ניפוי שגיאות מותאמת אישית לא נמצאה."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2096,7 +2096,7 @@ msgstr "יש מספר מייבאים לסוגים שונים המצביעים ל
msgid "(Re)Importing Assets"
msgstr "ייבוא משאבים (מחדש)"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "עליון"
@@ -2594,6 +2594,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "הסצנה הנוכחית לא נשמרה. לפתוח בכל זאת?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "ביטול"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "ביצוע חוזר"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "לא ניתן לרענן סצנה שמעולם לא נשמרה."
@@ -3265,6 +3291,11 @@ msgid "Merge With Existing"
msgstr "מיזוג עם נוכחיים"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "החלפת הנפשת אפקט שינוי צורה"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "פתיחה והרצה של סקריפט"
@@ -3516,6 +3547,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5673,6 +5708,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "בחירת מיקוד"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "קבוצות"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6633,7 +6680,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7237,6 +7288,16 @@ msgstr "מחיקת נקודה"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "התמרה"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "מפרק אחר"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7764,12 +7825,14 @@ msgid "Skeleton2D"
msgstr "יחידני"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "טעינת בררת המחדל"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "דריסה"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7799,6 +7862,63 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "מבט תחתי"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "כפתור שמאלי"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "כפתור ימני"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7914,42 +8034,22 @@ msgid "Bottom View."
msgstr "מבט מתחת."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "מתחת"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "מבט משמאל."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "שמאל"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "מבט מימין."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "ימין"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "מבט קדמי."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "קדמי"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "מבט אחורי."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "אחורי"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "יישור עם התצוגה"
@@ -8221,6 +8321,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "עריכת מצולע"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8287,7 +8392,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12444,6 +12549,15 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "שינוי רדיוס לצורת גליל"
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "שינוי רדיוס גליל"
@@ -12731,6 +12845,11 @@ msgstr "מדפיס תאורות:"
msgid "Class name can't be a reserved keyword"
msgstr "שם מחלקה לא יכול להיות מילת מפתח שמורה"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "מילוי הבחירה"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "סוף מחסנית מעקב לחריגה פנימית"
@@ -13208,143 +13327,143 @@ msgstr "חיפוש VisualScript"
msgid "Get %s"
msgstr "קבלת %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "שם החבילה חסר."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "מקטעי החבילה חייבים להיות באורך שאינו אפס."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "התו '%s' אינו מותר בשמות חבילת יישום אנדרואיד."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "ספרה אינה יכולה להיות התו הראשון במקטע חבילה."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "התו '%s' אינו יכול להיות התו הראשון במקטע חבילה."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "החבילה חייבת לכלול לפחות מפריד '.' אחד."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "נא לבחור התקן מהרשימה"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "ייצוא"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "הסרה"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr ""
"הקבצים נסרקים,\n"
"נא להמתין…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "לא ניתן להפעיל תהליך משנה!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "מופעל סקריפט מותאם אישית…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "לא ניתן ליצור תיקייה."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr "תבנית בנייה לאנדרואיד לא מותקנת בפרוייקט. ההתקנה היא מתפריט המיזם."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "מפתח לניפוי שגיאות לא נקבע בהגדרות העורך ולא בהגדרות הייצוא."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "מפתח גירסת שיחרור נקבע באופן שגוי בהגדרות הייצוא."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "מפתח ציבורי לא חוקי להרחבת APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "שם חבילה לא חוקי:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13352,34 +13471,21 @@ msgstr ""
"מודול \"GodotPaymentV3\" לא חוקי נמצא בהגדרת המיזם ב-\"אנדרואיד/מודולים"
"\" (שינוי בגודו 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "חובה לאפשר ״שימוש בבניה מותאמת אישית״ כדי להשתמש בתוספים."
-#: platform/android/export/export.cpp
-#, fuzzy
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr "\"דרגות של חופש\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr "\"Hand Tracking\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-#, fuzzy
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr "\"Focus Awareness\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13387,57 +13493,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"הקבצים נסרקים,\n"
"נא להמתין…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "לא ניתן לפתוח תבנית לייצוא:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "הגדרות"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "ייצוא"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13445,7 +13551,7 @@ msgstr ""
"מנסה לבנות מתבנית מותאמת אישית, אך לא קיים מידע על גירסת הבניה. נא להתקין "
"מחדש מתפריט 'Project'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build version mismatch:\n"
@@ -13458,25 +13564,25 @@ msgstr ""
" גרסת גודו: %s\n"
"נא להתקין מחדש את תבנית בניית אנדרואיד מתפריט 'Project'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "לא ניתן לכתוב קובץ:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "בניית מיזם אנדרואיד (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13484,34 +13590,34 @@ msgstr ""
"בניית מיזם אנדרואיד נכשלה, ניתן לבדוק את הפלט לאיתור השגיאה.\n"
"לחלופין, קיים ב- docs.godotengine.org תיעוד לבניית אנדרואיד."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "הנפשה לא נמצאה: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "יצירת קווי מתאר..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "לא ניתן לפתוח תבנית לייצוא:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13519,21 +13625,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "איתור…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "לא ניתן לכתוב קובץ:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14044,6 +14150,14 @@ msgstr ""
"NavigationMeshInstance חייב להיות ילד או נכד למפרק Navigation. הוא מספק רק "
"נתוני ניווט."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14363,6 +14477,14 @@ msgstr "יש להשתמש בסיומת תקנית."
msgid "Enable grid minimap."
msgstr "הפעלת הצמדה"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14413,6 +14535,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "גודל חלון התצוגה חייב להיות גדול מ-0 על מנת להציג משהו."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14464,6 +14590,34 @@ msgstr "השמה ל-uniform."
msgid "Constants cannot be modified."
msgstr "אי אפשר לשנות קבועים."
+#~ msgid "Bottom"
+#~ msgstr "מתחת"
+
+#~ msgid "Left"
+#~ msgstr "שמאל"
+
+#~ msgid "Right"
+#~ msgstr "ימין"
+
+#~ msgid "Front"
+#~ msgstr "קדמי"
+
+#~ msgid "Rear"
+#~ msgstr "אחורי"
+
+#, fuzzy
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr "\"דרגות של חופש\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"."
+
+#, fuzzy
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "תוכן החבילה:"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index 916e6fd01d..e6a2a76f37 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -1027,7 +1027,7 @@ msgstr ""
msgid "Dependencies"
msgstr "निर्भरताएँ"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "संसाधन"
@@ -1688,13 +1688,13 @@ msgstr ""
"आवश्यकता होती है।\n"
"प्रोजेक्ट सेटिंग्स में \"आयात Pvrtc\" सक्षम करें, या \"ड्राइवर फ़ॉलबैक सक्षम\" अक्षम करें।"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "कस्टम डिबग टेम्प्लेट नहीं मिला."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2075,7 +2075,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "अस्सेट (पुन:) इंपोर्ट"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "सर्वोच्च"
@@ -2578,6 +2578,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "वर्तमान दृश्य को बचाया नहीं गया । वैसे भी खुला?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "पूर्ववत्"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "दोहराएँ"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "एक दृश्य है कि कभी नहीं बचाया गया था फिर से लोड नहीं कर सकते ।"
@@ -3253,6 +3279,11 @@ msgid "Merge With Existing"
msgstr "मौजूदा के साथ विलय"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim परिवर्तन परिणत"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "ओपन एंड रन एक स्क्रिप्ट"
@@ -3506,6 +3537,10 @@ msgid ""
msgstr ""
"चयनित संसाधन (%s) इस संपत्ति (% एस) के लिए अपेक्षित किसी भी प्रकार से मेल नहीं खाता है।"
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "अद्वितीय बनाओ"
@@ -5595,6 +5630,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "अनेक ग्रुप"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6511,7 +6557,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7105,6 +7155,16 @@ msgstr "अंक बनाएं।"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "एनीमेशन परिवर्तन परिणत"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "को हटा दें"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7610,12 +7670,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "प्रायिक लोड कीजिये"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "मौजूदा के ऊपर लिखे"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7643,6 +7705,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7753,42 +7869,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8053,6 +8149,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "सदस्यता बनाएं"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8118,7 +8219,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12178,6 +12279,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12467,6 +12576,11 @@ msgstr "लाईटमॅप बना रहा है"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "सभी खंड"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12950,166 +13064,155 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "निर्यात..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "अनइंस्टाल करें"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "दर्पण को पुनः प्राप्त करना, कृपया प्रतीक्षा करें ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "उपप्रक्रिया शुरू नहीं कर सका!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "कस्टम स्क्रिप्ट चला रहा है..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "फ़ोल्डर नही बना सकते."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "गलत फॉण्ट का आकार |"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13117,60 +13220,60 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"फ़ाइले स्कैन कर रहा है,\n"
"कृपया रुकिये..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13178,56 +13281,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "पैकेज में है:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "जोड़ने..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13235,21 +13338,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "पसंदीदा:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "उपप्रक्रिया शुरू नहीं कर सका!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13712,6 +13815,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14003,6 +14114,14 @@ msgstr "मान्य एक्सटेनशन इस्तेमाल क
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14043,6 +14162,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index 37d517cba0..c5fcf3ab6e 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -9,7 +9,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2021-07-16 05:47+0000\n"
+"PO-Revision-Date: 2021-08-13 19:05+0000\n"
"Last-Translator: LeoClose <leoclose575@gmail.com>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hr/>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -149,7 +149,7 @@ msgstr "Animacija - Promijeni prijelaz"
#: editor/animation_track_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Anim Promijeni Transform"
#: editor/animation_track_editor.cpp
msgid "Anim Change Keyframe Value"
@@ -213,9 +213,8 @@ msgid "Animation Playback Track"
msgstr ""
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation length (frames)"
-msgstr "Trajanje animacije (u sekundama)"
+msgstr "Trajanje animacije (frames)"
#: editor/animation_track_editor.cpp
msgid "Animation length (seconds)"
@@ -523,12 +522,12 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Seconds"
-msgstr ""
+msgstr "Sekunde"
#: editor/animation_track_editor.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "FPS"
-msgstr ""
+msgstr "FPS"
#: editor/animation_track_editor.cpp editor/editor_plugin_settings.cpp
#: editor/editor_resource_picker.cpp
@@ -539,15 +538,15 @@ msgstr ""
#: editor/project_settings_editor.cpp editor/property_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit"
-msgstr ""
+msgstr "Uredi"
#: editor/animation_track_editor.cpp
msgid "Animation properties."
-msgstr ""
+msgstr "Svojstva animacije."
#: editor/animation_track_editor.cpp
msgid "Copy Tracks"
-msgstr ""
+msgstr "Kopiraj Zapise"
#: editor/animation_track_editor.cpp
msgid "Scale Selection"
@@ -942,11 +941,11 @@ msgstr "Napravi novi %s"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "Nema rezultata za \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Opis za %s nije dostupan."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1006,7 +1005,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Ovisnosti"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resurs"
@@ -1645,13 +1644,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2029,7 +2028,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2507,6 +2506,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3132,6 +3155,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Promijeni Transform"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3375,6 +3403,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5429,6 +5461,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6334,7 +6376,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6920,6 +6966,15 @@ msgstr "Pomakni Bezier Točke"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Premjesti čvor(node)"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7414,11 +7469,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Učitaj Zadano"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7446,6 +7502,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7555,42 +7665,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7853,6 +7943,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7918,7 +8012,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -8904,9 +8998,8 @@ msgid "Occlusion Mode"
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation Mode"
-msgstr "Način Interpolacije"
+msgstr "Način Navigacije"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Bitmask Mode"
@@ -9174,9 +9267,8 @@ msgid "Detect new changes"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Changes"
-msgstr "Promijeni"
+msgstr "Promjene"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -11858,6 +11950,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12142,6 +12242,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12617,159 +12721,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12777,57 +12870,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12835,54 +12928,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12890,19 +12983,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13353,6 +13446,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13642,6 +13743,14 @@ msgstr "Nastavak mora biti ispravan."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13682,6 +13791,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index c822f5bd53..2df1fc98b0 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -1039,7 +1039,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Függőségek"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Forrás"
@@ -1705,13 +1705,13 @@ msgstr ""
"Engedélyezze az 'Import Pvrtc' beállítást a Projekt Beállításokban, vagy "
"kapcsolja ki a 'Driver Fallback Enabled' beállítást."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Az egyéni hibakeresési sablon nem található."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2095,7 +2095,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Eszközök (Újra) Betöltése"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Eleje"
@@ -2612,6 +2612,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Még nem mentette az aktuális jelenetet. Megnyitja mindenképp?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Visszavonás"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Újra"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nem lehet újratölteni egy olyan jelenetet, amit soha nem mentett el."
@@ -3297,6 +3323,11 @@ msgid "Merge With Existing"
msgstr "Egyesítés Meglévővel"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animáció - Transzformáció Változtatása"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Szkriptet Megnyit és Futtat"
@@ -3545,6 +3576,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Egyedivé tétel"
@@ -5652,6 +5687,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "%s CanvasItem mozgatása (%d, %d)-ra/re"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Kijelölés zárolása"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Csoportok"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6577,7 +6624,13 @@ msgid "Remove Selected Item"
msgstr "Kijelölt Elem Eltávolítása"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importálás Jelenetből"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importálás Jelenetből"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7164,6 +7217,16 @@ msgstr "Generált Pontok Száma:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Megnéz a Síklap transzformációját."
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Node létrehozás"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7660,12 +7723,14 @@ msgid "Skeleton2D"
msgstr "Csontváz2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Visszaállítás Alapértelmezettre"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Felülírás"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7692,6 +7757,71 @@ msgid "Perspective"
msgstr "Perspektíva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektíva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektíva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektíva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektíva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonális"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektíva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Átalakítás Megszakítva."
@@ -7809,42 +7939,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8109,6 +8219,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Beállítások..."
@@ -8174,8 +8288,9 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Névtelen projekt"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12161,6 +12276,15 @@ msgstr "Görbe Pont Pozíció Beállítása"
msgid "Set Portal Point Position"
msgstr "Görbe Pont Pozíció Beállítása"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Be-Görbe Pozíció Beállítása"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12446,6 +12570,11 @@ msgstr "Fénytérképek Ábrázolása"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Kijelölés kitöltése"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12921,165 +13050,154 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Válasszon készüléket a listából"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Összes exportálása"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Eltávolítás"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Betöltés, kérem várjon..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Az alprocesszt nem lehetett elindítani!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Tetszőleges Szkript Futtatása..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Nem sikerült létrehozni a mappát."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Érvénytelen csomagnév:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13087,62 +13205,62 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Fájlok vizsgálata,\n"
"kérjük várjon..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "%s Hozzáadása..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Összes exportálása"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13150,56 +13268,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Az animáció nem található: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Kontúrok létrehozása…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13207,21 +13325,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "%s Hozzáadása..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Az alprocesszt nem lehetett elindítani!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13678,6 +13796,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13967,6 +14093,14 @@ msgstr "Használjon érvényes kiterjesztést."
msgid "Enable grid minimap."
msgstr "Rács kistérkép engedélyezése."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14011,6 +14145,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 3426bd0962..83b80592b1 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -10,7 +10,7 @@
# Fajar Ru <kzofajar@gmail.com>, 2018.
# Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016.
# Reza Hidayat Bayu Prabowo <rh.bayu.prabowo@gmail.com>, 2018, 2019.
-# Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018.
+# Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018, 2021.
# Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018, 2019, 2020, 2021.
# Tito <ijavadroid@gmail.com>, 2018.
# Tom My <tom.asadinawan@gmail.com>, 2017.
@@ -32,12 +32,13 @@
# Reza Almanda <rezaalmanda27@gmail.com>, 2021.
# Naufal Adriansyah <naufaladrn90@gmail.com>, 2021.
# undisputedgoose <diablodvorak@gmail.com>, 2021.
+# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-05 14:32+0000\n"
-"Last-Translator: undisputedgoose <diablodvorak@gmail.com>\n"
+"PO-Revision-Date: 2021-09-20 14:46+0000\n"
+"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
@@ -45,12 +46,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
-msgstr "Tipe argumen salah dalam penggunaan convert(), gunakan konstan TYPE_*."
+msgstr "Tipe argumen tidak valid untuk convert(), gunakan konstanta TYPE_*."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
@@ -60,9 +61,7 @@ msgstr "String dengan panjang 1 (karakter) yang diharapkan."
#: modules/mono/glue/gd_glue.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr ""
-"Tidak memiliki bytes yang cukup untuk merubah bytes ke nilai asal, atau "
-"format tidak valid."
+msgstr "Tidak cukup byte untuk mendekode byte, atau format tidak valid."
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
@@ -70,7 +69,8 @@ msgstr "Masukkan tidak sah %i (tidak diberikan) dalam ekspresi"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self tidak dapat digunakan karena instansi adalah null"
+msgstr ""
+"self tidak dapat digunakan karena instance bernilai null (tidak di-passing)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -395,15 +395,13 @@ msgstr "Sisipkan Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Tidak dapat membuka '%s'."
+msgstr "node '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animasi"
+msgstr "animasi"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -412,9 +410,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Tidak ada properti '%s'."
+msgstr "properti '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -584,7 +581,7 @@ msgstr "FPS"
#: editor/project_settings_editor.cpp editor/property_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit"
-msgstr "Sunting"
+msgstr "Edit"
#: editor/animation_track_editor.cpp
msgid "Animation properties."
@@ -624,9 +621,8 @@ msgid "Go to Previous Step"
msgstr "Pergi ke Langkah Sebelumnya"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Reset"
+msgstr "Terapkan Reset"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -645,9 +641,8 @@ msgid "Use Bezier Curves"
msgstr "Gunakan Lengkungan Bezier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Tempel Trek-trek"
+msgstr "Buat RESET Track"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -971,9 +966,8 @@ msgid "Edit..."
msgstr "sunting..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Menuju Ke Fungsi"
+msgstr "Menuju Ke Metode"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -993,7 +987,7 @@ msgstr "Tidak ada hasil untuk \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Tidak ada deskripsi tersedia untuk %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1053,7 +1047,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Ketergantungan"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resource"
@@ -1093,17 +1087,16 @@ msgid "Owners Of:"
msgstr "Pemilik Dari:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
"Hapus berkas yang dipilih dari proyek? (tidak bisa dibatalkan)\n"
-"Anda bisa menemukan berkas yang telah dihapus di tong sampah."
+"Tergantung pada konfigurasi sistem file Anda, file akan dipindahkan ke "
+"tempat sampah sistem atau dihapus secara permanen."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1111,10 +1104,11 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat "
-"bekerja.\n"
+"File-file yang telah dihapus diperlukan oleh sumber daya lain agar mereka "
+"dapat bekerja.\n"
"Hapus saja? (tidak bisa dibatalkan)\n"
-"Anda bisa menemukan berkas yang telah dihapus di tong sampah."
+"Tergantung pada konfigurasi sistem file Anda, file akan dipindahkan ke "
+"tempat sampah sistem atau dihapus secara permanen."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1284,41 +1278,36 @@ msgid "Licenses"
msgstr "Lisensi"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Galat saat membuka berkas paket (tidak dalam format ZIP)."
+msgstr "Gagal saat membuka berkas aset untuk \"%s\" (tidak dalam format ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Sudah Ada)"
+msgstr "%s (sudah ada)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Konten dari aset \"%s\" - %d berkas-berkas konflik dengan proyek anda:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "Konten dari aset \"%s\" - Tidak ada konflik dengan proyek anda:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Membuka Aset Terkompresi"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Berkas berikut gagal diekstrak dari paket:"
+msgstr "Berkas ini gagal mengekstrak dari aset \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Dan %s berkas lebih banyak."
+msgstr "(dan %s berkas lebih banyak)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Paket Sukses Terpasang!"
+msgstr "Aset \"%s\" sukses terpasang!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1330,9 +1319,8 @@ msgid "Install"
msgstr "Pasang"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Paket Instalasi"
+msgstr "Aset Instalasi"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1395,9 +1383,8 @@ msgid "Bypass"
msgstr "Jalan Lingkar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Opsi Bus"
+msgstr "Pilihan Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1563,13 +1550,13 @@ msgid "Can't add autoload:"
msgstr "Tidak dapat menambahkan autoload"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "File tidak ada."
+msgstr "%s adalah jalur yang tidak valid. Berkas tidak ada."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
msgstr ""
+"%s adalah jalur yang tidak valid. Tidak dalam jalur sumber daya (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1593,9 +1580,8 @@ msgid "Name"
msgstr "Nama"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Namai kembali Variabel"
+msgstr "Variabel Global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1719,13 +1705,13 @@ msgstr ""
"Aktifkan 'Impor Pvrtc' di Pengaturan Proyek, atau matikan 'Driver Fallback "
"Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Templat awakutu kustom tidak ditemukan."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1769,48 +1755,52 @@ msgstr "Dok Impor"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Memungkinkan untuk melihat dan mengedit scene 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
+"Memungkinkan untuk mengedit skrip menggunakan editor skrip terintegrasi."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Menyediakan akses bawaan ke Perpustakaan Aset."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Memungkinkan pengeditan hierarki node di dock Scene."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Memungkinkan untuk bekerja dengan sinyal dan kelompok node yang dipilih di "
+"dock Scene."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Memungkinkan untuk menelusuri sistem file lokal melalui dock khusus."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Memungkinkan untuk mengkonfigurasi pengaturan impor untuk aset individu. "
+"Membutuhkan dock FileSystem untuk berfungsi."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Kondisi Saat Ini)"
+msgstr "(saat ini)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(tidak ada)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Menghapus profil yang dipilih saat ini, '%s'? Tidak bisa dibatalkan."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1841,19 +1831,16 @@ msgid "Enable Contextual Editor"
msgstr "Aktifkan Editor Kontekstual"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Properti:"
+msgstr "Properti Kelas:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Fitur-fitur"
+msgstr "Fitur Utama:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Kelas yang Diaktifkan:"
+msgstr "Node dan Kelas:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1872,23 +1859,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "Galat saat menyimpan profil ke: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "Kembalikan ke Nilai Baku"
+msgstr "Reset ke Default"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "Profil Sekarang:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Hapus Profil"
+msgstr "Membuat Profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Hapus Tile"
+msgstr "Hapus Profil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1908,18 +1892,17 @@ msgid "Export"
msgstr "Ekspor"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Profil Sekarang:"
+msgstr "Konfigurasi Profil Saat Ini:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opsi Tekstur"
+msgstr "Opsi Ekstra:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Buat atau impor profil untuk mengedit kelas dan properti yang tersedia."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1946,9 +1929,8 @@ msgid "Select Current Folder"
msgstr "Pilih Folder Saat Ini"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "File telah ada, Overwrite?"
+msgstr "File sudah ada, timpa?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2109,7 +2091,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Mengimpor ulang Aset"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Atas"
@@ -2346,6 +2328,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Berputar saat jendela editor menggambar ulang.\n"
+"Perbarui Berkelanjutan diaktifkan, yang dapat meningkatkan penggunaan daya. "
+"Klik untuk menonaktifkannya."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2582,13 +2567,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"Scene saat ini tidak memiliki node root, tetapi %d sumber daya eksternal "
+"yang diubah tetap disimpan."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Node akar diperlukan untuk menyimpan skena."
+msgstr ""
+"Node root diperlukan untuk menyimpan scene. Anda dapat menambahkan node root "
+"menggunakan dok pohon Scene."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2619,6 +2607,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Skena saat ini belum disimpan. Buka saja?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Batal"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Ulangi"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Tidak bisa memuat ulang skena yang belum pernah disimpan."
@@ -2970,9 +2984,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Penjelajah Resource Orphan..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Ubah Nama Proyek"
+msgstr "Muat Ulang Project Saat Ini"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3131,13 +3144,12 @@ msgid "Help"
msgstr "Bantuan"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Buka Dokumentasi"
+msgstr "Dokumentasi Online"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Pertanyaan & Jawaban"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3145,7 +3157,7 @@ msgstr "Laporkan Kutu"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "Sarankan Fitur"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3156,9 +3168,8 @@ msgid "Community"
msgstr "Komunitas"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Tentang"
+msgstr "Tentang Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3250,14 +3261,12 @@ msgid "Manage Templates"
msgstr "Kelola Templat"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Memasang dari berkas"
+msgstr "Install dari file"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Pilih Mesh Sumber:"
+msgstr "Pilih file sumber android"
#: editor/editor_node.cpp
msgid ""
@@ -3306,6 +3315,11 @@ msgid "Merge With Existing"
msgstr "Gabung dengan yang Ada"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Ubah Transformasi Animasi"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Buka & Jalankan Skrip"
@@ -3340,9 +3354,8 @@ msgid "Select"
msgstr "Pilih"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Pilih Folder Saat Ini"
+msgstr "Pilih Saat Ini"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3377,9 +3390,8 @@ msgid "No sub-resources found."
msgstr "Tidak ada sub-resourc yang ditemukan."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Tidak ada sub-resourc yang ditemukan."
+msgstr "Buka daftar sub-sumber daya."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3406,14 +3418,12 @@ msgid "Update"
msgstr "Perbarui"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Versi:"
+msgstr "Versi"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Pengarang"
+msgstr "Pencipta"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3426,14 +3436,12 @@ msgid "Measure:"
msgstr "Ukuran:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Waktu Frame (sec)"
+msgstr "Waktu Frame (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "Waktu Rata-rata (sec)"
+msgstr "Waktu Rata-rata (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3563,6 +3571,10 @@ msgstr ""
"Resource yang terpilih (%s) tidak sesuai dengan tipe apapun yang diharapkan "
"untuk properti ini (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Jadikan Unik"
@@ -3582,9 +3594,8 @@ msgid "Paste"
msgstr "Tempel"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Konversikan ke %s"
+msgstr "Konversi ke %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3632,11 +3643,10 @@ msgid "Did you forget the '_run' method?"
msgstr "Apakah anda lupa dengan fungsi '_run' ?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Tahan Ctrl untuk membulatkan bilangan. Tahan Shift untuk meletakkan bilangan "
-"yang lebih presisi."
+"Tahan %s untuk membulatkan ke integer. Tahan Shift untuk perubahan yang "
+"lebih presisi."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3656,49 +3666,43 @@ msgstr "Impor dari Node:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Buka folder yang berisi template ini."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Uninstall template ini."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "Tidak ada berkas '%s'."
+msgstr "Tidak ada mirror yang tersedia."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Mendapatkan informasi cermin, silakan tunggu..."
+msgstr "Mengambil daftar mirror..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "Memulai download..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
msgstr "Galat saat meminta URL:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "Menyambungkan..."
+msgstr "Menghubungkan ke mirror..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Tidak dapat menjelaskan hostname:"
+msgstr "Tidak dapat menyelesaikan alamat yang diminta."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Tidak dapat terhubung ke host:"
+msgstr "Tidak dapat terhubung ke mirror."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "Tidak ada respon dari host:"
+msgstr "Tidak ada respon dari mirror."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3706,18 +3710,16 @@ msgid "Request failed."
msgstr "Permintaan gagal."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Permintaan gagal, terlalu banyak pengalihan"
+msgstr "Permintaan berakhir di loop pengalihan."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Permintaan gagal."
+msgstr "Permintaan gagal:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Download selesai; mengekstrak template..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3736,13 +3738,14 @@ msgid "Error getting the list of mirrors."
msgstr "Galat dalam mendapatkan daftar mirror."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
-msgstr "Galat mengurai JSON dari daftar mirror. Silakan laporkan masalah ini!"
+msgstr ""
+"Kesalahan saat mengurai JSON dengan daftar mirror. Silakan laporkan masalah "
+"ini!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Mirror terbaik yang tersedia"
#: editor/export_template_manager.cpp
msgid ""
@@ -3795,24 +3798,20 @@ msgid "SSL Handshake Error"
msgstr "Kesalahan jabat tangan SSL"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Tidak dapat membuka ekspor template-template zip."
+msgstr "Tidak dapat membuka file template ekspor."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Format version.txt tidak valid dalam berkas templat: %s."
+msgstr "Format version.txt tidak valid di dalam file template ekspor: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Berkas version.txt tidak ditemukan dalam templat."
+msgstr "Tidak ada version.txt yang ditemukan di dalam file template ekspor."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Kesalahan saat membuat lokasi untuk templat:"
+msgstr "Kesalahan saat membuat jalur untuk mengekstrak template:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3823,9 +3822,8 @@ msgid "Importing:"
msgstr "Mengimpor:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Hapus templat versi '%s'?"
+msgstr "Hapus template untuk versi '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3841,68 +3839,61 @@ msgstr "Versi sekarang:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
-msgstr ""
+msgstr "Template ekspor tidak ada. Download atau instal dari file."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Template ekspor sudah terinstal dan siap digunakan."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Buka Berkas"
+msgstr "Buka Folder"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Buka folder yang berisi template yang diinstal untuk versi saat ini."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Copot Pemasangan"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Nilai awal untuk penghitung"
+msgstr "Uninstall template untuk versi saat ini."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Unduhan Gagal"
+msgstr "Download dari:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Jalankan di Peramban"
+msgstr "Buka di Browser Web"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Salin Galat"
+msgstr "Salin URL Mirror"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Download dan Instal"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
-msgstr ""
+msgstr "Download dan instal template untuk versi saat ini dari mirror terbaik."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
msgstr "Templat ekspor resmi tidak tersedia untuk build pengembangan."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
-msgstr "Memasang dari berkas"
+msgstr "Install dari File"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Impor Templat dari Berkas ZIP"
+msgstr "Instal template dari file lokal."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3910,19 +3901,16 @@ msgid "Cancel"
msgstr "Batal"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Tidak dapat membuka ekspor template-template zip."
+msgstr "Batalkan download template."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Versi Terpasang:"
+msgstr "Versi Terinstal Lainnya:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Copot Pemasangan"
+msgstr "Uninstal Template"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3937,6 +3925,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Templat akan dilanjutkan untuk diunduh.\n"
+"Editor Anda mungkin mengalami pembekuan sementara saat unduhan selesai."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4036,7 +4026,7 @@ msgstr "Buka Skena"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr "hal"
+msgstr "Instance"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
@@ -4083,35 +4073,32 @@ msgid "Collapse All"
msgstr "Lipat Semua"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Cari berkas"
+msgstr "Urutkan berkas"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Urutkan berdasarkan Nama (Ascending)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Urutkan berdasarkan Nama (Descending)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Urutkan berdasarkan Jenis (Ascending)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Urutkan berdasarkan Jenis (Descending)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Terakhir Diubah"
+msgstr "Urut dari Terakhir Diubah"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Terakhir Diubah"
+msgstr "Urut dari Pertama Diubah"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4123,7 +4110,7 @@ msgstr "Ubah Nama..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Memfokuskan kotak pencarian"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4432,14 +4419,12 @@ msgid "Failed to load resource."
msgstr "Gagal memuat resource."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Properti"
+msgstr "Salin Properti"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Properti"
+msgstr "Tempel Properti"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4464,23 +4449,20 @@ msgid "Save As..."
msgstr "Simpan Sebagai..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Tidak dalam lokasi resource."
+msgstr "Opsi resource tambahan."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Sunting Papan Klip Resource"
+msgstr "Edit Resource dari Papan Klip"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Salin Resource"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Buat Menjadi Bawaan"
+msgstr "Buat Resource Menjadi Bawaan"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4495,9 +4477,8 @@ msgid "History of recently edited objects."
msgstr "Histori dari objek terdireksi baru-baru saja."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Buka Dokumentasi"
+msgstr "Buka Dokumentasi objek ini."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4508,9 +4489,8 @@ msgid "Filter properties"
msgstr "Filter properti"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Properti Objek."
+msgstr "Atur properti objek."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4754,9 +4734,8 @@ msgid "Blend:"
msgstr "Campur:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Parameter Berubah"
+msgstr "Parameter Berubah:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5483,11 +5462,11 @@ msgstr "Semua"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Cari templat, proyek, dan demo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Cari aset (kecuali templat, proyek, dan demo)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5531,7 +5510,7 @@ msgstr "Berkas Aset ZIP"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Putar/Jeda Pratinjau Audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5568,11 +5547,10 @@ msgstr ""
"persegi [0.0,1.0]."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"Godot editor was built without ray tracing support, lightmaps can't be baked."
msgstr ""
-"Editor Godot di-build tanpa dukungan ray tracing, sehingga lightmaps tidak "
+"Editor Godot di-build tanpa dukungan ray tracing, sehingga lightmap tidak "
"dapat di-bake."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
@@ -5689,6 +5667,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Pindahkan CanvasItem \"%s\" ke (%d,%d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Kunci yang Dipilih"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Kelompok"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5790,13 +5780,12 @@ msgstr "Ubah Jangkar-jangkar"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"Timpa Kamera Gim\n"
-"Menimpa kamera gim dengan kamera viewport editor."
+"Timpa Kamera Proyek\n"
+"Menimpa kamera proyek yang dijalankan dengan kamera viewport editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5805,6 +5794,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Timpa Kamera Proyek\n"
+"Tidak ada instance proyek yang berjalan. Jalankan proyek dari editor untuk "
+"menggunakan fitur ini."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5872,31 +5864,27 @@ msgstr "Mode Seleksi"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Hapus node atau transisi terpilih."
+msgstr "Seret: Putar node terpilih sekitar pivot."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Geser: Pindah"
+msgstr "Alt+Seret: Pindahkan node terpilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Hapus node atau transisi terpilih."
+msgstr "V: Atur posisi pivot node terpilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Tampilkan semua objek dalam posisi klik ke sebuah daftar\n"
-"(sama seperti Alt+Klik kanan dalam mode seleksi)."
+"Alt+Klik Kanan: Tampilkan semua daftar node di posisi yang diklik, termasuk "
+"yang dikunci."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "Klik Kanan: Tambah node di posisi yang diklik."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6134,14 +6122,12 @@ msgid "Clear Pose"
msgstr "Hapus Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Tambahkan Node"
+msgstr "Tambahkan Node Di sini"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Instansi Skena"
+msgstr "Instansi Skena Di sini"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6157,49 +6143,43 @@ msgstr "Geser Tampilan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Perbesar 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Perbesar 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Perbesar 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Perkecil Pandangan"
+msgstr "Perbesar 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Perbesar 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6444,9 +6424,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "Tidak dapat membuat convex collision shape tunggal."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Buat Bentuk Cembung"
+msgstr "Buat Bentuk Cembung yang Disederhanakan"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6481,9 +6460,8 @@ msgid "No mesh to debug."
msgstr "Tidak ada mesh untuk diawakutu."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "Model tidak memiliki UV dalam lapisan ini"
+msgstr "Mesh tidak memiliki UV di layer %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6641,7 +6619,13 @@ msgid "Remove Selected Item"
msgstr "Hapus Item yang Dipilih"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Impor dari Skena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Impor dari Skena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6925,7 +6909,7 @@ msgstr "Cermin Pengatur Panjang"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
-msgstr "Titik # Curve"
+msgstr "Titik Kurva #"
#: editor/plugins/path_editor_plugin.cpp
msgid "Set Curve Point Position"
@@ -7219,9 +7203,8 @@ msgid "ResourcePreloader"
msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Balik secara Horizontal"
+msgstr "Balikkan Portal"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7234,9 +7217,18 @@ msgid "Generate Points"
msgstr "Jumlah Titik yang Dihasilkan:"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Balik secara Horizontal"
+msgstr "Balikkan Portal"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Bersihkan Transformasi"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Buat Node"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7743,12 +7735,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Buat Pose Istirahat (Dari Pertulangan)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Atur Tulang ke Pose Istirahat"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Atur Tulang ke Pose Istirahat"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Timpa"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7775,6 +7769,71 @@ msgid "Perspective"
msgstr "Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektif"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektif"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektif"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektif"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektif"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformasi Dibatalkan."
@@ -7801,20 +7860,17 @@ msgid "None"
msgstr "Tidak ada"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Mode Putar"
+msgstr "Putar"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Translasi:"
+msgstr "Translasi"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Skala:"
+msgstr "Skala"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7846,9 +7902,8 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Ukuran: "
+msgstr "Ukuran:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -7893,42 +7948,22 @@ msgid "Bottom View."
msgstr "Tampilan Bawah."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Bawah"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Tampilan Kiri."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Kiri"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Tampilan Kanan."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Kanan"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Tampilan Depan."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Depan"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Tampilan Belakang."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Belakang"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Sejajarkan Transformasi dengan Tampilan"
@@ -8046,12 +8081,11 @@ msgid "View Rotation Locked"
msgstr "Rotasi Tampilan Terkunci"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"To zoom further, change the camera's clipping planes (View -> Settings...)"
msgstr ""
-"Untuk memperbesar lebih jauh, ganti kamera clipping planes (Tinjau -> "
-"Setelan...)"
+"Untuk memperbesar lebih lanjut, ubah bidang kliping kamera (View -> "
+"Setting...)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -8206,6 +8240,11 @@ msgid "View Portal Culling"
msgstr "Pengaturan Viewport"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Pengaturan Viewport"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Pengaturan…"
@@ -8271,8 +8310,9 @@ msgid "Post"
msgstr "Sesudah"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo tak bernama"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Proyek Tanpa Nama"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -11391,7 +11431,7 @@ msgstr "Aksi"
#: editor/project_settings_editor.cpp
msgid "Deadzone"
-msgstr "Zona tidak aktif"
+msgstr "Zona mati"
#: editor/project_settings_editor.cpp
msgid "Device:"
@@ -12470,6 +12510,16 @@ msgstr "Atur Posisi Titik Kurva"
msgid "Set Portal Point Position"
msgstr "Atur Posisi Titik Kurva"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Ubah Radius Bentuk Silinder"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Atur Posisi Kurva Dalam"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Ubah Radius Silinder"
@@ -12754,6 +12804,11 @@ msgstr "Memetakan lightmap"
msgid "Class name can't be a reserved keyword"
msgstr "Nama kelas tidak boleh reserved keyword"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Isi Pilihan"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Akhir dari inner exception stack trace"
@@ -13241,73 +13296,73 @@ msgstr "Cari VisualScript"
msgid "Get %s"
msgstr "Dapatkan %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Nama paket tidak ada."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Segmen paket panjangnya harus tidak boleh nol."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Karakter '%s' tidak diizinkan dalam penamaan paket aplikasi Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Digit tidak boleh diletakkan sebagai karakter awal di segmen paket."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Karakter '%s' tidak bisa dijadikan karakter awal dalam segmen paket."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Package setidaknya harus memiliki sebuah pemisah '.'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Pilih perangkat pada daftar"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Mengekspor Semua"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Copot Pemasangan"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Memuat, tunggu sejenak..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Tidak dapat memulai subproses!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Menjalankan Script Khusus..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Tidak dapat membuat folder."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Tak dapat menemukan perkakas 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13315,66 +13370,66 @@ msgstr ""
"Templat build Android belum terpasang dalam proyek. Pasanglah dari menu "
"Proyek."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Berkas debug keystore belum dikonfigurasi dalam Pengaturan Editor maupun di "
"prasetel proyek."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "Berkas keystore rilis belum dikonfigurasi di prasetel ekspor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Lokasi Android SDK yang valid dibutuhkan di Pengaturan Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Lokasi Android SDK tidak valid di Pengaturan Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Direktori 'platform-tools' tidak ada!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Tidak dapat menemukan perintah adb di Android SDK platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Silakan cek direktori Android SDK yang diisikan dalam Pengaturan Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Direktori 'build-tools' tidak ditemukan!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Tidak dapat menemukan apksigner dalam Android SDK build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Kunci Publik untuk ekspansi APK tidak valid."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nama paket tidak valid:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13382,38 +13437,23 @@ msgstr ""
"Modul \"GodotPaymentV3\" tidak valid yang dimasukkan dalam pengaturan proyek "
"\"android/modules\" (diubah di Godot 3.2.2)\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Gunakan Build Custom\" harus diaktifkan untuk menggunakan plugin."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Derajat Kebebasan\" hanya valid ketika \"Mode Xr\" bernilai \"Occulus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Pelacakan Tangan\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile "
"VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile "
-"VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Expor AAB\" hanya bisa valid ketika \"Gunakan Build Custom\" diaktifkan."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13421,57 +13461,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Memindai Berkas,\n"
"Silakan Tunggu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Tidak dapat membuka templat untuk ekspor:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Menambahkan %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Mengekspor Semua"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Nama berkas tak valid! Android App Bundle memerlukan ekstensi *.aab ."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "Ekspansi APK tidak kompatibel dengan Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nama berkas tidak valid! APK Android memerlukan ekstensi *.apk ."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13479,7 +13519,7 @@ msgstr ""
"Mencoba untuk membangun dari templat build khusus, tapi tidak ada informasi "
"versinya. Silakan pasang ulang dari menu 'Proyek'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13491,26 +13531,25 @@ msgstr ""
" Versi Godot: %s\n"
"Silakan pasang ulang templat build Android dari menu 'Project'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "Tidak dapat menyunting project.godot dalam lokasi proyek."
+msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Tidak dapat menulis berkas:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Membangun Proyek Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13518,11 +13557,11 @@ msgstr ""
"Pembangunan proyek Android gagal, periksa output untuk galatnya.\n"
"Atau kunjungi docs.godotengine.org untuk dokumentasi build Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Memindahkan keluaran"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13530,24 +13569,24 @@ msgstr ""
"Tidak dapat menyalin dan mengubah nama berkas ekspor, cek direktori proyek "
"gradle untuk hasilnya."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animasi tidak ditemukan: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Membuat kontur..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Tidak dapat membuka templat untuk ekspor:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13555,21 +13594,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Menambahkan %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Tidak dapat menulis berkas:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14115,6 +14154,14 @@ msgstr ""
"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node "
"Navigation. Ini hanya menyediakan data navigasi."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14445,6 +14492,14 @@ msgstr "Harus menggunakan ekstensi yang sah."
msgid "Enable grid minimap."
msgstr "Aktifkan peta mini grid."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14501,6 +14556,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Ukuran viewport harus lebih besar dari 0 untuk me-render apa pun."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14554,6 +14613,41 @@ msgstr "Pemberian nilai untuk uniform."
msgid "Constants cannot be modified."
msgstr "Konstanta tidak dapat dimodifikasi."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Buat Pose Istirahat (Dari Pertulangan)"
+
+#~ msgid "Bottom"
+#~ msgstr "Bawah"
+
+#~ msgid "Left"
+#~ msgstr "Kiri"
+
+#~ msgid "Right"
+#~ msgstr "Kanan"
+
+#~ msgid "Front"
+#~ msgstr "Depan"
+
+#~ msgid "Rear"
+#~ msgstr "Belakang"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo tak bernama"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Derajat Kebebasan\" hanya valid ketika \"Mode Xr\" bernilai \"Occulus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus "
+#~ "Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Isi Paket:"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index e536b0a8f6..33fee00267 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -1029,7 +1029,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1660,13 +1660,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2041,7 +2041,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2520,6 +2520,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3148,6 +3172,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Breyta umbreytingu"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3390,6 +3419,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5454,6 +5487,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Fjarlægja val"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6364,7 +6408,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6953,6 +7001,16 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Breyta umbreytingu"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Anim DELETE-lyklar"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7448,11 +7506,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7480,6 +7538,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7588,42 +7700,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7885,6 +7977,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Breyta Viðbót"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7950,7 +8047,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11926,6 +12023,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12212,6 +12317,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Allt úrvalið"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12691,160 +12801,149 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Breyta..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12852,57 +12951,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12910,54 +13009,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12965,19 +13064,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13427,6 +13526,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13716,6 +13823,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13756,6 +13871,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/it.po b/editor/translations/it.po
index c3aa84d4b6..0b25d41fa0 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -64,8 +64,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-10 21:39+0000\n"
-"Last-Translator: Mirko <miknsop@gmail.com>\n"
+"PO-Revision-Date: 2021-08-22 22:46+0000\n"
+"Last-Translator: Riteo Siuga <riteo@posteo.net>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -73,7 +73,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -96,7 +96,7 @@ msgstr "Input %i non valido (assente) nell'espressione"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self non può essere utilizzato perché l'istanza è nulla (non passata)"
+msgstr "self non può essere usato perché l'istanza è nulla (non passata)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -421,15 +421,13 @@ msgstr "Inserisci un'animazione"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Impossibile aprire '%s'."
+msgstr "nodo \"%s\""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animazione"
+msgstr "animazione"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -437,9 +435,8 @@ msgstr "AnimationPlayer non può animare se stesso, solo altri nodi."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Non esiste nessuna proprietà \"%s\"."
+msgstr "proprietà \"%s\""
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -657,7 +654,7 @@ msgstr "Vai al passo precedente"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Apply Reset"
-msgstr "Reset"
+msgstr "Applica reset"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -678,7 +675,7 @@ msgstr "Usa le curve di Bézier"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Incolla delle tracce"
+msgstr "Crea delle tracce di reimpostazione"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -908,7 +905,6 @@ msgid "Deferred"
msgstr "Differita"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid ""
"Defers the signal, storing it in a queue and only firing it at idle time."
msgstr ""
@@ -1004,7 +1000,6 @@ msgid "Edit..."
msgstr "Modifica..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "Vai al metodo"
@@ -1026,7 +1021,7 @@ msgstr "Nessun risultato per \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Nessuna descrizione disponibile per %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1086,7 +1081,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dipendenze"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Risorsa"
@@ -1126,17 +1121,16 @@ msgid "Owners Of:"
msgstr "Proprietari di:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
"Rimuovere i file selezionati dal progetto? (non annullabile)\n"
-"Sarà possibile ripristinarli accedendo al cestino di sistema."
+"A seconda della propria configurazione di sistema, essi saranno spostati nel "
+"cestino di sistema oppure eliminati permanentemente."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1147,7 +1141,8 @@ msgstr ""
"I file che stanno per essere rimossi sono richiesti per il funzionamento di "
"altre risorse.\n"
"Rimuoverli comunque? (non annullabile)\n"
-"Sarà possibile ripristinarli accedendo al cestino di sistema."
+"A seconda della propria configurazione di sistema, essi saranno spostati nel "
+"cestino di sistema oppure eliminati permanentemente."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1317,41 +1312,38 @@ msgid "Licenses"
msgstr "Licenze"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Errore nell'apertura del file package (non è in formato ZIP)."
+msgstr ""
+"Errore nell'apertura del file del contenuto per \"%s\" (non è in formato "
+"ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
msgstr "%s (già esistente)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "File del contenuto \"%s\" - %d file sono in conflitto col progetto:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "File del contenuto \"%s\" - Nessun file è in conflitto col progetto:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr "Estrazione asset"
+msgstr "Estraendo i contenuti"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Impossibile estrarre i seguenti file dal pacchetto:"
+msgstr "L'estrazione dei seguenti file dal contenuto \"%s\" è fallita:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "E %s altri file."
+msgstr "(e %s altri file)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pacchetto installato con successo!"
+msgstr "Contenuto \"%s\" installato con successo!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1363,9 +1355,8 @@ msgid "Install"
msgstr "Installa"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Installatore di pacchetti"
+msgstr "Installatore di contenuti"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1610,7 +1601,7 @@ msgstr "File inesistente."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s non è una strada valida. Essa non punta nelle risorse (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1761,13 +1752,13 @@ msgstr ""
"Attiva \"Import Pvrtc\" nelle impostazioni del progetto, oppure disattiva "
"\"Driver Fallback Enabled\"."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Modello di sviluppo personalizzato non trovato."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1792,9 +1783,8 @@ msgid "Script Editor"
msgstr "Editor degli script"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Asset Library"
-msgstr "Libreria degli asset"
+msgstr "Libreria dei contenuti"
#: editor/editor_feature_profile.cpp
msgid "Scene Tree Editing"
@@ -1814,35 +1804,40 @@ msgstr "Pannello d'importazione"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Permette di visuallizzare e modificare le scene 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Permette di modificare gli script usando l'editor di script integrato."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Offre un accesso alla libreria dei contenuti integrato."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Permette di modificare la gerarchia dei nodi nel pannello della scena."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Permette di lavorare coi segnali e i gruppi del nodo selezionato nel "
+"pannello della scena."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
msgstr ""
+"Permette di esplorare il file system locale tramite un pannello dedicato."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Permette di configurare le impostazioni d'importazione di contenuti "
+"individuali. Richiede il pannello del file system per funzionare."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1851,11 +1846,13 @@ msgstr "(Corrente)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(nulla)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
msgstr ""
+"Rimuovere il profilo '%s' attualmente selezionato? Ciò non potrà essere "
+"annullato."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1967,6 +1964,8 @@ msgstr "Opzioni Texture"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Creare o importare un profilo per modificare le classi e le proprietà "
+"disponibili."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -2153,11 +2152,10 @@ msgstr ""
"importazione annullata"
#: editor/editor_file_system.cpp
-#, fuzzy
msgid "(Re)Importing Assets"
-msgstr "Reimportazione degli asset"
+msgstr "Reimportando i contenuti"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "In cima"
@@ -2396,6 +2394,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Gira quando la finestra dell'editor si aggiorna.\n"
+"Aggiorna continuamente è attivo, il che può aumentare il consumo di "
+"corrente. Cliccare per disabilitarlo."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2636,6 +2637,8 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"La scena attuale non ha un nodo radice, ma %d risorse esterne modificate "
+"sono state salvate comunque."
#: editor/editor_node.cpp
#, fuzzy
@@ -2673,6 +2676,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Scena attuale non salvata. Aprire comunque?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Annulla"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Rifai"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Impossibile ricaricare una scena che non è mai stata salvata."
@@ -3081,7 +3110,7 @@ msgstr ""
"esporterà un eseguibile senza i dati del progetto.\n"
"Il filesystem verrà provvisto dall'editor attraverso la rete.\n"
"Su Android, esso userà il cavo USB per ottenere delle prestazioni migliori. "
-"Questa impostazione rende più veloci i progetti con risorse pesanti."
+"Questa impostazione rende più veloci i progetti con contenuti pesanti."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
@@ -3202,7 +3231,7 @@ msgstr "Apri la documentazione"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Domande e risposte"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3380,6 +3409,11 @@ msgid "Merge With Existing"
msgstr "Unisci con una esistente"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Cambia la trasformazione di un'animazione"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Apri ed esegui uno script"
@@ -3431,9 +3465,8 @@ msgid "Open Script Editor"
msgstr "Apri l'editor degli script"
#: editor/editor_node.cpp editor/project_manager.cpp
-#, fuzzy
msgid "Open Asset Library"
-msgstr "Apri la libreria degli Asset"
+msgstr "Apri la libreria dei contenuti"
#: editor/editor_node.cpp
msgid "Open the next Editor"
@@ -3526,7 +3559,7 @@ msgstr "Inclusivo"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr "Se stesso"
+msgstr "Proprio"
#: editor/editor_profiler.cpp
msgid ""
@@ -3537,6 +3570,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"Inclusivo: include il tempo speso dalle altre funzioni chiamate da questa.\n"
+"Utilizzare questa opzione per trovare dei colli di bottiglia.\n"
+"\n"
+"Proprio: conta solo il tempo speso dalla funzione stessa, non in altre "
+"chiamate da essa.\n"
+"Utilizzare questa opzione per trovare delle funzioni singole da ottimizzare."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3641,6 +3680,10 @@ msgstr ""
"La risorsa selezionata (%s) non corrisponde ad alcun tipo previsto per "
"questa proprietà (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
#, fuzzy
msgid "Make Unique"
@@ -3738,11 +3781,11 @@ msgstr "Importa Da Nodo:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Apre la cartella che contiene questi modelli."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Disinstalla questi modelli."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3756,7 +3799,7 @@ msgstr "Recupero dei mirror, attendi..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "Avviando lo scaricamento..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -3799,7 +3842,7 @@ msgstr "Richiesta fallita."
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Scaricamento completato; estraendo i modelli..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3826,7 +3869,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Miglior mirror disponibile"
#: editor/export_template_manager.cpp
msgid ""
@@ -3925,11 +3968,11 @@ msgstr "Versione Corrente:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
-msgstr ""
+msgstr "Modelli d'eportazione mancanti. Scaricarli o installarli da un file."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "I modelli d'esportazione sono installati e pronti all'uso."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3939,6 +3982,7 @@ msgstr "Apri file"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
msgstr ""
+"Apre la cartella contenente i modelli installati per la versione corrente."
#: editor/export_template_manager.cpp
msgid "Uninstall"
@@ -3966,13 +4010,15 @@ msgstr "Copia Errore"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Scarica e installa"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Scarica e installa i modelli per la versione corrente dal miglior mirror "
+"possibile."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -4023,6 +4069,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"I modelli continueranno a scaricare.\n"
+"L'editor potrebbe bloccarsi brevemente a scaricamento finito."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4176,19 +4224,19 @@ msgstr "Cerca file"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Ordina per nome (crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Ordina per nome (decrescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Ordina per tipo (crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Ordina per tipo (decrescente)"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -4210,7 +4258,7 @@ msgstr "Rinomina..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Seleziona la barra di ricerca"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4511,8 +4559,8 @@ msgstr "Cambiare il tipo di un file importato richiede il riavvio dell'editor."
msgid ""
"WARNING: Assets exist that use this resource, they may stop loading properly."
msgstr ""
-"ATTENZIONE: Esistono degli elementi che utilizzano questa risorsa, "
-"potrebbero non essere più caricati correttamente."
+"ATTENZIONE: Esistono dei contenuti che utilizzano questa risorsa, potrebbero "
+"non essere più caricati correttamente."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5495,7 +5543,7 @@ msgstr "Check has SHA-256 fallito"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Errore di Download Asset:"
+msgstr "Errore di scaricamento del contenuto:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5531,7 +5579,7 @@ msgstr "Errore durante il download"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "Il download per questo asset è già in corso!"
+msgstr "Lo scaricamento di questo contenuto è già in corso!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
@@ -5579,11 +5627,11 @@ msgstr "Tutti"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Cerca tra modelli, progetti e demo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Cerca tra i contenuti (escludendo modelli, progetti e demo)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5623,11 +5671,11 @@ msgstr "Caricamento…"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "ZIP File degli Asset"
+msgstr "File ZIP dei contenuti"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Avvia/Pausa l'anteprima audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5791,6 +5839,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Sposta CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Blocca selezionato"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Gruppo"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5907,6 +5967,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Sovrascrivi la camera del progetto\n"
+"Nessuna istanza del progetto avviata. Eseguire il progetto dall'editor per "
+"utilizzare questa funzionalità."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5998,7 +6061,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "Click destro: aggiungi un nodo sulla posizione cliccata."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6276,15 +6339,15 @@ msgstr "Trasla Visuale"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Ingrandisci al 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Ingrandisci al 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Ingrandisci al 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6318,7 +6381,7 @@ msgstr "Rimpicciolisci"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Ingrandisci al 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6447,6 +6510,7 @@ msgid "Flat 0"
msgstr "Flat 0"
#: editor/plugins/curve_editor_plugin.cpp
+#, fuzzy
msgid "Flat 1"
msgstr "Flat 1"
@@ -6686,6 +6750,9 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Crea una forma di collisione convessa semplificata.\n"
+"Essa è simile a una forma di collisione singola ma in alcuni casi può "
+"risultare in una geometria più semplice al costo di risultare inaccurata."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
@@ -6767,7 +6834,13 @@ msgid "Remove Selected Item"
msgstr "Rimuovi Elementi Selezionati"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importa da Scena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importa da Scena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7367,6 +7440,16 @@ msgstr "Conteggio Punti Generati:"
msgid "Flip Portal"
msgstr "Ribalta orizzontalmente"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Azzera la trasformazione"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Crea Nodo"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree non ha nessun percorso impostato a un AnimationPlayer"
@@ -7874,12 +7957,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Crea Posizione di Riposo (Dalle Ossa)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Imposta Ossa in Posizione di Riposo"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Imposta Ossa in Posizione di Riposo"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sovrascrivi Scena esistente"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7906,6 +7991,71 @@ msgid "Perspective"
msgstr "Prospettiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Prospettiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Prospettiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Prospettiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Prospettiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonale"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Prospettiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transform Abortito."
@@ -7973,7 +8123,7 @@ msgstr "Inclinazione"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Imbardata:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8012,7 +8162,7 @@ msgstr "Vertici"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -8023,42 +8173,22 @@ msgid "Bottom View."
msgstr "Vista dal basso."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Basso"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista da sinistra."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Sinistra"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista da destra."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Destra"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista frontale."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Fronte"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista dal retro."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Retro"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Allinea la trasformazione con la vista"
@@ -8340,6 +8470,11 @@ msgid "View Portal Culling"
msgstr "Impostazioni Viewport"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Impostazioni Viewport"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Impostazioni…"
@@ -8409,8 +8544,9 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Gizmo senza nome"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Progetto Senza Nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8686,7 +8822,7 @@ msgstr "Stile Box"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} colori"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8704,8 +8840,9 @@ msgid "No constants found."
msgstr "Costante di colore."
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} caratteri"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8714,7 +8851,7 @@ msgstr "Non trovato!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} icone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8723,7 +8860,7 @@ msgstr "Non trovato!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} stylebox"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8732,7 +8869,7 @@ msgstr "Nessuna sottorisorsa trovata."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} selezionati"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
@@ -11134,8 +11271,8 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
-"Impossibile eseguire il progetto: le Risorse devono essere importate.\n"
-"Per favore modifica il progetto per azionare l'importo iniziale."
+"Impossibile eseguire il progetto: i contenuti devono essere importati.\n"
+"Per favore modifica il progetto per avviare l'importazione iniziale."
#: editor/project_manager.cpp
msgid "Are you sure to run %d projects at once?"
@@ -11241,9 +11378,8 @@ msgid "About"
msgstr "Informazioni su Godot"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Libreria degli asset"
+msgstr "Progetti della libreria dei contenuti"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11266,8 +11402,8 @@ msgid ""
"You currently don't have any projects.\n"
"Would you like to explore official example projects in the Asset Library?"
msgstr ""
-"Al momento non hai nessun progetto.\n"
-"Ti piacerebbe esplorare gli esempi ufficiali nella libreria degli Asset?"
+"Al momento non esiste alcun progetto.\n"
+"Esplorare i progetti di esempio ufficiali nella libreria dei contenuti?"
#: editor/project_manager.cpp
#, fuzzy
@@ -12630,6 +12766,16 @@ msgstr "Imposta Posizione Punto Curva"
msgid "Set Portal Point Position"
msgstr "Imposta Posizione Punto Curva"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Modifica Raggio di Forma del Cilindro"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Imposta Curva In Posizione"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Modifica Raggio del Cilindro"
@@ -12916,6 +13062,11 @@ msgstr "Stampando le lightmap"
msgid "Class name can't be a reserved keyword"
msgstr "Il nome della classe non può essere una parola chiave riservata"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Riempi Selezione"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fine dell'analisi dell’eccezione interna dello stack"
@@ -13402,78 +13553,78 @@ msgstr "Ricerca VisualScript"
msgid "Get %s"
msgstr "Ottieni %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Il nome del pacchetto è mancante."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "I segmenti del pacchetto devono essere di lunghezza diversa da zero."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"Il carattere \"%s\" non è consentito nei nomi dei pacchetti delle "
"applicazioni Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
"Una cifra non può essere il primo carattere di un segmento di un pacchetto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Il carattere \"%s\" non può essere il primo carattere di un segmento di "
"pacchetto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Il pacchetto deve avere almeno un \".\" separatore."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Seleziona il dispositivo dall'elenco"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Esportando Tutto"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Disinstalla"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Caricamento, per favore attendere..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Impossibile istanziare la scena!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Eseguendo Script Personalizzato..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Impossibile creare la cartella."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Impossibile trovare lo strumento \"apksigner\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13481,72 +13632,72 @@ msgstr ""
"Il template build di Android non è installato in questo progetto. Installalo "
"dal menu Progetto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Debug keystore non configurato nelle Impostazioni dell'Editor né nel preset."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Release keystore non configurato correttamente nel preset di esportazione."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Un percorso valido per il SDK Android è richiesto nelle Impostazioni Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Un percorso invalido per il SDK Android nelle Impostazioni Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Cartella \"platform-tools\" inesistente!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"Impossibile trovare il comando adb negli strumenti di piattaforma del SDK "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Per favore, controlla la directory specificata del SDK Android nelle "
"Impostazioni Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Cartella \"build-tools\" inesistente!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"Impossibile trovare il comando apksigner negli strumenti di piattaforma del "
"SDK Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Chiave pubblica non valida per l'espansione dell'APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nome del pacchetto non valido:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13554,38 +13705,23 @@ msgstr ""
"Modulo \"GodotPaymentV3\" non valido incluso nelle impostazione del progetto "
"\"android/moduli\" (modificato in Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "Per utilizzare i plugin \"Use Custom Build\" deve essere abilitato."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" è valido solamente quando \"Xr Mode\" è \"Oculus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus "
"Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13593,57 +13729,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Scansione File,\n"
"Si prega di attendere..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Impossibile aprire il template per l'esportazione:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Aggiungendo %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Esportazione per Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "L'estensione APK non è compatibile con il Bundle Android App."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13652,7 +13788,7 @@ msgstr ""
"informazione sulla sua versione esiste. Perfavore, reinstallalo dal menu "
"\"Progetto\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13664,26 +13800,26 @@ msgstr ""
" Versione Godot: %s\n"
"Perfavore, reinstalla il build template di Android dal menu \"Progetto\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Impossibile creare project.godot nel percorso di progetto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Impossibile scrivere il file:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Compilazione di un progetto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13693,11 +13829,11 @@ msgstr ""
"In alternativa, visita docs.godotengine.org per la documentazione della "
"build Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Spostando l'output"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13705,24 +13841,24 @@ msgstr ""
"Impossibile copiare e rinominare il file di esportazione, controlla la "
"directory del progetto gradle per gli output."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animazione non trovata: \"%s\""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Creazione contorni..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Impossibile aprire il template per l'esportazione:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13730,21 +13866,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Aggiungendo %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Impossibile scrivere il file:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14308,6 +14444,14 @@ msgstr ""
"NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. "
"Fornisce solamente dati per la navigazione."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14633,6 +14777,14 @@ msgstr "È necessaria un'estensione valida."
msgid "Enable grid minimap."
msgstr "Abilita mini-mappa griglia."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14688,6 +14840,10 @@ msgstr ""
"La dimensione del Viewport deve essere maggiore di 0 affinché qualcosa sia "
"visibile."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14742,6 +14898,41 @@ msgstr "Assegnazione all'uniforme."
msgid "Constants cannot be modified."
msgstr "Le constanti non possono essere modificate."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Crea Posizione di Riposo (Dalle Ossa)"
+
+#~ msgid "Bottom"
+#~ msgstr "Basso"
+
+#~ msgid "Left"
+#~ msgstr "Sinistra"
+
+#~ msgid "Right"
+#~ msgstr "Destra"
+
+#~ msgid "Front"
+#~ msgstr "Fronte"
+
+#~ msgid "Rear"
+#~ msgstr "Retro"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Gizmo senza nome"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" è valido solamente quando \"Xr Mode\" è \"Oculus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" è valido solo quando \"Xr Mode\" è impostato su "
+#~ "\"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Contenuti del pacchetto:"
@@ -16709,9 +16900,6 @@ msgstr "Le constanti non possono essere modificate."
#~ msgid "Images:"
#~ msgstr "Immagini:"
-#~ msgid "Group"
-#~ msgstr "Gruppo"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Modalità Conversione Sample (file .wav):"
@@ -16845,9 +17033,6 @@ msgstr "Le constanti non possono essere modificate."
#~ "le opzioni di esportazione successivamente. Gli atlas possono essere "
#~ "anche generati in esportazione."
-#~ msgid "Overwrite Existing Scene"
-#~ msgstr "Sovrascrivi Scena esistente"
-
#~ msgid "Overwrite Existing, Keep Materials"
#~ msgstr "Sovrascrivi Esistente, Mantieni Materiali"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 3ee6d0b49d..20cd8fc7da 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -33,12 +33,13 @@
# sporeball <sporeballdev@gmail.com>, 2020.
# BinotaLIU <me@binota.org>, 2020, 2021.
# 都築 本成 <motonari728@gmail.com>, 2021.
+# Nanjakkun <nanjakkun@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
-"Last-Translator: sugusan <sugusan.development@gmail.com>\n"
+"PO-Revision-Date: 2021-09-11 20:05+0000\n"
+"Last-Translator: nitenook <admin@alterbaum.net>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
"Language: ja\n"
@@ -46,7 +47,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -55,7 +56,7 @@ msgstr "convert() の引数の型が無効です。TYPE_* 定数を使用して
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "長さが 1 の文字列 (文字) が必要です。"
+msgstr "長さが1の文字列 (文字) が必要です。"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -394,13 +395,11 @@ msgstr "アニメーション挿入"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "'..'を処理できません"
+msgstr "ノード '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "アニメーション"
@@ -412,9 +411,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "プロパティ '%s' は存在しません。"
+msgstr "プロパティ '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -459,7 +457,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Not possible to add a new track without a root"
-msgstr "root が無ければ新規トラックは追加できません"
+msgstr "ルートなしで新規トラックは追加できません"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
@@ -504,7 +502,7 @@ msgstr "アニメーションキーの移動"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr "クリップボードは空です!"
+msgstr "クリップボードは空です!"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -625,7 +623,6 @@ msgid "Go to Previous Step"
msgstr "前のステップへ"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
msgstr "リセット"
@@ -684,7 +681,7 @@ msgstr "すべてのアニメーションをクリーンアップ"
#: editor/animation_track_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr "アニメーションをクリーンアップ (元に戻せません!)"
+msgstr "アニメーションをクリーンアップ (元に戻せません!)"
#: editor/animation_track_editor.cpp
msgid "Clean-Up"
@@ -971,9 +968,8 @@ msgid "Edit..."
msgstr "編集..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "メソッドへ行く"
+msgstr "メソッドへ移動"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1053,7 +1049,7 @@ msgstr ""
msgid "Dependencies"
msgstr "依存関係"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "リソース"
@@ -1093,17 +1089,16 @@ msgid "Owners Of:"
msgstr "次のオーナー:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"選択したファイルをプロジェクトから削除しますか?(取り消しはできません)\n"
-"削除されたファイルは、システムのゴミ箱にあるので復元できます。"
+"選択したファイルをプロジェクトから削除しますか? (取り消しはできません。)\n"
+"ファイルシステムの設定に応じて、そのファイルはシステムのゴミ箱に移動される"
+"か、永久に削除されます。"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1112,8 +1107,9 @@ msgid ""
"to the system trash or deleted permanently."
msgstr ""
"除去しようとしているファイルは他のリソースの動作に必要です。\n"
-"無視して除去しますか?(取り消しはできません)\n"
-"削除されたファイルは、システムのゴミ箱にあるので復元できます。"
+"それでも除去しますか?(取り消しはできません。)\n"
+"ファイルシステムの設定に応じて、そのファイルはシステムのゴミ箱に移動される"
+"か、永久に削除されます。"
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1133,7 +1129,7 @@ msgstr "とにかく開く"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr "どのアクションを実行しますか?"
+msgstr "どのアクションを実行しますか?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
@@ -1169,7 +1165,7 @@ msgstr "所有"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr "所有権が明示されていないリソース:"
+msgstr "所有権が明示的でないリソース:"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Key"
@@ -1283,42 +1279,36 @@ msgid "Licenses"
msgstr "ライセンス文書"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr ""
-"パッケージ ファイルを開くときにエラーが発生しました (ZIP形式ではありません)。"
+msgstr "\"%s\" のアセットファイルを開けません (ZIP形式ではありません)。"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (すでに存在します)"
+msgstr "%s (すでに存在する)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "アセットの内容 \"%s\" - %d 個のファイルがプロジェクトと競合します:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "アセットの内容 \"%s\" - %d 個のファイルがプロジェクトと競合します:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "アセットを展開"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "次のファイルをパッケージから抽出できませんでした:"
+msgstr "次のファイルをアセット \"%s\" から展開できませんでした:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "および %s 個のファイル。"
+msgstr "(および %s 個のファイル)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "パッケージのインストールに成功しました!"
+msgstr "アセット \"%s\" のインストールに成功しました!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1330,9 +1320,8 @@ msgid "Install"
msgstr "インストール"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "パッケージインストーラ"
+msgstr "アセットインストーラー"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1395,7 +1384,6 @@ msgid "Bypass"
msgstr "バイパス"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
msgstr "バス オプション"
@@ -1563,13 +1551,12 @@ msgid "Can't add autoload:"
msgstr "自動読み込みを追加出来ません:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "ファイルが存在しません。"
+msgstr "%s は無効なパスです。ファイルが存在しません。"
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s は無効なパスです。リソースパス (res://) に存在しません。"
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1593,9 +1580,8 @@ msgid "Name"
msgstr "名前"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "変数"
+msgstr "グローバル変数"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1688,8 +1674,8 @@ msgid ""
msgstr ""
"対象プラットフォームではGLES2へフォールバックするために'ETC'テクスチャ圧縮が"
"必要です。\n"
-"プロジェクト設定より 'Import Etc' をオンにするか、'Fallback To Gles 2' をオフ"
-"にしてください。"
+"プロジェクト設定より 'Import Etc' をオンにするか、'Driver Fallback Enabled' "
+"をオフにしてください。"
#: editor/editor_export.cpp
msgid ""
@@ -1720,13 +1706,13 @@ msgstr ""
"プロジェクト設定より 'Import Pvrtc' をオンにするか、'Driver Fallback "
"Enabled' をオフにしてください。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "カスタム デバッグテンプレートが見つかりません。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1771,48 +1757,50 @@ msgstr "インポートドック"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "3Dシーンの表示と編集ができます。"
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "内臓のスクリプトエディタを使用してスクリプトを編集できます。"
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "アセットライブラリへの組み込みのアクセス機能を提供します。"
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "シーンドックのノード階層を編集できます。"
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr ""
+msgstr "シーンドックで選択されたノードのシグナルとグループを操作できます。"
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "専用のドックを使用して、ローカルファイルシステムを閲覧できます。"
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"各アセットのインポート設定を構成できます。動作にはファイルシステム ドッグが必"
+"要です。"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
msgstr "(現在)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(なし)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
msgstr ""
+"選択されているプロファイル '%s' を除去しますか? 取り消しはできません。"
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1844,19 +1832,16 @@ msgid "Enable Contextual Editor"
msgstr "コンテキストエディタを有効にする"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "プロパティ:"
+msgstr "クラス プロパティ:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "機能"
+msgstr "主要機能:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "クラスを有効にする:"
+msgstr "ノードとクラス:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1875,23 +1860,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "指定されたパスへの保存中にエラーが発生しました: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "デフォルトにリセットする"
+msgstr "デフォルトに戻す"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "現在のプロファイル:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "プロファイルを消去"
+msgstr "プロファイルを作成"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "タイルを除去"
+msgstr "プロファイルを除去"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1899,7 +1881,7 @@ msgstr "利用可能なプロファイル:"
#: editor/editor_feature_profile.cpp
msgid "Make Current"
-msgstr "最新にする"
+msgstr "使用する"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
@@ -1911,18 +1893,18 @@ msgid "Export"
msgstr "エクスポート"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "現在のプロファイル:"
+msgstr "選択されたプロファイルの設定:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "テクスチャ オプション"
+msgstr "追加のオプション:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"プロファイルを作成またはインポートして、利用可能なクラスやプロパティを編集で"
+"きます。"
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1949,7 +1931,6 @@ msgid "Select Current Folder"
msgstr "現在のフォルダを選択"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "ファイルが既に存在します。上書きしますか?"
@@ -2065,7 +2046,7 @@ msgstr "親フォルダへ移動する。"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Refresh files."
-msgstr "ファイル更新。"
+msgstr "ファイルの一覧をリフレッシュする。"
#: editor/editor_file_dialog.cpp
msgid "(Un)favorite current folder."
@@ -2112,7 +2093,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "アセットを(再)インポート中"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "トップ"
@@ -2179,7 +2160,7 @@ msgid ""
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"現在、このプロパティの説明はありません。[color=$color][url=$url]貢献[/url][/"
-"color]して私たちを助けてください!"
+"color]して私たちを助けてください!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2191,7 +2172,7 @@ msgid ""
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"現在、このメソッドの説明はありません。[color=$color][url=$url]貢献[/url][/"
-"color]して私たちを助けてください!"
+"color]して私たちを助けてください!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2349,6 +2330,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"エディタウィンドウの再描画時にスピンします。\n"
+"継続的に更新 が有効になっており、電力消費量が増加する可能性があります。クリッ"
+"クで無効化します。"
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2427,7 +2411,7 @@ msgstr "サムネイルを作成"
#: editor/editor_node.cpp
msgid "This operation can't be done without a tree root."
-msgstr "この操作は、ツリーの root なしでは実行できません。"
+msgstr "この操作は、ツリーのルートなしで実行できません。"
#: editor/editor_node.cpp
msgid ""
@@ -2447,7 +2431,7 @@ msgstr ""
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "Can't overwrite scene that is still open!"
-msgstr "開いているシーンを上書きすることはできません!"
+msgstr "開いているシーンを上書きすることはできません!"
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
@@ -2455,7 +2439,7 @@ msgstr "マージするメッシュライブラリーが読込めません!"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
-msgstr "メッシュライブラリーの保存エラー!"
+msgstr "メッシュライブラリーの保存エラー!"
#: editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
@@ -2550,7 +2534,7 @@ msgstr "実行前にシーンを保存..."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr "サブプロセスを開始できませんでした!"
+msgstr "サブプロセスを開始できませんでした!"
#: editor/editor_node.cpp editor/filesystem_dock.cpp
msgid "Open Scene"
@@ -2585,13 +2569,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"現在のシーンにはルートノードがありませんが、%d 個の変更された外部リソースが保"
+"存されました。"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "シーンを保存するにはルートノードが必要です。"
+msgstr ""
+"シーンを保存するにはルートノードが必要です。シーンツリーのドックから、ルート"
+"ノードを追加することができます。"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2622,6 +2609,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "現在のシーンは保存されていません。それでも開きますか?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "元に戻す"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "やり直す"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "保存されていないシーンを読み込むことはできません。"
@@ -2703,15 +2716,14 @@ msgid "Unable to load addon script from path: '%s'."
msgstr "パス '%s' からアドオンスクリプトを読込めません。"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"Unable to load addon script from path: '%s'. This might be due to a code "
"error in that script.\n"
"Disabling the addon at '%s' to prevent further errors."
msgstr ""
-"パス '%s' からアドオンスクリプトを読み込めません。コードにエラーがある可能性"
-"があります。\n"
-"構文を確認してください。"
+"アドオンスクリプト パス: '%s' をロードできません。これは、そのスクリプトの"
+"コードエラーが原因の可能性があります。\n"
+"さらなるエラーを防ぐため、%s のアドオンを無効化します。"
#: editor/editor_node.cpp
msgid ""
@@ -2757,7 +2769,7 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"メインシーンが定義されていません。選択しますか?\n"
+"メインシーンが定義されていません。選択しますか?\n"
"'アプリケーション' カテゴリの下の \"プロジェクト設定\" からも変更できます。"
#: editor/editor_node.cpp
@@ -2766,7 +2778,7 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"選択したシーン '%s' は存在しません。有効なシーンを選択しますか?\n"
+"選択したシーン '%s' は存在しません。有効なシーンを選択しますか?\n"
"'アプリケーション' カテゴリの下の \"プロジェクト設定\" で後から変更できます。"
#: editor/editor_node.cpp
@@ -2776,7 +2788,7 @@ msgid ""
"category."
msgstr ""
"選択したシーン '%s' はシーンファイルではありません。有効なシーンを選択します"
-"か?\n"
+"か?\n"
"'アプリケーション' カテゴリの下の \"プロジェクト設定\" で後から変更できます。"
#: editor/editor_node.cpp
@@ -2785,7 +2797,7 @@ msgstr "レイアウトを保存"
#: editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "レイアウトの削除"
+msgstr "レイアウトを削除"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
@@ -2973,9 +2985,8 @@ msgid "Orphan Resource Explorer..."
msgstr "孤立リソースエクスプローラー..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "プロジェクト名の変更"
+msgstr "現在のプロジェクトをリロード"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3135,22 +3146,20 @@ msgid "Help"
msgstr "ヘルプ"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "ドキュメントを開く"
+msgstr "オンラインドキュメント"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "質問 & 回答"
#: editor/editor_node.cpp
msgid "Report a Bug"
msgstr "バグを報告"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "値を設定する"
+msgstr "機能を提案する"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3161,9 +3170,8 @@ msgid "Community"
msgstr "コミュニティ"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "概要"
+msgstr "Godotについて"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3257,14 +3265,12 @@ msgid "Manage Templates"
msgstr "テンプレートの管理"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "ファイルからインストール"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "ソースメッシュを選択:"
+msgstr "Androidのソースファイルを選択"
#: editor/editor_node.cpp
msgid ""
@@ -3312,6 +3318,11 @@ msgid "Merge With Existing"
msgstr "既存の(ライブラリを)マージ"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "アニメーションのトランスフォームを変更"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "スクリプトを開いて実行"
@@ -3321,7 +3332,7 @@ msgid ""
"What action should be taken?"
msgstr ""
"以下のファイルより新しいものがディスク上に存在します。\n"
-"どうしますか?"
+"どうしますか?"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
@@ -3383,9 +3394,8 @@ msgid "No sub-resources found."
msgstr "サブリソースが見つかりませんでした。"
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "サブリソースが見つかりませんでした。"
+msgstr "サブリソースのリストを開く。"
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3409,15 +3419,13 @@ msgstr "インストール済プラグイン:"
#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
msgid "Update"
-msgstr "アップデート"
+msgstr "更新"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "バージョン:"
+msgstr "バージョン"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
msgstr "作者"
@@ -3432,14 +3440,12 @@ msgid "Measure:"
msgstr "測定:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "フレーム時間(秒)"
+msgstr "フレーム時間 (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "平均時間(秒)"
+msgstr "平均時間 (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3451,11 +3457,11 @@ msgstr "物理フレーム %"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr "含"
+msgstr "包括"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr "セルフ(Self)"
+msgstr "自己"
#: editor/editor_profiler.cpp
msgid ""
@@ -3466,6 +3472,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"包括: この関数が呼び出す、他の関数の時間を含みます。\n"
+"ボトルネックを見つけるために使用します。\n"
+"\n"
+"自己: この関数が呼び出す他の関数の時間を含まず、この関数自体に費やされた時間"
+"のみをカウントします。\n"
+"最適化する個々の関数を見つけるために使用します。"
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3568,6 +3580,10 @@ msgstr ""
"選択されたリソース (%s) は、このプロパティ (%s) が求める型に一致していませ"
"ん。"
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "ユニーク化"
@@ -3587,7 +3603,6 @@ msgid "Paste"
msgstr "貼り付け"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
msgstr "%s に変換"
@@ -3638,9 +3653,8 @@ msgid "Did you forget the '_run' method?"
msgstr "'_run' メソッドを忘れていませんか?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
-msgstr "Ctrlを押したままで整数値に丸める。Shiftを押したままで精密調整。"
+msgstr "%s を押したままで整数値に丸める。Shiftを押したままで精密調整。"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3667,14 +3681,12 @@ msgid "Uninstall these templates."
msgstr "これらのテンプレートをアンインストールします。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "'%s' ファイルがありません。"
+msgstr "有効なミラーはありません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "ミラーを取得しています。しばらくお待ちください..."
+msgstr "ミラーリストを取得中..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
@@ -3685,24 +3697,20 @@ msgid "Error requesting URL:"
msgstr "URL リクエストのエラー:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
msgstr "ミラーに接続中..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "ホスト名を解決できません:"
+msgstr "要求されたアドレスを解決できません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "ホストに接続できません:"
+msgstr "ミラーに接続できません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "ホストから応答がありません:"
+msgstr "ミラーから応答がありません。"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3710,14 +3718,12 @@ msgid "Request failed."
msgstr "リクエストは失敗しました。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "リクエスト失敗。リダイレクト過多"
+msgstr "リクエストはリダイレクトループのため終了しました。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "リクエストは失敗しました。"
+msgstr "リクエスト失敗:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3740,13 +3746,12 @@ msgid "Error getting the list of mirrors."
msgstr "ミラーリストの取得エラー。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
-msgstr "ミラーリストのJSONを読み込み失敗。この問題の報告をお願いします!"
+msgstr "ミラーリストのJSONの解析に失敗しました。この問題の報告をお願いします!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "有効な最良のミラー"
#: editor/export_template_manager.cpp
msgid ""
@@ -3799,24 +3804,20 @@ msgid "SSL Handshake Error"
msgstr "SSL ハンドシェイクエラー"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "エクスポート テンプレート ZIP ファイルを開けません。"
+msgstr "エクスポートテンプレート ファイルを開けません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "テンプレート内の version.txt フォーマットが不正です: %s。"
+msgstr "エクスポートテンプレート内の version.txt フォーマットが不正です: %s。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "テンプレート内に version.txt が見つかりません。"
+msgstr "エクスポートテンプレート内に version.txt が見つかりません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "テンプレートのパス生成エラー:"
+msgstr "テンプレート展開のためのパスの作成エラー:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3827,9 +3828,8 @@ msgid "Importing:"
msgstr "インポート中:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "テンプレート バージョン '%s' を除去しますか?"
+msgstr "バージョン '%s' のテンプレートを削除しますか?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3837,7 +3837,7 @@ msgstr "Androidビルドソースの解凍"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
-msgstr "テンプレートのエクスポート マネージャー"
+msgstr "エクスポートテンプレート マネージャー"
#: editor/export_template_manager.cpp
msgid "Current Version:"
@@ -3854,37 +3854,32 @@ msgid "Export templates are installed and ready to be used."
msgstr "エクスポート テンプレートはインストールされており、利用できます。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "ファイルを開く"
+msgstr "フォルダを開く"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "現在のバージョンのテンプレートがインストールされたフォルダを開きます。"
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "アンインストール"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "カウンタの初期値"
+msgstr "現在のバージョンのテンプレートをアンインストールする。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "ダウンロードエラー"
+msgstr "ダウンロード元:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "ブラウザで実行"
+msgstr "Webブラウザで開く"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "エラーをコピー"
+msgstr "エラーのURLをコピー"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -3895,20 +3890,20 @@ msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"現在のバージョンのテンプレートを最適なミラーからダウンロードしてインストール"
+"します。"
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
msgstr "公式の書き出しテンプレートは開発用ビルドの場合は使用できません。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
msgstr "ファイルからインストール"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "ZIPファイルからテンプレートをインポート"
+msgstr "ローカルファイルからテンプレートをインストールする。"
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3916,19 +3911,16 @@ msgid "Cancel"
msgstr "キャンセル"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "エクスポート テンプレート ZIP ファイルを開けません。"
+msgstr "テンプレートのダウンロードをキャンセルする。"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "インストールされたバージョン:"
+msgstr "他のインストールされたバージョン:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "アンインストール"
+msgstr "テンプレートをアンインストール"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3943,6 +3935,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"テンプレートのダウンロードは継続されます。\n"
+"完了時に、短い間エディタがフリーズする可能性があります。"
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4127,7 +4121,7 @@ msgstr "名前を変更..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "検索ボックスにフォーカス"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4275,7 +4269,7 @@ msgstr "グループがノードありません"
#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
#: editor/scene_tree_editor.cpp
msgid "Filter nodes"
-msgstr "フィルタノード"
+msgstr "ノードのフィルタ"
#: editor/groups_editor.cpp
msgid "Nodes in Group"
@@ -4376,18 +4370,16 @@ msgid "Saving..."
msgstr "保存中..."
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Select Importer"
-msgstr "選択モード"
+msgstr "インポータを選択"
#: editor/import_defaults_editor.cpp
-#, fuzzy
msgid "Importer:"
-msgstr "インポート"
+msgstr "インポータ:"
#: editor/import_defaults_editor.cpp
msgid "Reset to Defaults"
-msgstr "デフォルトにリセットする"
+msgstr "デフォルトに戻す"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
@@ -4437,14 +4429,12 @@ msgid "Failed to load resource."
msgstr "リソースの読込みに失敗しました。"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "プロパティ"
+msgstr "プロパティをコピー"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "プロパティ"
+msgstr "プロパティを貼り付け"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4469,23 +4459,20 @@ msgid "Save As..."
msgstr "名前を付けて保存..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "リソースパスにありません。"
+msgstr "追加のリソースオプション。"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "リソースのクリップボードを編集"
+msgstr "クリップボードからリソースを編集"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "リソースをコピー"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "組み込みにする"
+msgstr "リソースを組み込みにする"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4500,9 +4487,8 @@ msgid "History of recently edited objects."
msgstr "最近編集したオブジェクトの履歴。"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "ドキュメントを開く"
+msgstr "このオブジェクトのドキュメントを開く。"
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4513,9 +4499,8 @@ msgid "Filter properties"
msgstr "フィルタプロパティ"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "オブジェクトのプロパティ。"
+msgstr "オブジェクトのプロパティを管理。"
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4759,9 +4744,8 @@ msgid "Blend:"
msgstr "ブレンド:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "パラメータが変更されました"
+msgstr "パラメータが変更されました:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5445,11 +5429,11 @@ msgstr "このアセットのダウンロードは既に進行中!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
-msgstr "更新日時"
+msgstr "最新の更新日"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Least Recently Updated"
-msgstr "更新日時 (逆)"
+msgstr "最古の更新日"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
@@ -5489,11 +5473,11 @@ msgstr "すべて"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "テンプレート、プロジェクト、デモを検索"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "アセットを検索 (テンプレート、プロジェクト、デモを除く)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5525,7 +5509,7 @@ msgstr "公式"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr "テストする"
+msgstr "試験的"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Loading..."
@@ -5537,7 +5521,7 @@ msgstr "アセットのzipファイル"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "オーディオプレビューの再生/一時停止"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5548,13 +5532,13 @@ msgstr ""
"シーンを保存してから再度行ってください。"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"ベイクするメッシュがありません。メッシュに UV2チャンネルが含まれてお"
-"り、'Bake Light' フラグがオンになっていることを確認してください。"
+"ベイクするメッシュがありません。メッシュに UV2チャンネルが含まれており、Use "
+"In Baked Light' と 'Generate Lightmap' フラグがオンになっていることを確認して"
+"ください。"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5697,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem \"%s\" を (%d, %d) に移動"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "選択対象をロック"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "グループ"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5797,13 +5793,13 @@ msgstr "アンカーを変更"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"ゲームカメラの置き換え\n"
-"エディタのビューポートカメラでゲームカメラを置き換える。"
+"プロジェクトのカメラのオーバーライド\n"
+"実行中のプロジェクトのカメラを、エディタのビューポートカメラでオーバーライド"
+"します。"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5812,6 +5808,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"プロジェクトのカメラのオーバーライド\n"
+"実行中のプロジェクトのインスタンスはありません。この機能を使用するには、エ"
+"ディターからプロジェクトを実行します。"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5877,31 +5876,27 @@ msgstr "選択モード"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "選択したノードまたはトランジションを除去。"
+msgstr "ドラッグ: 選択したノードをピボットを中心に回転する。"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+ドラッグ: 移動"
+msgstr "Alt+ドラッグ: 選択したノードを移動。"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "選択したノードまたはトランジションを除去。"
+msgstr "V: 選択したノードのピボットの位置を設定する。"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"クリックした位置にあるオブジェクトのリストを表示\n"
-"(選択モードでのAlt+右クリックと同じ)。"
+"Alt+右クリック: クリックした位置のすべてのノードを一覧で表示。ロックされたも"
+"のも含む。"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "右クリック: クリックした位置にノードを追加。"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6011,7 +6006,7 @@ msgstr "ガイドにスナップ"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "選択したオブジェクトを現在位置でロック (移動不可能にする)。"
+msgstr "選択したオブジェクトの位置をロック (移動不可能にする)。"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6138,14 +6133,12 @@ msgid "Clear Pose"
msgstr "ポーズをクリアする"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "ノードを追加"
+msgstr "ここにノードを追加"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "シーンのインスタンス化"
+msgstr "ここにシーンをインスタンス化する"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6161,49 +6154,43 @@ msgstr "ビューをパン"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "3.125%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "6.25%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "12.5%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "ズームアウト"
+msgstr "25%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "ズームアウト"
+msgstr "50%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "ズームアウト"
+msgstr "100%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "ズームアウト"
+msgstr "200%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "ズームアウト"
+msgstr "400%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "ズームアウト"
+msgstr "800%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "1600%にズーム"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6276,7 +6263,7 @@ msgstr "放出マスクをクリア"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Particles"
-msgstr "パーティクル"
+msgstr "Particles"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6315,7 +6302,7 @@ msgstr "放出色"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
-msgstr "CPUパーティクル"
+msgstr "CPUParticles"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -6421,7 +6408,7 @@ msgstr "オクルーダーポリゴンを生成"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr "メッシュがありません!"
+msgstr "メッシュがありません!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a Trimesh collision shape."
@@ -6433,7 +6420,7 @@ msgstr "三角形メッシュ静的ボディを作成"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
-msgstr "これはシーンのルートでは機能しません!"
+msgstr "これはシーンのルートでは機能しません!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Shape"
@@ -6449,9 +6436,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "単一の凸型コリジョンシェイプを作成できませんでした。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "単一の凸型シェイプを作成する"
+msgstr "簡略化された凸型シェイプを作成する"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6480,16 +6466,15 @@ msgstr "含まれているメッシュがArrayMesh型ではありません。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Unwrap failed, mesh may not be manifold?"
-msgstr "UV展開に失敗しました。メッシュが非多様体ではありませんか?"
+msgstr "UV展開に失敗しました。メッシュが非多様体ではありませんか?"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "No mesh to debug."
msgstr "デバッグするメッシュがありません。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "モデルにはこのレイヤーにUVがありません"
+msgstr "メッシュのレイヤー %dにUVがありません。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6497,15 +6482,15 @@ msgstr "MeshInstanceにメッシュがありません!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr "メッシュにアウトラインを作成するためのサーフェスが存在しません!"
+msgstr "メッシュにアウトラインを作成するためのサーフェスが存在しません!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
-msgstr "メッシュのプリミティブ型が PRIMITIVE_TRIANGLES ではありません!"
+msgstr "メッシュのプリミティブ型が PRIMITIVE_TRIANGLES ではありません!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
-msgstr "アウトラインを生成できませんでした!"
+msgstr "アウトラインを生成できませんでした!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline"
@@ -6554,9 +6539,8 @@ msgstr ""
"これは、衝突検出の最速の(ただし精度が最も低い)オプションです。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "単一の凸型コリジョンの兄弟を作成"
+msgstr "簡略化された凸型コリジョンの兄弟を作成"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6564,6 +6548,9 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"簡略化された凸型コリジョンシェイプを作成します。\n"
+"これは単一の凸型コリジョンシェイプと似ていますが、精度を犠牲により単純なジオ"
+"メトリになることがあります。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
@@ -6644,7 +6631,13 @@ msgid "Remove Selected Item"
msgstr "選択したアイテムを取り除く"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "シーンからインポート"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "シーンからインポート"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7171,7 +7164,7 @@ msgstr "ボーンをポリゴンに同期させる"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
-msgstr "エラー: リソースを読み込めませんでした!"
+msgstr "エラー: リソースを読み込めませんでした!"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Add Resource"
@@ -7188,7 +7181,7 @@ msgstr "リソースを削除"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Resource clipboard is empty!"
-msgstr "リソースクリップボードが空です!"
+msgstr "リソースクリップボードが空です!"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
@@ -7220,9 +7213,8 @@ msgid "ResourcePreloader"
msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "左右反転"
+msgstr "ポータルを反転"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7235,9 +7227,18 @@ msgid "Generate Points"
msgstr "生成したポイントの数:"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "左右反転"
+msgstr "ポータルを反転"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "トランスフォームをクリア"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "ノードを生成"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7253,7 +7254,7 @@ msgstr "最近開いたファイルの履歴をクリア"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close and save changes?"
-msgstr "変更を保存して閉じますか?"
+msgstr "変更を保存して閉じますか?"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error writing TextFile:"
@@ -7265,7 +7266,7 @@ msgstr "ファイルが読み込めませんでした:"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error saving file!"
-msgstr "ファイルの保存エラー!"
+msgstr "ファイルの保存エラー!"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme."
@@ -7347,7 +7348,7 @@ msgstr "前を検索"
#: editor/plugins/script_editor_plugin.cpp
msgid "Filter scripts"
-msgstr "フィルタスクリプト"
+msgstr "スクリプトのフィルタ"
#: editor/plugins/script_editor_plugin.cpp
msgid "Toggle alphabetical sorting of the method list."
@@ -7469,7 +7470,7 @@ msgstr "続行"
#: editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr "デバッガを開いたままに"
+msgstr "デバッガを開いたままにする"
#: editor/plugins/script_editor_plugin.cpp
msgid "Debug with External Editor"
@@ -7506,7 +7507,7 @@ msgid ""
"What action should be taken?:"
msgstr ""
"以下のファイルより新しいものがディスク上に存在します。\n"
-"どうしますか?:"
+"どうしますか?:"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
@@ -7721,7 +7722,7 @@ msgid ""
"What action should be taken?"
msgstr ""
"このシェーダーはディスク上で修正されています。\n"
-"どうしますか?"
+"どうしますか?"
#: editor/plugins/shader_editor_plugin.cpp
msgid "Shader"
@@ -7744,12 +7745,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "レスト・ポーズの作成(ボーンから)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "レスト・ポーズへボーンを設定する"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "レスト・ポーズへボーンを設定する"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "上書き"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7776,6 +7779,71 @@ msgid "Perspective"
msgstr "透視投影"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "透視投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "透視投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "透視投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "透視投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "平行投影"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "透視投影"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "トランスフォームは中止されました。"
@@ -7802,20 +7870,17 @@ msgid "None"
msgstr "None"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "回転モード"
+msgstr "回転"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "移動:"
+msgstr "移動"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "スケール:"
+msgstr "スケール"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7838,52 +7903,44 @@ msgid "Animation Key Inserted."
msgstr "アニメーションキーが挿入されました。"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "ピッチ"
+msgstr "ピッチ:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "ヨー:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "サイズ: "
+msgstr "サイズ:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "描画されたオブジェクト"
+msgstr "描画されたオブジェクト:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "マテリアルの変更"
+msgstr "マテリアルの変更:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "シェーダーの変更"
+msgstr "シェーダーの変更:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "サーフェスの変更"
+msgstr "サーフェスの変更:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "ドローコール"
+msgstr "ドローコール:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "頂点"
+msgstr "頂点:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7894,42 +7951,22 @@ msgid "Bottom View."
msgstr "下面図。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "下面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "左側面図。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "左側面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "右側面図。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "右側面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "前面図。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "前面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "後面図."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "後面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "トランスフォームをビューに合わせる"
@@ -8038,9 +8075,8 @@ msgid "Freelook Slow Modifier"
msgstr "フリールックの減速調整"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "カメラサイズを変更"
+msgstr "カメラのプレビューを切り替え"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8050,6 +8086,8 @@ msgstr "ビューの回転を固定中"
msgid ""
"To zoom further, change the camera's clipping planes (View -> Settings...)"
msgstr ""
+"さらにズームするには、カメラのクリッピング面を変更してください (ビュー -> 設"
+"定...)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -8083,7 +8121,6 @@ msgstr ""
"半開きの目: ギズモは非透明な面を通しても可視 (「X線」)。"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "ノードをフロアにスナップ"
@@ -8190,16 +8227,20 @@ msgstr "ギズモ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
-msgstr "ビューの原点"
+msgstr "原点を表示"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Grid"
-msgstr "ビューのグリッド"
+msgstr "グリッドを表示"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "ビューポートの設定"
+msgstr "ポータルカリングを表示"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "ポータルカリングを表示"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8232,11 +8273,11 @@ msgstr "視野角(度):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr "Z-Nearを表示:"
+msgstr "Z-Nearの表示:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr "Z-Farを表示:"
+msgstr "Z-Farの表示:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
@@ -8267,8 +8308,9 @@ msgid "Post"
msgstr "後"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "無名のギズモ"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "名無しのプロジェクト"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8304,7 +8346,7 @@ msgstr "LightOccluder2D プレビュー"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
-msgstr "スプライトは空です!"
+msgstr "スプライトは空です!"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Can't convert a sprite using animation frames to mesh."
@@ -8384,11 +8426,11 @@ msgstr "画像を読み込めませんでした:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
-msgstr "エラー:フレームリソースを読み込めませんでした!"
+msgstr "エラー:フレームリソースを読み込めませんでした!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Resource clipboard is empty or not a texture!"
-msgstr "リソースクリップボードは空か、テクスチャ以外のものです!"
+msgstr "リソースクリップボードは空か、テクスチャ以外のものです!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Paste Frame"
@@ -8519,106 +8561,92 @@ msgid "TextureRegion"
msgstr "テクスチャ領域"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Color"
+msgstr "カラー"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
msgstr "フォント"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
msgstr "アイコン"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "スタイル"
+msgstr "StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} 個のカラー"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "サブリソースが見つかりませんでした。"
+msgstr "カラーが見つかりませんでした。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "定数"
+msgstr "{num} 個の定数"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Color定数。"
+msgstr "定数が見つかりませんでした。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} 個のフォント"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "見つかりません!"
+msgstr "フォントが見つかりませんでした。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} 個のアイコン"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "見つかりません!"
+msgstr "アイコンが見つかりませんでした。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} 個のスカイボックス"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "サブリソースが見つかりませんでした。"
+msgstr "StyleBoxが見つかりませんでした。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} 個 現在選択中"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "インポートするものが選択されていません。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "テーマのインポート"
+msgstr "テーマのアイテムをインポート中"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "アイテムをインポート中 {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "エディタを終了しますか?"
+msgstr "エディタをアップデート中"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "分析中"
+msgstr "終了処理中"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "フィルタ: "
+msgstr "フィルタ:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "データ付"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8626,76 +8654,71 @@ msgid "Select by data type:"
msgstr "ノードを選択"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "設定項目を設定してください!"
+msgstr "表示中のすべてのカラーアイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "表示中のすべてのカラーアイテムとそのデータを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "表示中のすべてのカラーアイテムを選択解除する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "設定項目を選択してください!"
+msgstr "表示中のすべての定数アイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "表示中のすべての定数アイテムとそのデータを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "表示中のすべての定数アイテムを選択解除する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "設定項目を選択してください!"
+msgstr "表示中のすべてのフォントアイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "表示中のすべてのフォントアイテムとそのデータを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "表示中のすべてのフォントアイテムを選択解除する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "設定項目を選択してください!"
+msgstr "表示中のすべてのアイコンアイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "設定項目を選択してください!"
+msgstr "表示中のすべてのアイコンアイテムとそのデータを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "設定項目を選択してください!"
+msgstr "表示中のすべてのアイコンアイテムを選択解除する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "表示中のすべての StyleBox アイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "表示中のすべての StyleBox アイテムとそのデータを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "表示中のすべての StyleBox アイテムを選択解除する。"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"注意: アイコンデータを追加するとテーマ リソースのサイズが大幅に増加します。"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8708,27 +8731,24 @@ msgid "Expand types."
msgstr "すべて展開"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "テンプレートファイルを選択"
+msgstr "すべてのテーマ アイテムを選択する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "点を選択"
+msgstr "データ付きで選択"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "すべてのテーマ アイテムを、アイテムのデータ付きで選択する。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "すべて選択"
+msgstr "すべて選択解除"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "すべてのテーマ アイテムの選択を解除する。"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8749,34 +8769,28 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "すべてのアイテムを除去"
+msgstr "すべてのカラーアイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "アイテムを除去"
+msgstr "アイテム名を変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "すべてのアイテムを除去"
+msgstr "すべての定数アイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "すべてのアイテムを除去"
+msgstr "すべてのフォントアイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "すべてのアイテムを除去"
+msgstr "すべてのアイコンアイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "すべてのアイテムを除去"
+msgstr "すべての StyleBox アイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8785,161 +8799,132 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "クラスアイテム追加"
+msgstr "カラーアイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "クラスアイテム追加"
+msgstr "定数アイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "アイテムを追加"
+msgstr "フォントアイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "アイテムを追加"
+msgstr "アイコンアイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "すべてのアイテムを追加"
+msgstr "StyleBox アイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "クラスアイテム削除"
+msgstr "カラーアイテム名の変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "クラスアイテム削除"
+msgstr "定数アイテム名の変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "ノードの名前を変更"
+msgstr "フォントアイテム名の変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "ノードの名前を変更"
+msgstr "アイコンアイテム名の変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "選択したアイテムを取り除く"
+msgstr "StyleBox アイテム名の変更"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "無効なファイルです。オーディオバスのレイアウトではありません。"
+msgstr "無効なファイルです。テーマ リソースではありません。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "テンプレートの管理"
+msgstr "テーマ アイテムの管理"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "編集可能なアイテム"
+msgstr "アイテムを編集"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
msgstr "型:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "型:"
+msgstr "型を追加:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "アイテムを追加"
+msgstr "アイテムを追加:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "すべてのアイテムを追加"
+msgstr "StyleBox アイテムの追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "アイテムを除去"
+msgstr "アイテムを除去:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "クラスアイテム削除"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "クラスアイテム削除"
+msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "すべてのアイテムを除去"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "GUIテーマのアイテム"
+msgstr "テーマ アイテムを追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "ノード名:"
+msgstr "旧名:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "テーマのインポート"
+msgstr "アイテムのインポート"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "デフォルト"
+msgstr "デフォルトのテーマ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "テーマを編集"
+msgstr "エディターのテーマ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "リソースを削除"
+msgstr "他のテーマリソースの選択:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "テーマのインポート"
+msgstr "他のテーマ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Anim トラック名の変更"
+msgstr "アイテム名変更の確認"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "名前の一括変更"
+msgstr "アイテム名変更をキャンセル"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "上書き"
+msgstr "アイテムを上書き"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
@@ -8967,51 +8952,44 @@ msgid "Node Types:"
msgstr "ノードタイプ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "デフォルトを読込む"
+msgstr "デフォルトの表示"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "上書き"
+msgstr "すべて上書き"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "テーマ"
+msgstr "テーマ:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "エクスポートテンプレートの管理..."
+msgstr "アイテムを管理..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "テーマアイテムの追加、削除、整理、インポートをする。"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "プレビュー"
+msgstr "プレビューを追加"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "プレビューを更新"
+msgstr "デフォルトのプレビュー"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "ソースメッシュを選択:"
+msgstr "UIシーンの選択:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9025,7 +9003,7 @@ msgstr "切り替えボタン"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled Button"
-msgstr "ボタンを無効にする"
+msgstr "無効なボタン"
#: editor/plugins/theme_editor_preview.cpp
msgid "Item"
@@ -9070,15 +9048,15 @@ msgstr "サブアイテム 2"
#: editor/plugins/theme_editor_preview.cpp
msgid "Has"
-msgstr "含んでいる"
+msgstr "Has"
#: editor/plugins/theme_editor_preview.cpp
msgid "Many"
-msgstr "多くの"
+msgstr "Many"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled LineEdit"
-msgstr "ライン編集を無効にする"
+msgstr "無効な LineEdit"
#: editor/plugins/theme_editor_preview.cpp
msgid "Tab 1"
@@ -9110,12 +9088,11 @@ msgstr ""
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
-msgstr ""
+msgstr "無効な PackedScene リソースです。ルートには Control ノードが必要です。"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "無効なファイルです。オーディオバスのレイアウトではありません。"
+msgstr "無効なファイルです。PackedScene のリソースではありません。"
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
@@ -9189,16 +9166,16 @@ msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift+左マウスボタン: 直線に描く\n"
-"Shift+Command+左マウスボタン: 長方形ペイント"
+"Shift+左クリック: 直線に描く\n"
+"Shift+Command+左クリック: 長方形ペイント"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Ctrl+LMB: Rectangle Paint"
msgstr ""
-"Shift+左マウスボタン: 直線に描く\n"
-"Shift+Ctrl+左マウスボタン: 長方形ペイント"
+"Shift+左クリック: 直線に描く\n"
+"Shift+Ctrl+左クリック: 長方形ペイント"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -9386,7 +9363,7 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove selected texture? This will remove all tiles which use it."
msgstr ""
-"選択したテクスチャを除去しますか? これを使用しているすべてのタイルは除去され"
+"選択したテクスチャを除去しますか? これを使用しているすべてのタイルは除去され"
"ます。"
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -9578,7 +9555,7 @@ msgstr "ステージに追加されているファイルがありません"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
-msgstr "委託"
+msgstr "コミット"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "VCS Addon is not initialized"
@@ -9718,7 +9695,7 @@ msgstr "入力デフォルトポートの設定"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Node to Visual Shader"
-msgstr "ビジュアルシェーダにノードを追加"
+msgstr "ビジュアルシェーダーにノードを追加"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Node(s) Moved"
@@ -9739,7 +9716,7 @@ msgstr "ノードを削除"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
-msgstr "ビジュアルシェーダの入力タイプが変更されました"
+msgstr "ビジュアルシェーダーの入力タイプが変更されました"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "UniformRef Name Changed"
@@ -9879,7 +9856,7 @@ msgstr "それ以下(<=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
-msgstr "等しくない(!=)"
+msgstr "等しくない (!=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9926,7 +9903,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment and light shader modes."
-msgstr "フラグメントモードとライトシェーダモードの '%s' 入力パラメーター。"
+msgstr "フラグメントモードとライトシェーダーモードの '%s' 入力パラメーター。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment shader mode."
@@ -9938,7 +9915,7 @@ msgstr "ライトシェーダーモードの '%s' 入力パラメータ。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex shader mode."
-msgstr "頂点シェーダモードの '%s' 入力パラメータ。"
+msgstr "頂点シェーダーモードの '%s' 入力パラメータ。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader mode."
@@ -10511,13 +10488,12 @@ msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "ビジュアルプロパティを編集"
+msgstr "ビジュアルプロパティを編集:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
-msgstr "ビジュアルシェーダモードが変更されました"
+msgstr "ビジュアルシェーダーモードが変更されました"
#: editor/project_export.cpp
msgid "Runnable"
@@ -10525,7 +10501,7 @@ msgstr "実行可能"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
-msgstr "プリセット '%s' を削除しますか?"
+msgstr "プリセット '%s' を削除しますか?"
#: editor/project_export.cpp
msgid ""
@@ -10615,7 +10591,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"リソース以外のファイル/フォルダをエクスポートするためのフィルタ\n"
-"(コンマで区切る、 例: *.json,*.txt,docs/*)"
+"(コンマ区切り、 例: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid ""
@@ -10623,7 +10599,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"プロジェクトからファイル/フォルダを除外するフィルタ\n"
-"(コンマで区切る、 例: *.json,*.txt,docs/*)"
+"(コンマ区切り、 例: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid "Features"
@@ -10642,9 +10618,8 @@ msgid "Script"
msgstr "スクリプト"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "スクリプトのエクスポートモード:"
+msgstr "GDScript のエクスポートモード:"
#: editor/project_export.cpp
msgid "Text"
@@ -10652,21 +10627,19 @@ msgstr "テキスト"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "コンパイルされたバイトコード (より高速なローディング)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "暗号化(下にキーを入力)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "無効な暗号化キー(64文字である必要があります)"
+msgstr "無効な暗号化キー (16進数で64文字である必要があります)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "スクリプト暗号化キー(16進数で256ビット):"
+msgstr "GDScript 暗号化キー (16進数で256ビット):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10741,7 +10714,6 @@ msgid "Imported Project"
msgstr "インポートされたプロジェクト"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
msgstr "無効なプロジェクト名です。"
@@ -10787,7 +10759,7 @@ msgstr "次のファイルをパッケージから抽出できませんでした
#: editor/project_manager.cpp
msgid "Package installed successfully!"
-msgstr "パッケージのインストールに成功しました!"
+msgstr "パッケージのインストールに成功しました!"
#: editor/project_manager.cpp
msgid "Rename Project"
@@ -10892,7 +10864,7 @@ msgstr "次の場所のプロジェクトを開けません '%s'。"
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
-msgstr "複数のプロジェクトを開いてもよろしいですか?"
+msgstr "複数のプロジェクトを開いてもよろしいですか?"
#: editor/project_manager.cpp
msgid ""
@@ -10930,7 +10902,7 @@ msgstr ""
"\n"
"%s\n"
"\n"
-"変換しますか?\n"
+"変換しますか?\n"
"警告: プロジェクトは旧バージョンのエンジンで開くことができなくなります。"
#: editor/project_manager.cpp
@@ -10961,24 +10933,22 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Are you sure to run %d projects at once?"
-msgstr "%d個のプロジェクトを同時に実行してもよろしいですか?"
+msgstr "%d個のプロジェクトを同時に実行してもよろしいですか?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "一覧からデバイスを選択"
+msgstr "リストから %d 個のプロジェクトを除去しますか?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "一覧からデバイスを選択"
+msgstr "このプロジェクトをリストから除去しますか?"
#: editor/project_manager.cpp
msgid ""
"Remove all missing projects from the list?\n"
"The project folders' contents won't be modified."
msgstr ""
-"見つからないすべてのプロジェクトを一覧から削除しますか?\n"
+"見つからないすべてのプロジェクトを一覧から削除しますか?\n"
"プロジェクトフォルダの内容は変更されません。"
#: editor/project_manager.cpp
@@ -10995,7 +10965,7 @@ msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
-"既存のGodotプロジェクトの%sフォルダをスキャンしますか?\n"
+"既存のGodotプロジェクトの%sフォルダをスキャンしますか?\n"
"これにはしばらく時間がかかります。"
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
@@ -11004,9 +10974,8 @@ msgid "Project Manager"
msgstr "プロジェクトマネージャー"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "プロジェクト"
+msgstr "ローカル プロジェクト"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11017,23 +10986,20 @@ msgid "Last Modified"
msgstr "最終更新"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "プロジェクトのエクスポート"
+msgstr "プロジェクトを編集"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "プロジェクト名の変更"
+msgstr "プロジェクトを実行"
#: editor/project_manager.cpp
msgid "Scan"
msgstr "スキャン"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "プロジェクト"
+msgstr "プロジェクトをスキャン"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11044,14 +11010,12 @@ msgid "New Project"
msgstr "新規プロジェクト"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "インポートされたプロジェクト"
+msgstr "プロジェクトをインポート"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "プロジェクト名の変更"
+msgstr "プロジェクトを除去"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11062,9 +11026,8 @@ msgid "About"
msgstr "概要"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "アセットライブラリ"
+msgstr "アセットライブラリのプロジェクト"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11076,7 +11039,7 @@ msgstr "すべて除去"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "プロジェクトの内容も削除されます (もとに戻せません!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11091,19 +11054,17 @@ msgstr ""
"アセットライブラリで公式のサンプルプロジェクトをチェックしますか?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "フィルタプロパティ"
+msgstr "プロジェクトのフィルタ"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"検索ボックスでは、プロジェクトは名前およびパスの最後の部分でフィルターされま"
-"す。\n"
+"このフィールドは、プロジェクト名とパスの最後の部分でプロジェクトをフィルタリ"
+"ングします。\n"
"プロジェクト名および完全パスでフィルターするには、クエリには `/` 文字が少なく"
"とも1つ必要です。"
@@ -11261,7 +11222,7 @@ msgstr "グローバルプロパティを追加"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr "設定項目を選択してください!"
+msgstr "設定項目を選択してください!"
#: editor/project_settings_editor.cpp
msgid "No property '%s' exists."
@@ -11304,9 +11265,8 @@ msgid "Override for Feature"
msgstr "機能のオーバーライド"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "翻訳を追加"
+msgstr "%d 個の翻訳を追加"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
@@ -11439,9 +11399,8 @@ msgid "Plugins"
msgstr "プラグイン"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Import Defaults"
-msgstr "デフォルトを読込む"
+msgstr "インポートの既定値"
#: editor/property_editor.cpp
msgid "Preset..."
@@ -11477,7 +11436,7 @@ msgstr "ノードを選択"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr "ファイル読み込みエラー: リソースではありません!"
+msgstr "ファイル読み込みエラー: リソースではありません!"
#: editor/property_editor.cpp
msgid "Pick a Node"
@@ -11750,7 +11709,7 @@ msgstr "%d ノードを削除しますか?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
-msgstr "ルートノード \"%s\" を削除しますか?"
+msgstr "ルートノード \"%s\" を削除しますか?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
@@ -11764,12 +11723,16 @@ msgstr "\"%s\" ノードを削除しますか?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"ブランチをシーンとして保存するには、エディタでシーンを開いている必要がありま"
+"す。"
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"ブランチをシーンとして保存するには、1つだけノードを選択する必要がありま"
+"す。%d 個のノードが選択されています。"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11836,11 +11799,11 @@ msgstr "その他のノード"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr "別のシーンからノードを操作することはできません!"
+msgstr "別のシーンからノードを操作することはできません!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr "現在のシーンが継承しているノードを操作することはできません!"
+msgstr "現在のシーンが継承しているノードを操作することはできません!"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -11977,7 +11940,7 @@ msgstr "ローカル"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr "継承をクリアしますか? (元に戻せません!)"
+msgstr "継承をクリアしますか? (元に戻せません!)"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visible"
@@ -12041,7 +12004,7 @@ msgid ""
"Click to make selectable."
msgstr ""
"子を選択できません。\n"
-"クリックして選択可能にしてください。"
+"クリックで選択可能にする。"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
@@ -12069,7 +12032,7 @@ msgstr "シーンツリー(ノード):"
#: editor/scene_tree_editor.cpp
msgid "Node Configuration Warning!"
-msgstr "ノードの設定に関する警告!"
+msgstr "ノードの設定に関する警告!"
#: editor/scene_tree_editor.cpp
msgid "Select a Node"
@@ -12188,6 +12151,7 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"警告: スクリプト名を組み込み型と同じにすることは、通常は望ましくありません。"
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12259,7 +12223,7 @@ msgstr "エラーをコピー"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "C++のソースをGitHubで開く"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12438,14 +12402,22 @@ msgid "Change Ray Shape Length"
msgstr "レイシェイプの長さを変更"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "カーブポイントの位置を設定"
+msgstr "Room ポイントの位置を設定"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "カーブポイントの位置を設定"
+msgstr "Portal ポイントの位置を設定"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "円柱シェイプの半径を変更"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "曲線のIn-Controlの位置を指定"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12521,7 +12493,7 @@ msgstr "GDNative"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
-msgstr "ステップ引数はゼロです!"
+msgstr "ステップ引数はゼロです!"
#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
@@ -12556,14 +12528,12 @@ msgid "Object can't provide a length."
msgstr "オブジェクトに長さがありません."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "メッシュライブラリのエクスポート"
+msgstr "メッシュの GLTF2 エクスポート"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "エクスポート..."
+msgstr "GLTF をエクスポート..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12606,9 +12576,8 @@ msgid "GridMap Paint"
msgstr "GridMap ペイント"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "GridMap 選択範囲を埋める"
+msgstr "GridMap の選択"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12725,14 +12694,18 @@ msgid "Post processing"
msgstr "後処理"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
-#, fuzzy
msgid "Plotting lightmaps"
-msgstr "光源を描画中:"
+msgstr "ライトマップを描画中:"
#: modules/mono/csharp_script.cpp
msgid "Class name can't be a reserved keyword"
msgstr "クラス名を予約キーワードにすることはできません"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "選択部の塗り潰し"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "内部例外スタックトレースの終了"
@@ -12795,7 +12768,7 @@ msgstr "ジオメトリを解析しています..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Done!"
-msgstr "完了!"
+msgstr "完了!"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -12803,7 +12776,7 @@ msgid ""
"properly!"
msgstr ""
"作業メモリなしでノードが生成されました。正しく生成する方法については、ドキュ"
-"メントを参照してください!"
+"メントを参照してください!"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -12828,7 +12801,7 @@ msgstr "ノードは無効なシークエンス出力を返しました: "
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
"スタックにシークエンスビットを見つけましたが、ノードではありません。バグ報告"
-"を!"
+"を!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
@@ -12863,14 +12836,12 @@ msgid "Add Output Port"
msgstr "出力ポートを追加"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "型を変更"
+msgstr "ポートの型を変更"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "入力ポート名の変更"
+msgstr "ポート名を変更"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -12988,7 +12959,6 @@ msgid "Add Preload Node"
msgstr "プリロードノードを追加"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
msgstr "ノードを追加"
@@ -13175,7 +13145,7 @@ msgstr "インデックスプロパティ名が無効です。"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr "ベースオブジェクトはノードではありません!"
+msgstr "ベースオブジェクトはノードではありません!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
@@ -13221,73 +13191,67 @@ msgstr "VisualScriptを検索"
msgid "Get %s"
msgstr "%s を取得"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "パッケージ名がありません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "パッケージセグメントの長さは0以外でなければなりません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "文字 '%s' はAndroidアプリケーション パッケージ名に使用できません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "数字をパッケージセグメントの先頭に使用できません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "文字 '%s' はパッケージ セグメントの先頭に使用できません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "パッケージには一つ以上の区切り文字 '.' が必要です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "一覧からデバイスを選択"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "%s で実行中"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
-msgstr "すべてエクスポート"
+msgstr "APKをエクスポート中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
-msgstr "アンインストール"
+msgstr "アンインストール中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "読み込み中、しばらくお待ちください..."
+msgstr "デバイスにインストール中、しばらくお待ちください..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
-msgstr "サブプロセスを開始できませんでした!"
+msgstr "デバイスにインストールできませんでした: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
-msgstr "カスタムスクリプトの実行中..."
+msgstr "デバイスで実行中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "フォルダを作成できませんでした。"
+msgstr "デバイスで実行できませんでした。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "'apksigner' ツールが見つかりません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13295,63 +13259,63 @@ msgstr ""
"Android ビルド テンプレートがプロジェクトにインストールされていません。[プロ"
"ジェクト] メニューからインストールします。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "デバッグキーストアがエディタ設定にもプリセットにも設定されていません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "エクスポート設定にてリリース キーストアが誤って設定されています。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "エディタ設定でAndroid SDKパスの指定が必要です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "エディタ設定のAndroid SDKパスが無効です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "'platform-tools' ディレクトリがありません!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Android SDK platform-toolsのadbコマンドが見つかりません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "エディタ設定で指定されたAndroid SDKのディレクトリを確認してください。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "'build-tools' ディレクトリがありません!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Android SDK build-toolsのapksignerコマンドが見つかりません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "APK expansion の公開鍵が無効です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "無効なパッケージ名:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13359,99 +13323,82 @@ msgstr ""
"「android/modules」に含まれる「GodotPaymentV3」モジュールのプロジェクト設定が"
"無効です (Godot 3.2.2 にて変更)。\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"プラグインを利用するには「Use Custom Build (カスタムビルドを使用する)」が有効"
"になっている必要があります。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有"
-"効になります。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有効にな"
"ります。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有効に"
-"なります。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Export AAB\" は \"Use Custom Build\" が有効である場合にのみ有効になります。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"'apksigner' が見つかりませんでした。\n"
+"このコマンドが Android SDK build-tools ディレクトリにあるか確認してくださ"
+"い。\n"
+"%s は署名されませんでした。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "デバッグ %s に署名中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
-msgstr ""
-"ファイルのスキャン中\n"
-"しばらくお待ち下さい..."
+msgstr "リリース %s に署名中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
-msgstr "エクスポート用のテンプレートを開けませんでした:"
+msgstr "キーストアが見つからないため、エクスポートできません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' がエラー #%d で終了しました"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "%s を追加中..."
+msgstr "%s を検証中..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "'apksigner' による %s の検証に失敗しました。"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "すべてエクスポート"
+msgstr "Android用にエクスポート中"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"無効なファイル名です! Android App Bundle には拡張子 *.aab が必要です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion は Android App Bundle とは互換性がありません。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "無効なファイル名です! Android APKには拡張子 *.apk が必要です。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "サポートされていないエクスポートフォーマットです!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13459,7 +13406,7 @@ msgstr ""
"カスタムビルドされたテンプレートからビルドしようとしましたが、そのバージョン"
"情報が存在しません。 「プロジェクト」メニューから再インストールしてください。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13472,26 +13419,25 @@ msgstr ""
"「プロジェクト 」メニューからAndroidビルドテンプレートを再インストールしてく"
"ださい。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "project.godotをプロジェクトパスに生成できませんでした"
+msgstr ""
+"プロジェクトファイルをgladleプロジェクトにエクスポートできませんでした\n"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
-msgstr "ファイルを書き込めませんでした:"
+msgstr "拡張パッケージファイルを書き込めませんでした!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Androidプロジェクトの構築(gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13500,11 +13446,11 @@ msgstr ""
"また、Androidビルドについてのドキュメントは docs.godotengine.org をご覧くださ"
"い。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "出力結果の移動中"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13512,24 +13458,23 @@ msgstr ""
"エクスポートファイルのコピーと名前の変更ができません。出力結果をみるには"
"gradleのプロジェクトディレクトリを確認してください。"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "見つからないアニメーション: '%s'"
+msgstr "見つからないパッケージ: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "輪郭を作成しています..."
+msgstr "APK を作成しています..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "エクスポート用のテンプレートを開けませんでした:"
+msgstr ""
+"エクスポートするテンプレートAPKが見つかりませんでした:\n"
+"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13537,21 +13482,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
-msgstr "%s を追加中..."
+msgstr "ファイルを追加中..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
-msgstr "ファイルを書き込めませんでした:"
+msgstr "プロジェクトファイルをエクスポートできませんでした"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "APKを最適化..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13600,45 +13543,40 @@ msgid "Could not write file:"
msgstr "ファイルを書き込めませんでした:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "ファイルを書き込めませんでした:"
+msgstr "ファイルを読み込めませんでした:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "カスタムHTMLシェルを読み込めませんでした:"
+msgstr "HTMLシェルを読み込めませんでした:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "フォルダを作成できませんでした。"
+msgstr "HTTPサーバーのディレクトリの作成に失敗:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "シーンを保存する際にエラーが発生しました."
+msgstr "HTTPサーバーの開始に失敗:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "無効な識別子:"
+msgstr "無効なバンドルID:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "Notarization: コード署名が必要です。"
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Notarization: hardened runtime が必要です。"
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Notarization: Apple ID 名が指定されていません。"
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Notarization: Apple ID パスワードが指定されていません。"
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -13956,16 +13894,15 @@ msgstr "ARVROriginは子ノードにARVRCameraが必要です。"
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
-msgstr ""
+msgstr "メッシュとライトを検索中"
#: scene/3d/baked_lightmap.cpp
msgid "Preparing geometry (%d/%d)"
msgstr "ジオメトリを解析しています (%d/%d)"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Preparing environment"
-msgstr "環境を表示"
+msgstr "環境を準備中"
#: scene/3d/baked_lightmap.cpp
#, fuzzy
@@ -13973,9 +13910,8 @@ msgid "Generating capture"
msgstr "ライトマップの生成"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Saving lightmaps"
-msgstr "ライトマップの生成"
+msgstr "ライトマップを保存中"
#: scene/3d/baked_lightmap.cpp
msgid "Done"
@@ -14053,7 +13989,7 @@ msgstr ""
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
-msgstr "メッシュのプロット"
+msgstr "メッシュを描画中"
#: scene/3d/gi_probe.cpp
msgid "Finishing Plot"
@@ -14073,6 +14009,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"GIProbeのCompressプロパティは既知のバグのため非推奨になり、もはや何の効果もあ"
+"りません。\n"
+"この警告を消すには、GIProbeのCompressプロパティを無効化してください。"
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -14092,6 +14031,14 @@ msgstr ""
"NavigationMeshInstance は、ナビゲーションノードの子や孫である必要があります。"
"これはナビゲーションデータのみ提供します。"
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14159,15 +14106,15 @@ msgstr "Node A と Node B は異なる PhysicsBody でなければなりませ
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomManager は Portal の子や孫にできません。"
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Room は Portal の子や孫にできません。"
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomGroup は Portal の子や孫にできません。"
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14179,15 +14126,15 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Room は 他の Room を子や孫に持つことはできません。"
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "RoomManager は Room の中に設置できません。"
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "RoomGroup は Room の中に設置できません。"
#: scene/3d/room.cpp
msgid ""
@@ -14197,39 +14144,46 @@ msgstr ""
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "RoomManager は RoomGroup の中に設置できません。"
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "RoomList が割り当てられていません。"
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
msgstr ""
+"RoomList ノードは Spatial (または Spatial の派生) でなければなりません。"
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"Portal Depth Limit が ゼロ に設定されています。\n"
+"カメラが内部にある Room のみ描画されます。"
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "SceneTree には RoomManager が1つだけ存在できます。"
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"RoomList パスが無効です。\n"
+"RoomList ブランチが RoomManager に割り当てられているか確認してください。"
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList に Room が含まれていないため、中断します。"
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"誤ったノード名が検出されました。詳細は出力ログを確認してください。中止しま"
+"す。"
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
@@ -14246,6 +14200,9 @@ msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Roomの重なりが検出されました。重なったエリアでカメラが正しく動作しない可能性"
+"があります。\n"
+"詳細は出力ログを確認してください。"
#: scene/3d/room_manager.cpp
msgid ""
@@ -14316,7 +14273,7 @@ msgstr "見つからないアニメーション: '%s'"
#: scene/animation/animation_player.cpp
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "アニメーションをリセット"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14359,8 +14316,8 @@ msgid ""
"RMB: Remove preset"
msgstr ""
"色: #%s\n"
-"左マウスボタン: 色をセット\n"
-"右マウスボタン: プリセットの除去"
+"左クリック: 色をセット\n"
+"右クリック: プリセットの除去"
#: scene/gui/color_picker.cpp
msgid "Pick a color from the editor window."
@@ -14404,7 +14361,7 @@ msgstr ""
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr "警告!"
+msgstr "警告!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
@@ -14418,6 +14375,14 @@ msgstr "有効な拡張子を使用する必要があります。"
msgid "Enable grid minimap."
msgstr "グリッドミニマップを有効にする。"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14470,6 +14435,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "レンダーするにはビューポートのサイズが 0 より大きい必要があります。"
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14489,21 +14458,24 @@ msgid "Invalid comparison function for that type."
msgstr "そのタイプの比較関数は無効です。"
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Varying変数は頂点関数にのみ割り当てることができます。"
+msgstr "Varying は '%s' 関数で割り当てられない可能性があります。"
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"'vertex' 関数で割り当てた Varying を 'fragment' と 'light' で再び割り当てるこ"
+"とはできません。"
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"'fragment' 関数で割り当てた Varying を 'vertex' と 'light' で再び割り当てるこ"
+"とはできません。"
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
@@ -14521,6 +14493,41 @@ msgstr "uniform への割り当て。"
msgid "Constants cannot be modified."
msgstr "定数は変更できません。"
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "レスト・ポーズの作成(ボーンから)"
+
+#~ msgid "Bottom"
+#~ msgstr "下面"
+
+#~ msgid "Left"
+#~ msgstr "左側面"
+
+#~ msgid "Right"
+#~ msgstr "右側面"
+
+#~ msgid "Front"
+#~ msgstr "前面"
+
+#~ msgid "Rear"
+#~ msgstr "後面"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "無名のギズモ"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ"
+#~ "有効になります。"
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有"
+#~ "効になります。"
+
#~ msgid "Package Contents:"
#~ msgstr "パッケージの内容:"
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index 7abc89b216..5e4f5d0094 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -1070,7 +1070,7 @@ msgstr ""
msgid "Dependencies"
msgstr "დამოკიდებულებები"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "რესურსი"
@@ -1719,13 +1719,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2110,7 +2110,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2600,6 +2600,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3233,6 +3257,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "ანიმაციის გარდაქმნის ცვლილება"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3479,6 +3508,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5592,6 +5625,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "მონიშვნის მოშორება"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6527,7 +6571,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7119,6 +7167,16 @@ msgstr "შექმნა"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "ანიმაციის გარდაქმნის ცვლილება"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "წაშლა"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7635,11 +7693,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "ახალი %s შექმნა"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7667,6 +7726,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7777,42 +7890,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8076,6 +8169,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "შექმნა"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8141,7 +8239,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12195,6 +12293,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12480,6 +12586,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "ყველა მონიშნვა"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12966,162 +13077,151 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "დაყენება"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "ძებნა:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "არასწორი ფონტის ზომა."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13129,57 +13229,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13187,55 +13287,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "ანიმაციის ხანგრძლივობა (წამებში)."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13243,20 +13343,20 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "საყვარლები:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13713,6 +13813,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14006,6 +14114,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14046,6 +14162,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/km.po b/editor/translations/km.po
index 187307bc17..a5b6139d08 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -993,7 +993,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1622,13 +1622,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3099,6 +3123,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim ផ្លាស់ប្តូរ Transform"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3339,6 +3368,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5379,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6278,7 +6321,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6864,6 +6911,14 @@ msgstr "ផ្លាស់ទី Bezier Points"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7358,11 +7413,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7390,6 +7445,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7497,42 +7606,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7794,6 +7883,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7859,7 +7952,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11759,6 +11852,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12039,6 +12140,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12505,159 +12610,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12665,57 +12759,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12723,54 +12817,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12778,19 +12872,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13240,6 +13334,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13529,6 +13631,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13569,6 +13679,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 1f24eb1b1d..c288a2b7e7 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -23,11 +23,12 @@
# Yungjoong Song <yungjoong.song@gmail.com>, 2020.
# Henry LeRoux <henry.leroux@ocsbstudent.ca>, 2021.
# Postive_ Cloud <postive12@gmail.com>, 2021.
+# dewcked <dewcked@protonmail.ch>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
+"PO-Revision-Date: 2021-09-21 15:22+0000\n"
"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
@@ -36,7 +37,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -205,7 +206,7 @@ msgstr "애니메이션 길이 바꾸기"
#: editor/animation_track_editor.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
-msgstr "애니메이션 루프 변경"
+msgstr "애니메이션 루프 바꾸기"
#: editor/animation_track_editor.cpp
msgid "Property Track"
@@ -266,7 +267,7 @@ msgstr "트랙 경로 바꾸기"
#: editor/animation_track_editor.cpp
msgid "Toggle this track on/off."
-msgstr "이 트랙을 켬/꺼짐 여부를 전환합니다."
+msgstr "이 트랙을 켜기/끄기를 토글합니다."
#: editor/animation_track_editor.cpp
msgid "Update Mode (How this property is set)"
@@ -282,7 +283,7 @@ msgstr "루프 래핑 모드 (시작 루프와 끝을 보간)"
#: editor/animation_track_editor.cpp
msgid "Remove this track."
-msgstr "이 트랙을 삭제합니다."
+msgstr "이 트랙을 제거합니다."
#: editor/animation_track_editor.cpp
msgid "Time (s): "
@@ -356,7 +357,7 @@ msgstr "애니메이션 루프 모드 바꾸기"
#: editor/animation_track_editor.cpp
msgid "Remove Anim Track"
-msgstr "애니메이션 트랙 삭제"
+msgstr "애니메이션 트랙 제거"
#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
#: editor/animation_track_editor.cpp
@@ -385,13 +386,11 @@ msgstr "애니메이션 삽입"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "'%s' 열수 없음."
+msgstr "노드 '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "애니메이션"
@@ -403,9 +402,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "'%s' 속성이 없습니다."
+msgstr "속성 '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -485,7 +483,7 @@ msgstr "메서드 트랙 키 추가"
#: editor/animation_track_editor.cpp
msgid "Method not found in object: "
-msgstr "객체에 메서드가 없음: "
+msgstr "오브젝트에 메서드가 없음: "
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -502,7 +500,7 @@ msgstr "트랙 붙여 넣기"
#: editor/animation_track_editor.cpp
msgid "Anim Scale Keys"
-msgstr "애니메이션 키 크기 조절"
+msgstr "애니메이션 키 스케일"
#: editor/animation_track_editor.cpp
msgid ""
@@ -525,9 +523,9 @@ msgstr ""
"이 애니메이션은 가져온 씬에 속해 있습니다. 가져온 트랙의 변경 사항은 저장되"
"지 않습니다.\n"
"\n"
-"저장 기능을 켜려면 맞춤 트랙을 추가하고, 씬의 가져오기 설정으로 가서\n"
+"저장 기능을 활성화하려면 맞춤 트랙을 추가하고, 씬의 가져오기 설정으로 가서\n"
"\"Animation > Storage\" 설정을 \"Files\"로, \"Animation > Keep Custom Tracks"
-"\" 설정을 켠 뒤, 다시 가져오십시오.\n"
+"\" 설정을 활성화한 뒤, 다시 가져오십시오.\n"
"아니면 가져오기 프리셋으로 애니메이션을 별도의 파일로 가져올 수도 있습니다."
#: editor/animation_track_editor.cpp
@@ -584,11 +582,11 @@ msgstr "트랙 복사"
#: editor/animation_track_editor.cpp
msgid "Scale Selection"
-msgstr "선택 항목 배율 조절"
+msgstr "선택 항목 스케일 조절"
#: editor/animation_track_editor.cpp
msgid "Scale From Cursor"
-msgstr "커서 위치에서 배율 조절"
+msgstr "커서 위치에서 스케일 조절"
#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -612,9 +610,8 @@ msgid "Go to Previous Step"
msgstr "이전 단계로 이동"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "되돌리기"
+msgstr "재설정 적용"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -633,9 +630,8 @@ msgid "Use Bezier Curves"
msgstr "베지어 곡선 사용"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "트랙 붙여 넣기"
+msgstr "재설정 트랙 만들기"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -659,11 +655,11 @@ msgstr "최적화"
#: editor/animation_track_editor.cpp
msgid "Remove invalid keys"
-msgstr "잘못된 키 삭제"
+msgstr "잘못된 키 제거"
#: editor/animation_track_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr "해결되지 않고 빈 트랙 삭제"
+msgstr "해결되지 않고 빈 트랙 제거"
#: editor/animation_track_editor.cpp
msgid "Clean-up all animations"
@@ -679,7 +675,7 @@ msgstr "정리"
#: editor/animation_track_editor.cpp
msgid "Scale Ratio:"
-msgstr "배율값:"
+msgstr "스케일 비율:"
#: editor/animation_track_editor.cpp
msgid "Select Tracks to Copy"
@@ -842,7 +838,7 @@ msgstr "추가"
#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp
#: editor/project_settings_editor.cpp
msgid "Remove"
-msgstr "삭제"
+msgstr "제거"
#: editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
@@ -937,7 +933,7 @@ msgstr "연결 변경:"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
-msgstr "\"%s\" 시그널의 모든 연결을 삭제할까요?"
+msgstr "\"%s\" 시그널의 모든 연결을 제거하시겠습니까?"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
@@ -949,7 +945,7 @@ msgstr "시그널 필터"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
-msgstr "이 시그널의 모든 연결을 삭제할까요?"
+msgstr "이 시그널의 모든 연결을 제거하시겠습니까?"
#: editor/connections_dialog.cpp
msgid "Disconnect All"
@@ -960,7 +956,6 @@ msgid "Edit..."
msgstr "편집..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "메서드로 이동"
@@ -1026,7 +1021,7 @@ msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"씬 '%s'이(가) 현재 편집중입니다.\n"
+"씬 '%s'이(가) 현재 편집되고 있습니다.\n"
"변경 사항은 다시 불러온 뒤에 반영됩니다."
#: editor/dependency_editor.cpp
@@ -1034,7 +1029,7 @@ msgid ""
"Resource '%s' is in use.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"리소스 '%s'이(가) 현재 사용중입니다.\n"
+"리소스 '%s'이(가) 현재 사용 중입니다.\n"
"변경 사항은 다시 불러온 뒤에 반영됩니다."
#: editor/dependency_editor.cpp
@@ -1042,7 +1037,7 @@ msgstr ""
msgid "Dependencies"
msgstr "종속 관계"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "리소스"
@@ -1061,7 +1056,7 @@ msgstr "망가진 부분 고치기"
#: editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr "종속 관계 편집기"
+msgstr "종속 관계 에디터"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
@@ -1082,17 +1077,16 @@ msgid "Owners Of:"
msgstr "소유자:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"프로젝트에서 선택된 파일을 제거하시겠습니다? (되돌릴 수 없음)\n"
-"시스템 휴지통에서 제거된 파일을 찾고 복원할 수 있습니다."
+"프로젝트에서 선택된 파일을 제거하시겠습니까? (되돌릴 수 없습니다.)\n"
+"파일시스템 구성에 따라, 파일은 시스템 휴지동으로 이동되거나 완전히 삭제됩니"
+"다."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1101,12 +1095,12 @@ msgid ""
"to the system trash or deleted permanently."
msgstr ""
"제거하려는 파일은 다른 리소스가 동작하기 위해 필요합니다.\n"
-"무시하고 제거하시겠습니까? (되돌릴 수 없음)\n"
-"시스템 휴지통에서 제거된 파일을 찾고 복원할 수 있습니다."
+"무시하고 제거하시겠습니까? (되돌릴 수 없습니다.)\n"
+"파일시스템 구성에 따라 파일은 시스템 휴지통으로 이동되거나 완전히 삭제됩니다."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
-msgstr "삭제할 수 없음:"
+msgstr "제거할 수 없음:"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -1162,11 +1156,11 @@ msgstr "명확한 소유 관계가 없는 리소스:"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Key"
-msgstr "딕셔너리 키 변경"
+msgstr "딕셔너리 키 바꾸기"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Value"
-msgstr "딕셔너리 값 변경"
+msgstr "딕셔너리 값 바꾸기"
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
@@ -1271,40 +1265,36 @@ msgid "Licenses"
msgstr "라이선스"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "패키지 파일을 여는 중 오류 (ZIP 형식이 아닙니다)."
+msgstr "\"%s\"에 대한 애셋 파일을 여는 중 오류 (ZIP 형식이 아닙니다)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (이미 존재함)"
+msgstr "%s (이미 있습니다)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr "애셋 \"%s\"의 내용 - 파일 %d개가 프로젝트와 충돌합니다:"
+msgstr "애셋 \"%s\"의 콘텐츠 - 파일 %d개가 프로젝트와 충돌합니다:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr "애셋 \"%s\"의 내용 - 프로젝트와 충돌하는 파일이 없습니다:"
+msgstr "애셋 \"%s\"의 콘텐츠 - 프로젝트와 충돌하는 파일이 없습니다:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "애셋 압축 풀기"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "다음 파일을 패키지에서 추출하는데 실패함:"
+msgstr "다음 파일을 애셋에서 압축 푸는 데 실패함:"
#: editor/editor_asset_installer.cpp
msgid "(and %s more files)"
msgstr "(및 더 많은 파일 %s개)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "패키지를 성공적으로 설치했습니다!"
+msgstr "애셋 \"%s\"를 성공적으로 설치했습니다!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1316,9 +1306,8 @@ msgid "Install"
msgstr "설치"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "패키지 설치 마법사"
+msgstr "애셋 인스톨러"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1326,7 +1315,7 @@ msgstr "스피커"
#: editor/editor_audio_buses.cpp
msgid "Add Effect"
-msgstr "효과 추가"
+msgstr "이펙트 추가"
#: editor/editor_audio_buses.cpp
msgid "Rename Audio Bus"
@@ -1346,7 +1335,7 @@ msgstr "오디오 버스 음소거 토글"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr "오디오 버스 바이패스 효과 토글"
+msgstr "오디오 버스 바이패스 이펙트 토글"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -1354,15 +1343,15 @@ msgstr "오디오 버스 전송 선택"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr "오디오 버스 효과 추가"
+msgstr "오디오 버스 이펙트 추가"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr "버스 효과 이동"
+msgstr "버스 이펙트 이동"
#: editor/editor_audio_buses.cpp
msgid "Delete Bus Effect"
-msgstr "버스 효과 삭제"
+msgstr "버스 이펙트 삭제"
#: editor/editor_audio_buses.cpp
msgid "Drag & drop to rearrange."
@@ -1381,9 +1370,8 @@ msgid "Bypass"
msgstr "바이패스"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "버스 설정"
+msgstr "버스 옵션"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1392,11 +1380,11 @@ msgstr "복제"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
-msgstr "볼륨 초기화"
+msgstr "볼륨 재설정"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
-msgstr "효과 삭제"
+msgstr "이펙트 삭제"
#: editor/editor_audio_buses.cpp
msgid "Audio"
@@ -1420,7 +1408,7 @@ msgstr "오디오 버스 복제"
#: editor/editor_audio_buses.cpp
msgid "Reset Bus Volume"
-msgstr "버스 볼륨 초기화"
+msgstr "버스 볼륨 재설정"
#: editor/editor_audio_buses.cpp
msgid "Move Audio Bus"
@@ -1482,11 +1470,11 @@ msgstr "이 버스 레이아웃을 파일로 저장합니다."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr "기본값 불러오기"
+msgstr "디폴트 불러오기"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr "기본 버스 레이아웃을 불러옵니다."
+msgstr "디폴트 버스 레이아웃을 불러옵니다."
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
@@ -1506,7 +1494,7 @@ msgstr "엔진에 이미 있는 클래스 이름과 겹치지 않아야 합니
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing built-in type name."
-msgstr "기본 자료형과 이름과 겹치지 않아야 합니다."
+msgstr "기존 내장 자료형과 이름과 겹치지 않아야 합니다."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing global constant name."
@@ -1534,11 +1522,11 @@ msgstr "오토로드 이동"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr "오토로드 삭제"
+msgstr "오토로드 제거"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
-msgstr "켜기"
+msgstr "활성화"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
@@ -1578,9 +1566,8 @@ msgid "Name"
msgstr "이름"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "변수"
+msgstr "전역 변수"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1654,7 +1641,7 @@ msgid ""
"Etc' in Project Settings."
msgstr ""
"대상 플랫폼에서 GLES2 용 'ETC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 "
-"'Import Etc' 설정을 켜세요."
+"'Import Etc' 설정을 활성화하세요."
#: editor/editor_export.cpp
msgid ""
@@ -1662,7 +1649,7 @@ msgid ""
"'Import Etc 2' in Project Settings."
msgstr ""
"대상 플랫폼에서 GLES3 용 'ETC2' 텍스처 압축이 필요합니다. 프로젝트 설정에서 "
-"'Import Etc 2' 설정을 켜세요."
+"'Import Etc 2' 설정을 활성화하세요."
#: editor/editor_export.cpp
msgid ""
@@ -1673,8 +1660,8 @@ msgid ""
msgstr ""
"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요합니"
"다.\n"
-"프로젝트 설정에서 'Import Etc' 설정을 활성화 하거나, 'Driver Fallback "
-"Enabled' 설정을 비활성화 하세요."
+"프로젝트 설정에서 'Import Etc' 설정을 활성화하거나, 'Driver Fallback "
+"Enabled' 설정을 비활성화하세요."
#: editor/editor_export.cpp
msgid ""
@@ -1682,15 +1669,15 @@ msgid ""
"'Import Pvrtc' in Project Settings."
msgstr ""
"대상 플랫폼에서 GLES2 용 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 "
-"'Import Pvrt' 를 활성화 하세요."
+"'Import Pvrt' 설정을 활성화하세요."
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"대상 플랫폼은 GLES3 용 'ETC2' 나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 "
-"설정에서 'Import Etc 2' 나 'Import Pvrtc' 를 활성화 하세요."
+"대상 플랫폼은 GLES3 용 'ETC2'나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설"
+"정에서 'Import Etc 2'나 'Import Pvrtc' 설정을 활성화하세요."
#: editor/editor_export.cpp
msgid ""
@@ -1701,16 +1688,16 @@ msgid ""
msgstr ""
"대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'PVRTC' 텍스처 압축이 필요합"
"니다.\n"
-"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화 하거나, 'Driver Fallback "
-"Enabled' 설정을 비활성화 하세요."
+"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화하거나, 'Driver Fallback "
+"Enabled' 설정을 비활성화하세요."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "사용자 지정 디버그 템플릿을 찾을 수 없습니다."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1726,11 +1713,11 @@ msgstr "32비트 환경에서는 4 GiB보다 큰 내장 PCK를 내보낼 수 없
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
-msgstr "3D 편집기"
+msgstr "3D 에디터"
#: editor/editor_feature_profile.cpp
msgid "Script Editor"
-msgstr "스크립트 편집기"
+msgstr "스크립트 에디터"
#: editor/editor_feature_profile.cpp
msgid "Asset Library"
@@ -1746,7 +1733,7 @@ msgstr "노드 도킹"
#: editor/editor_feature_profile.cpp
msgid "FileSystem Dock"
-msgstr "파일 시스템 독"
+msgstr "파일시스템 독"
#: editor/editor_feature_profile.cpp
msgid "Import Dock"
@@ -1754,48 +1741,49 @@ msgstr "독 가져오기"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "3D 씬을 보고 편집할 수 있게 합니다."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "통합 스크립트 에디터를 사용해 스크립트를 편집할 수 있게 합니다."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "애셋 라이브러리에 내장 접근을 제공합니다."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "씬 독에서 노드 계층 구조를 편집할 수 있게 합니다."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr ""
+msgstr "씬 독에서 선택된 노드의 신호와 그룹으로 동작할 수 있게 합니다."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "전용 독을 통해 로컬 파일 시스템을 탐색할 수 있게 합니다."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"개별 애셋에 대한 가져오기 설정을 구성할 수 있게 합니다. 작동하려면 파일시스"
+"템 독이 필요합니다."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
msgstr "(현재)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(없음)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "현재 선택된 프로필인 '%s'을 제거하시겠습니까? 되돌릴 수 없습니다."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1807,37 +1795,35 @@ msgstr "이 이름으로 된 프로필이 이미 있습니다."
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled, Properties Disabled)"
-msgstr "(편집기 꺼짐, 속성 꺼짐)"
+msgstr "(에디터 비활성화됨, 속성 비활성화됨)"
#: editor/editor_feature_profile.cpp
msgid "(Properties Disabled)"
-msgstr "(속성 꺼짐)"
+msgstr "(속성 비활성회됨)"
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled)"
-msgstr "(편집기 꺼짐)"
+msgstr "(에디터 비활성화됨)"
#: editor/editor_feature_profile.cpp
msgid "Class Options:"
-msgstr "클래스 설정:"
+msgstr "클래스 옵션:"
#: editor/editor_feature_profile.cpp
msgid "Enable Contextual Editor"
-msgstr "상황별 편집기 켜기"
+msgstr "상황별 에디터 활성화"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "속성:"
+msgstr "클래스 속성:"
#: editor/editor_feature_profile.cpp
msgid "Main Features:"
msgstr "주요 기능:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "켜진 클래스:"
+msgstr "노드와 클래스:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1848,7 +1834,7 @@ msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
msgstr ""
-"프로필 '%s'이(가) 이미 있습니다. 가져오기 전에 이미 있는 프로필을 먼저 삭제하"
+"프로필 '%s'이(가) 이미 있습니다. 가져오기 전에 이미 있는 프로필을 먼저 제거하"
"세요. 가져오기를 중단합니다."
#: editor/editor_feature_profile.cpp
@@ -1856,23 +1842,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "프로필을 경로에 저장하는 중 오류: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "기본값으로 재설정"
+msgstr "디폴트로 재설정"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "현재 프로필:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "프로필 지우기"
+msgstr "프로필 만들기"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "타일 삭제"
+msgstr "프로필 제거"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1901,7 +1884,7 @@ msgstr "별도의 옵션:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
-msgstr ""
+msgstr "사용 가능한 클래스와 속성을 편집하려면 프로필을 만들거나 가져오세요."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1921,16 +1904,15 @@ msgstr "프로필 내보내기"
#: editor/editor_feature_profile.cpp
msgid "Manage Editor Feature Profiles"
-msgstr "편집기 기능 프로필 관리"
+msgstr "에디터 기능 프로필 관리"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select Current Folder"
msgstr "현재 폴더 선택"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "파일이 이미 있습니다. 덮어쓸까요?"
+msgstr "파일이 존재합니다. 덮어쓰시겠습니까?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2089,7 +2071,7 @@ msgstr "파일 % 에 해당하는 가져오기 포맷이 여러 종류입니다.
msgid "(Re)Importing Assets"
msgstr "애셋 (다시) 가져오기"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "맨 위"
@@ -2120,11 +2102,11 @@ msgstr "속성"
#: editor/editor_help.cpp
msgid "override:"
-msgstr "오버라이드:"
+msgstr "재정의:"
#: editor/editor_help.cpp
msgid "default:"
-msgstr "기본:"
+msgstr "디폴트:"
#: editor/editor_help.cpp
msgid "Methods"
@@ -2189,7 +2171,7 @@ msgstr "모두 표시"
#: editor/editor_help_search.cpp
msgid "Classes Only"
-msgstr "클래스만 표시"
+msgstr "클래스만"
#: editor/editor_help_search.cpp
msgid "Methods Only"
@@ -2326,10 +2308,13 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"에디터 창을 다시 그릴 때 회전합니다.\n"
+"업데이트가 지속적으로 활성화되므로, 전력 사용량이 커질 수 있습니다. 이를 비활"
+"성화하려면 클릭하세요."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
-msgstr "편집기 창에 변화가 있을 때마다 회전합니다."
+msgstr "에디터 창에 변화가 있을 때마다 회전합니다."
#: editor/editor_node.cpp
msgid "Imported resources can't be saved."
@@ -2383,7 +2368,7 @@ msgstr "예기치 못한 '%s' 파일의 끝."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr "'%s' 또는 이것의 종속 항목이 없습니다."
+msgstr "'%s' 또는 이것의 종속 항목이 누락되어 있습니다."
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
@@ -2446,8 +2431,8 @@ msgid ""
"An error occurred while trying to save the editor layout.\n"
"Make sure the editor's user data path is writable."
msgstr ""
-"편집기 레이아웃의 저장을 하려는 동안 오류가 발생했습니다.\n"
-"편집기의 사용자 데이터 경로가 쓰기 가능한지 확인해주세요."
+"에디터 레이아웃의 저장을 하려는 동안 오류가 발생했습니다.\n"
+"에디터의 사용자 데이터 경로가 쓰기 가능한지 확인해주세요."
#: editor/editor_node.cpp
msgid ""
@@ -2455,9 +2440,9 @@ msgid ""
"To restore the Default layout to its base settings, use the Delete Layout "
"option and delete the Default layout."
msgstr ""
-"기본 편집기 레이아웃이 덮어 쓰여져 있습니디.\n"
-"기본 레이아웃을 원래 설정으로 복구하려면, 레이아웃 삭제 옵션을 사용하여 기본 "
-"레이아웃을 삭제하세요."
+"디폴트 에디터 레이아웃이 덮어 쓰여져 있습니다.\n"
+"디폴트 레이아웃을 원래 설정으로 복원하려면, 레이아웃 삭제 옵션을 사용하여 디"
+"폴트 레이아웃을 삭제하세요."
#: editor/editor_node.cpp
msgid "Layout name not found!"
@@ -2465,7 +2450,7 @@ msgstr "레이아웃 이름을 찾을 수 없습니다!"
#: editor/editor_node.cpp
msgid "Restored the Default layout to its base settings."
-msgstr "기본 레이아웃을 원래 설정으로 복구하였습니다."
+msgstr "디폴트 레이아웃을 기본 설정으로 복원하였습니다."
#: editor/editor_node.cpp
msgid ""
@@ -2473,9 +2458,9 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"`이 리소스는 가져온 씬에 속한 리소스이므로 편집할 수 없습니다.\n"
-"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 설명문서를 읽"
-"어주세요."
+"이 리소스는 가져온 씬에 속한 리소스이므로 편집할 수 없습니다.\n"
+"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주"
+"세요."
#: editor/editor_node.cpp
msgid ""
@@ -2502,8 +2487,8 @@ msgid ""
msgstr ""
"이 씬은 가져온 것이므로 변경 사항이 유지되지 않습니다.\n"
"이 씬을 인스턴스화하거나 상속하면 편집할 수 있습니다.\n"
-"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 설명문서를 읽"
-"어주세요."
+"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주"
+"세요."
#: editor/editor_node.cpp
msgid ""
@@ -2511,12 +2496,12 @@ msgid ""
"Please read the documentation relevant to debugging to better understand "
"this workflow."
msgstr ""
-"원격 객체는 변경사항이 적용되지 않습니다.\n"
-"이 워크플로를 이해하려면 디버깅(Debugging)과 관련된 설명문서를 읽어주세요."
+"원격 오브젝트는 변경사항이 적용되지 않습니다.\n"
+"이 워크플로를 이해하려면 디버깅(Debugging)과 관련된 문서를 읽어주세요."
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr "실행할 씬이 설정되지 않았습니다."
+msgstr "실행할 씬이 정의되지 않았습니다."
#: editor/editor_node.cpp
msgid "Save scene before running..."
@@ -2559,13 +2544,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"현재 씬에는 루트 노드가 없지만, 그래도 수정된 외부 리소스 %d개가 저장되었습니"
+"다."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "씬을 저장하려면 루트 노드가 필요합니다."
+msgstr ""
+"씬을 저장하려면 루트 노드가 필요합니다. 씬 트리 독을 사용하여 루트 노드를 추"
+"가할 수 있습니다."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2596,6 +2584,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "현재 씬이 저장되어 있지 않습니다. 무시하고 여시겠습니까?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "되돌리기"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "다시 실행"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "저장하지 않은 씬은 새로고침할 수 없습니다."
@@ -2609,7 +2623,7 @@ msgid ""
"Reload the saved scene anyway? This action cannot be undone."
msgstr ""
"현재 씬에는 저장하지 않은 변경사항이 있습니다.\n"
-"그래도 저장된 씬을 새로고침하시겠습니까? 이 동작은 되돌릴 수 없습니다."
+"무시하고 저장된 씬을 새로고침하시겠습니까? 이 동작은 되돌릴 수 없습니다."
#: editor/editor_node.cpp
msgid "Quick Run Scene..."
@@ -2625,7 +2639,7 @@ msgstr "예"
#: editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr "편집기를 나가시겠습니까?"
+msgstr "에디터를 나가시겠습니까?"
#: editor/editor_node.cpp
msgid "Open Project Manager?"
@@ -2666,7 +2680,7 @@ msgstr "닫은 씬 다시 열기"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
msgstr ""
-"다음 경로에 있는 애드온 플러그인을 활성화할 수 없음: '%s' 설정의 구문 분석을 "
+"다음 경로에 있는 애드온 플러그인을 활성화할 수 없음: '%s' 구성의 구문 분석을 "
"실패했습니다."
#: editor/editor_node.cpp
@@ -2714,7 +2728,7 @@ msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
-"씬을 불러오는 중 오류가 발생했습니다. 씬은 프로젝트 경로 내에 있어야 합니다. "
+"씬을 불러오는 중 오류가 발생했습니다. 씬은 프로젝트 경로 안에 있어야 합니다. "
"'가져오기'를 사용해서 씬을 열고, 그 씬을 프로젝트 경로 안에 저장하세요."
#: editor/editor_node.cpp
@@ -2731,7 +2745,7 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"메인 씬을 지정하지 않았습니다. 선택하시겠습니까?\n"
+"메인 씬을 정의하지 않았습니다. 선택하시겠습니까?\n"
"나중에 \"프로젝트 설정\"의 'application' 카테고리에서 변경할 수 있습니다."
#: editor/editor_node.cpp
@@ -2763,12 +2777,12 @@ msgstr "레이아웃 삭제"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "기본"
+msgstr "디폴트"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
msgid "Show in FileSystem"
-msgstr "파일 시스템에서 보기"
+msgstr "파일시스템에서 보기"
#: editor/editor_node.cpp
msgid "Play This Scene"
@@ -2820,7 +2834,7 @@ msgstr "집중 모드"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr "집중 모드 토글."
+msgstr "집중 모드를 토글합니다."
#: editor/editor_node.cpp
msgid "Add a new scene."
@@ -2946,9 +2960,8 @@ msgid "Orphan Resource Explorer..."
msgstr "미사용 리소스 탐색기..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "프로젝트 이름 바꾸기"
+msgstr "현재 프로젝트 새로고침"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -2972,15 +2985,15 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
-"이 옵션이 활성화 된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 "
+"이 옵션이 활성화된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 "
"할 수 있도록이 컴퓨터의 IP에 연결을 시도합니다.\n"
"이 옵션은 원격 디버깅 (일반적으로 모바일 기기 사용)에 사용하기 위한 것입니"
"다.\n"
-"GDScript 디버거를 로컬에서 사용하기 위해 활성화 할 필요는 없습니다."
+"GDScript 디버거를 로컬에서 사용하기 위해 활성화할 필요는 없습니다."
#: editor/editor_node.cpp
msgid "Small Deploy with Network Filesystem"
-msgstr "네트워크 파일 시스템을 사용하여 작게 배포"
+msgstr "네트워크 파일시스템을 사용하여 작게 배포"
#: editor/editor_node.cpp
msgid ""
@@ -2993,21 +3006,21 @@ msgid ""
msgstr ""
"이 옵션을 활성화하고 Android 용 원 클릭 배포를 사용하면 프로젝트 데이터없이 "
"실행 파일만 내 보냅니다.\n"
-"파일 시스템은 네트워크를 통해 편집기에 의해 프로젝트에서 제공됩니다.\n"
-"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정"
-"은 용량이 큰 게임의 테스트 속도를 향상시킵니다."
+"파일시스템은 네트워크를 통해 에디터에 의해 프로젝트에서 제공됩니다.\n"
+"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 옵션"
+"은 애셋의 용량이 큰 프로젝트의 테스트 속도를 높입니다."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr "충돌 모양 보이기"
+msgstr "콜리전 모양 보이기"
#: editor/editor_node.cpp
msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
msgstr ""
-"이 설정을 켜면 프로젝트를 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast "
-"노드가 보이게 됩니다."
+"이 설정을 활성화하면 프로젝트를 실행하는 동안 (2D와 3D용) 콜리전 모양과 "
+"Raycast 노드가 보이게 됩니다."
#: editor/editor_node.cpp
msgid "Visible Navigation"
@@ -3018,8 +3031,8 @@ msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
msgstr ""
-"이 설정을 켜면,프로젝트를 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩"
-"니다."
+"이 설정이 활성화되면, 프로젝트를 실행하는 동안 네비게이션 메시와 폴리곤이 보"
+"이게 됩니다."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3032,9 +3045,9 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행중인 프로젝트에 반영됩"
-"니다.\n"
-"기기에서 원격으로 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 "
+"이 설정이 활성화되면, 에디터에서 씬을 수정하면 실행 중인 프로젝트에 반영됩니"
+"다.\n"
+"기기에서 원격으로 사용 중인 경우 네트워크 파일시스템 기능을 활성화하면 더욱 "
"효율적입니다."
#: editor/editor_node.cpp
@@ -3048,22 +3061,22 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"이 옵션이 활성화된 경우, 어떤 스크립트든지 저장되면 실행 중인 프로젝트를 다"
-"시 불러오게 됩니다.\n"
-"기기에서 원격으로 사용 중인 경우, 네트워크 파일 시스템 옵션이 활성화되어 있다"
-"면 더욱 효율적입니다."
+"이 옵션이 활성화되면, 어떤 스크립트든지 저장되면 실행 중인 프로젝트를 다시 불"
+"러오게 됩니다.\n"
+"기기에서 원격으로 사용 중이면, 네트워크 파일시스템 옵션이 활성화되어 있다면 "
+"더욱 효율적입니다."
#: editor/editor_node.cpp editor/script_create_dialog.cpp
msgid "Editor"
-msgstr "편집기"
+msgstr "에디터"
#: editor/editor_node.cpp
msgid "Editor Settings..."
-msgstr "편집기 설정..."
+msgstr "에디터 설정..."
#: editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "편집기 레이아웃"
+msgstr "에디터 레이아웃"
#: editor/editor_node.cpp
msgid "Take Screenshot"
@@ -3083,19 +3096,19 @@ msgstr "시스템 콘솔 토글"
#: editor/editor_node.cpp
msgid "Open Editor Data/Settings Folder"
-msgstr "편집기 데이터/설정 폴더 열기"
+msgstr "에디터 데이터/설정 폴더 열기"
#: editor/editor_node.cpp
msgid "Open Editor Data Folder"
-msgstr "편집기 데이터 폴더 열기"
+msgstr "에디터 데이터 폴더 열기"
#: editor/editor_node.cpp
msgid "Open Editor Settings Folder"
-msgstr "편집기 설정 폴더 열기"
+msgstr "에디터 설정 폴더 열기"
#: editor/editor_node.cpp
msgid "Manage Editor Features..."
-msgstr "편집기 기능 관리..."
+msgstr "에디터 기능 관리..."
#: editor/editor_node.cpp
msgid "Manage Export Templates..."
@@ -3107,20 +3120,19 @@ msgstr "도움말"
#: editor/editor_node.cpp
msgid "Online Documentation"
-msgstr "온라인 설명문서"
+msgstr "온라인 문서"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "질문과 답변"
#: editor/editor_node.cpp
msgid "Report a Bug"
msgstr "버그 보고"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "값 설정"
+msgstr "기능 제안"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3131,9 +3143,8 @@ msgid "Community"
msgstr "커뮤니티"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "정보"
+msgstr "Godot 정보"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3177,7 +3188,7 @@ msgstr "커스텀 씬 실행"
#: editor/editor_node.cpp
msgid "Changing the video driver requires restarting the editor."
-msgstr "비디오 드라이버를 변경하려면 편집기를 다시 껐다 켜야 합니다."
+msgstr "비디오 드라이버를 변경하려면 에디터를 다시 시작해야 합니다."
#: editor/editor_node.cpp editor/project_settings_editor.cpp
#: editor/settings_config_dialog.cpp
@@ -3198,7 +3209,7 @@ msgstr "업데이트 스피너 숨기기"
#: editor/editor_node.cpp
msgid "FileSystem"
-msgstr "파일 시스템"
+msgstr "파일시스템"
#: editor/editor_node.cpp
msgid "Inspector"
@@ -3218,14 +3229,13 @@ msgstr "저장하지 않음"
#: editor/editor_node.cpp
msgid "Android build template is missing, please install relevant templates."
-msgstr "Android 빌드 템플릿이 없습니다, 관련 템플릿을 설치해주세요."
+msgstr "Android 빌드 템플릿이 누락되어 있습니다, 관련 템플릿을 설치해주세요."
#: editor/editor_node.cpp
msgid "Manage Templates"
msgstr "템플릿 관리"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "파일에서 설치"
@@ -3248,7 +3258,7 @@ msgstr ""
"그런 다음 수정 사항을 적용하고 맞춤 APK를 만들어 내보낼 수 있습니다 (모듈 추"
"가, AndroidManifest.xml 바꾸기 등).\n"
"미리 빌드된 APK를 사용하는 대신 맞춤 빌드를 만들려면, Android 내보내기 프리셋"
-"에서 \"맞춤 빌드 사용\" 설정을 켜 놓아야 합니다."
+"에서 \"맞춤 빌드 사용\" 설정을 활성화해야 합니다."
#: editor/editor_node.cpp
msgid ""
@@ -3258,7 +3268,8 @@ msgid ""
"operation again."
msgstr ""
"Android 빌드 템플릿이 이미 이 프로젝트에 설치했고, 덮어 쓸 수 없습니다.\n"
-"이 명령을 다시 실행 전에 \"res://android/build\" 디렉토리를 삭제하세요."
+"이 명령을 다시 실행하기 전에 \"res://android/build\" 디렉토리를 직접 제거하세"
+"요."
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -3277,6 +3288,11 @@ msgid "Merge With Existing"
msgstr "기존의 것과 병합"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "애니메이션 변형 바꾸기"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "스크립트 열기 & 실행"
@@ -3311,21 +3327,20 @@ msgid "Select"
msgstr "선택"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "현재 폴더 선택"
+msgstr "현재 선택"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr "2D 편집기 열기"
+msgstr "2D 에디터 열기"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr "3D 편집기 열기"
+msgstr "3D 에디터 열기"
#: editor/editor_node.cpp
msgid "Open Script Editor"
-msgstr "스크립트 편집기 열기"
+msgstr "스크립트 에디터 열기"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
@@ -3333,11 +3348,11 @@ msgstr "애셋 라이브러리 열기"
#: editor/editor_node.cpp
msgid "Open the next Editor"
-msgstr "다음 편집기 열기"
+msgstr "다음 에디터 열기"
#: editor/editor_node.cpp
msgid "Open the previous Editor"
-msgstr "이전 편집기 열기"
+msgstr "이전 에디터 열기"
#: editor/editor_node.h
msgid "Warning!"
@@ -3348,9 +3363,8 @@ msgid "No sub-resources found."
msgstr "하위 리소스를 찾을 수 없습니다."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "하위 리소스를 찾을 수 없습니다."
+msgstr "하위 리소스의 목록을 엽니다."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3362,7 +3376,7 @@ msgstr "썸네일..."
#: editor/editor_plugin_settings.cpp
msgid "Main Script:"
-msgstr "기본 스크립트:"
+msgstr "주 스크립트:"
#: editor/editor_plugin_settings.cpp
msgid "Edit Plugin"
@@ -3381,7 +3395,6 @@ msgid "Version"
msgstr "버전"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
msgstr "저자"
@@ -3396,14 +3409,12 @@ msgid "Measure:"
msgstr "측정:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "프레임 시간 (초)"
+msgstr "프레임 시간 (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "평균 시간 (초)"
+msgstr "평균 시간 (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3415,11 +3426,11 @@ msgstr "물리 프레임 %"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr "포함"
+msgstr "포괄적"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr "셀프"
+msgstr "자체"
#: editor/editor_profiler.cpp
msgid ""
@@ -3430,6 +3441,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"포괄적: 이 함수에 의해 호출된 다른 함수로부터 시간을 포함합니다.\n"
+"이를 사용하여 병목 현상을 찾아냅니다.\n"
+"\n"
+"자체: 해당 함수에 의해 호출된 다른 함수에서가 아닌, 함수 자체에서 보낸 시간"
+"만 계산합니다.\n"
+"이를 사용하여 최적화할 개별 함수를 찾습니다."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3510,7 +3527,7 @@ msgstr "페이지: "
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Item"
-msgstr "항목 삭제"
+msgstr "항목 제거"
#: editor/editor_properties_array_dict.cpp
msgid "New Key:"
@@ -3528,7 +3545,11 @@ msgstr "키/값 쌍 추가"
msgid ""
"The selected resource (%s) does not match any type expected for this "
"property (%s)."
-msgstr "선택한 리소스 (%s)가 이 속성 (%s)에 적합한 모든 유형에 맞지 않습니다."
+msgstr "선택한 리소스(%s)가 이 속성(%s)에 적합한 모든 유형에 맞지 않습니다."
+
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -3549,7 +3570,6 @@ msgid "Paste"
msgstr "붙여넣기"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
msgstr "%s(으)로 변환"
@@ -3573,7 +3593,7 @@ msgid ""
msgstr ""
"이 플랫폼을 위한 실행할 수 있는 내보내기 프리셋이 없습니다.\n"
"내보내기 메뉴에서 실행할 수 있는 프리셋을 추가하거나 기존 프리셋을 실행할 수 "
-"있도록 지정해주세요."
+"있도록 정의해주세요."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -3600,10 +3620,8 @@ msgid "Did you forget the '_run' method?"
msgstr "'_run' 메서드를 잊었나요?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
-msgstr ""
-"Ctrl을 눌러 정수로 반올림합니다. Shift를 눌러 좀 더 정밀하게 조작합니다."
+msgstr "%s를 눌러 정수로 반올림합니다. Shift를 눌러 좀 더 정밀하게 조작합니다."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3623,32 +3641,29 @@ msgstr "노드에서 가져오기:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "이 템플릿을 포함하는 폴더를 엽니다."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
msgstr "이 템플릿을 제거합니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "'%s' 파일이 없습니다."
+msgstr "사용 가능한 미러가 없습니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "미러를 검색 중입니다. 기다려주세요..."
+msgstr "미러 목록을 검색하는 중..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "다운로드를 시작하는 중..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
msgstr "URL 요청 중 오류:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
msgstr "미러에 연결 중..."
@@ -3683,7 +3698,7 @@ msgstr "다운로드를 완료하여 템플릿을 압축 해제 중..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
-msgstr "임시 파일을 삭제할 수 없음:"
+msgstr "임시 파일을 제거할 수 없음:"
#: editor/export_template_manager.cpp
msgid ""
@@ -3698,7 +3713,6 @@ msgid "Error getting the list of mirrors."
msgstr "미러 목록을 가져오는 중 오류."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr "미러 목록의 JSON 구문 분석 중 오류. 이 문제를 신고해주세요!"
@@ -3757,24 +3771,20 @@ msgid "SSL Handshake Error"
msgstr "SSL 핸드셰이크 오류"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다."
+msgstr "내보내기 템플릿 파일을 열 수 없습니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "템플릿 속의 version.txt가 잘못된 형식임: %s."
+msgstr "내보내기 템플릿 파일 안의 version.txt가 잘못된 형식임: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "템플릿에 version.txt를 찾을 수 없습니다."
+msgstr "내보내기 템플릿 파일 안에 version.txt를 찾을 수 없습니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "템플릿의 경로를 만드는 중 오류:"
+msgstr "템플릿을 압축 풀기 위한 경로를 만드는 중 오류:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3785,9 +3795,8 @@ msgid "Importing:"
msgstr "가져오는 중:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "템플릿 버전 '%s'을(를) 삭제할까요?"
+msgstr "버전 '%s'의 템플릿을 제거하시겠습니까?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3804,19 +3813,19 @@ msgstr "현재 버전:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
msgstr ""
+"내보내기 템플릿이 누락되어 있습니다. 다운로드하거나 파일에서 설치하세요."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "내보내기 템플릿이 설치되어 사용될 준비가 되었습니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "파일 열기"
+msgstr "폴더 열기"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "현재 버전을 위한 설치된 템플릿을 포함하는 폴더를 엽니다."
#: editor/export_template_manager.cpp
msgid "Uninstall"
@@ -3827,36 +3836,33 @@ msgid "Uninstall templates for the current version."
msgstr "현재 버전을 위한 템플릿을 제거합니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "다음 위치에서 다운로드:"
+msgstr "다음으로부터 다운로드:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "브라우저에서 실행"
+msgstr "웹 브라우저에서 열기"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "복사 오류"
+msgstr "미러 URL 복사"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "다운로드 및 설치"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"최상의 가능한 미러에서 현재 버전을 위한 템플릿을 다운로드하고 설치합니다."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
msgstr "공식 내보내기 템플릿은 개발 빌드에서는 이용할 수 없습니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
msgstr "파일에서 설치"
@@ -3870,14 +3876,12 @@ msgid "Cancel"
msgstr "취소"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다."
+msgstr "템플릿의 다운로드를 취소합니다."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "설치된 버전:"
+msgstr "다른 설치된 버전:"
#: editor/export_template_manager.cpp
msgid "Uninstall Template"
@@ -3896,6 +3900,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"템플릿이 다운로드를 계속할 것입니다.\n"
+"완료되면 에디터가 짧게 멈추는 현상을 겪을 수 있습니다."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -3911,7 +3917,7 @@ msgstr ""
msgid ""
"Importing has been disabled for this file, so it can't be opened for editing."
msgstr ""
-"이 파일에 대해 가져 오기가 비활성화되었으며 편집을 위해 열 수 없습니다."
+"이 파일에 대해 가져오기가 비활성화되었으며, 편집을 위해 열 수 없습니다."
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
@@ -3998,11 +4004,11 @@ msgstr "인스턴스하기"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
-msgstr "즐겨찾기로 추가"
+msgstr "즐겨찾기에 추가"
#: editor/filesystem_dock.cpp
msgid "Remove from Favorites"
-msgstr "즐겨찾기에서 삭제"
+msgstr "즐겨찾기에서 제거"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies..."
@@ -4041,35 +4047,32 @@ msgid "Collapse All"
msgstr "모두 접기"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "파일 검색"
+msgstr "파일 정렬"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "이름순 정렬 (오름차순)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "이름순 정렬 (내림차순)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "유형별 정렬 (오름차순)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "유형별 정렬 (내림차순)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "마지막으로 수정됨"
+msgstr "마지막으로 수정된 순서로 정렬"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "마지막으로 수정됨"
+msgstr "처음으로 수정된 순서로 정렬"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4081,7 +4084,7 @@ msgstr "이름 바꾸기..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "검색창에 초점 맞추기"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4093,7 +4096,7 @@ msgstr "다음 폴더/파일"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "파일 시스템 다시 스캔"
+msgstr "파일시스템 다시 스캔"
#: editor/filesystem_dock.cpp
msgid "Toggle Split Mode"
@@ -4155,8 +4158,8 @@ msgid ""
"Include the files with the following extensions. Add or remove them in "
"ProjectSettings."
msgstr ""
-"해당 확장자 이름을 갖는 파일이 있습니다. 프로젝트 설정에 파일을 추가하거나 삭"
-"제하세요."
+"해당 확장자 이름을 갖는 파일이 포함되어 있습니다. 프로젝트 설정에 파일을 추가"
+"하거나 제거하세요."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -4201,7 +4204,7 @@ msgstr "그룹에 추가"
#: editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr "그룹에서 삭제"
+msgstr "그룹에서 제거"
#: editor/groups_editor.cpp
msgid "Group name already exists."
@@ -4238,11 +4241,11 @@ msgstr "그룹에 속한 노드"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
-msgstr "빈 그룹은 자동으로 삭제됩니다."
+msgstr "빈 그룹은 자동으로 제거됩니다."
#: editor/groups_editor.cpp
msgid "Group Editor"
-msgstr "그룹 편집기"
+msgstr "그룹 에디터"
#: editor/groups_editor.cpp
msgid "Manage Groups"
@@ -4262,15 +4265,15 @@ msgstr "머티리얼을 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr "객체를 분리해서 가져오기"
+msgstr "오브젝트를 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr "객체와 머티리얼을 분리해서 가져오기"
+msgstr "오브젝트와 머티리얼을 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr "객체와 애니메이션을 분리해서 가져오기"
+msgstr "오브젝트와 애니메이션을 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
@@ -4278,7 +4281,7 @@ msgstr "머티리얼과 애니메이션을 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "객체, 머티리얼, 애니메이션을 분리해서 가져오기"
+msgstr "오브젝트, 머티리얼, 애니메이션을 분리해서 가져오기"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
@@ -4323,7 +4326,7 @@ msgstr "후 가져오기 스크립트 실행 중 오류:"
#: editor/import/resource_importer_scene.cpp
msgid "Did you return a Node-derived object in the `post_import()` method?"
-msgstr "`post_import()` 메소드에서 Node에서 상속받은 객체를 반환했습니까?"
+msgstr "`post_import()` 메소드에서 Node에서 상속받은 오브젝트를 반환했습니까?"
#: editor/import/resource_importer_scene.cpp
msgid "Saving..."
@@ -4339,7 +4342,7 @@ msgstr "임포터:"
#: editor/import_defaults_editor.cpp
msgid "Reset to Defaults"
-msgstr "기본값으로 재설정"
+msgstr "디폴트로 재설정"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
@@ -4351,11 +4354,11 @@ msgstr "파일 %d개"
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr "'%s'을(를) 기본으로 설정"
+msgstr "'%s'을(를) 디폴트으로 설정"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr "'%s'을(를) 기본에서 지우기"
+msgstr "'%s'을(를) 디폴트에서 지우기"
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4375,7 +4378,7 @@ msgstr "씬 저장, 다시 가져오기 및 다시 시작"
#: editor/import_dock.cpp
msgid "Changing the type of an imported file requires editor restart."
-msgstr "가져온 파일의 유형을 바꾸려면 편집기를 다시 켜아 합니다."
+msgstr "가져온 파일의 유형을 바꾸려면 에디터를 다시 시작해야 합니다."
#: editor/import_dock.cpp
msgid ""
@@ -4389,14 +4392,12 @@ msgid "Failed to load resource."
msgstr "리소스 불러오기에 실패했습니다."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "속성"
+msgstr "속성 복사"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "속성"
+msgstr "속성 붙여넣기"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4425,47 +4426,44 @@ msgid "Extra resource options."
msgstr "별도의 리소스 옵션."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "리소스 클립보드 편집"
+msgstr "클립보드에서 리소스 편집"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "리소스 복사"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "내장으로 만들기"
+msgstr "리소스를 내장으로 만들기"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
-msgstr "기록상 이전에 편집했던 객체로 이동합니다."
+msgstr "기록상 이전에 편집했던 오브젝트로 이동합니다."
#: editor/inspector_dock.cpp
msgid "Go to the next edited object in history."
-msgstr "기록상 다음에 편집했던 객체로 이동합니다."
+msgstr "기록상 다음에 편집했던 오브젝트로 이동합니다."
#: editor/inspector_dock.cpp
msgid "History of recently edited objects."
-msgstr "최근에 편집한 객체 기록입니다."
+msgstr "최근에 편집한 오브젝트 기록입니다."
#: editor/inspector_dock.cpp
msgid "Open documentation for this object."
-msgstr "이 객체를 위한 설명문서를 엽니다."
+msgstr "이 오브젝트를 위한 문서를 엽니다."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
-msgstr "설명문서 열기"
+msgstr "문서 열기"
#: editor/inspector_dock.cpp
msgid "Filter properties"
msgstr "필터 속성"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "객체 속성."
+msgstr "오브젝트 속성을 관리합니다."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4477,7 +4475,7 @@ msgstr "다중 노드 설정"
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
-msgstr "시그널과 그룹을 편집할 노드 하나를 선택하세요."
+msgstr "시그널과 그룹을 편집할 단일 노드를 선택하세요."
#: editor/plugin_config_dialog.cpp
msgid "Edit a Plugin"
@@ -4552,11 +4550,11 @@ msgstr "점 삽입"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Edit Polygon (Remove Point)"
-msgstr "폴리곤 편집 (점 삭제)"
+msgstr "폴리곤 편집 (점 제거)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Polygon And Point"
-msgstr "폴리곤과 점 삭제"
+msgstr "폴리곤과 점 제거"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4604,7 +4602,7 @@ msgstr "애니메이션 점 추가"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Remove BlendSpace1D Point"
-msgstr "BlendSpace1D 점 삭제"
+msgstr "BlendSpace1D 점 제거"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Move BlendSpace1D Node Point"
@@ -4618,8 +4616,9 @@ msgid ""
"AnimationTree is inactive.\n"
"Activate to enable playback, check node warnings if activation fails."
msgstr ""
-"AnimationTree가 꺼져 있습니다.\n"
-"재생하려면 AnimationTree를 켜고, 실행에 실패하면 노드 경고를 확인하세요."
+"AnimationTree가 비활성 상태입니다.\n"
+"재생을 활성화하려면 AnimationTree를 활성화하고, 활성화에 실패하면 노드 경고"
+"를 확인하세요."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4634,7 +4633,7 @@ msgstr "점을 선택하고 이동합니다. 우클릭으로 점을 만드세요
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp
msgid "Enable snap and show grid."
-msgstr "스냅을 켜고 격자를 보이게 합니다."
+msgstr "스냅을 활성화하고 격자를 보이게 합니다."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4645,7 +4644,7 @@ msgstr "점"
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Open Editor"
-msgstr "편집기 열기"
+msgstr "에디터 열기"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4672,11 +4671,11 @@ msgstr "BlendSpace2D 라벨 바꾸기"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Remove BlendSpace2D Point"
-msgstr "BlendSpace2D 점 삭제"
+msgstr "BlendSpace2D 점 제거"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Remove BlendSpace2D Triangle"
-msgstr "BlendSpace2D 삼각형 삭제"
+msgstr "BlendSpace2D 삼각형 제거"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "BlendSpace2D does not belong to an AnimationTree node."
@@ -4813,7 +4812,7 @@ msgstr "필터 트랙 편집:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Enable Filtering"
-msgstr "필터 켜기"
+msgstr "필터 활성화"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
@@ -4839,7 +4838,7 @@ msgstr "애니메이션을 삭제할까요?"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr "애니메이션 삭제"
+msgstr "애니메이션 제거"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Invalid animation name!"
@@ -4916,7 +4915,7 @@ msgstr "애니메이션 위치 (초)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr "노드의 애니메이션 재생 길이를 전체적으로 조절합니다."
+msgstr "노드의 애니메이션 재생 스케일를 전체적으로 조절합니다."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -4949,7 +4948,7 @@ msgstr "불러올 시 자동으로 재생"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
-msgstr "어니언 스키닝 켜기"
+msgstr "어니언 스키닝 활성화"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Onion Skinning Options"
@@ -5073,11 +5072,11 @@ msgstr "이 경로에 설정한 재생 리소스가 없음: %s."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
-msgstr "노드 삭제됨"
+msgstr "노드 제거됨"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition Removed"
-msgstr "전환 삭제됨"
+msgstr "전환 제거됨"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set Start Node (Autoplay)"
@@ -5103,7 +5102,7 @@ msgstr "노드를 연결합니다."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Remove selected node or transition."
-msgstr "선택한 노드나 전환을 삭제합니다."
+msgstr "선택한 노드나 전환을 제거합니다."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Toggle autoplay this animation on start, restart or seek to zero."
@@ -5134,7 +5133,7 @@ msgstr "새 이름:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr "크기:"
+msgstr "스케일:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Fade In (s):"
@@ -5241,7 +5240,7 @@ msgstr "혼합4 노드"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr "시간 크기 조절 노드"
+msgstr "시간 스케일 노드"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeSeek Node"
@@ -5265,7 +5264,7 @@ msgstr "필터..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
-msgstr "내용:"
+msgstr "콘텐츠:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
@@ -5437,11 +5436,11 @@ msgstr "모두"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "검색 템플릿, 프로젝트, 및 데모"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "애셋 검색 (템플릿, 프로젝트, 및 데모 제외)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5473,7 +5472,7 @@ msgstr "공식"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr "시험"
+msgstr "테스트"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Loading..."
@@ -5485,7 +5484,7 @@ msgstr "애셋 ZIP 파일"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "오디오 미리 보기 재생/일시 정지"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5496,13 +5495,12 @@ msgstr ""
"당신의 씬을 저장하고 다시 시도하세요."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"라이트맵을 구울 메시가 없습니다. 메시가 UV2 채널을 갖고 있고 'Bake Light' 플"
-"래그가 켜져 있는지 확인해주세요."
+"구울 메시가 없습니다. UV2 채널을 포함하고 있고 'Use In Baked Light' 및 "
+"'Generate Lightmap' 플래그가 켜져 있는지 확인해주세요."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5525,7 +5523,7 @@ msgstr ""
msgid ""
"Godot editor was built without ray tracing support, lightmaps can't be baked."
msgstr ""
-"Godot 편집기는 레이 트레이싱 지원 없이 빌드되었으며 라이트맵은 구울 수 없습니"
+"Godot 에디터는 레이 트레이싱 지원 없이 빌드되었으며 라이트맵은 구울 수 없습니"
"다."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
@@ -5571,7 +5569,7 @@ msgstr "회전 단계:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Step:"
-msgstr "크기 조절 단계:"
+msgstr "스케일 단계:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Vertical Guide"
@@ -5583,7 +5581,7 @@ msgstr "수직 가이드 만들기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Remove Vertical Guide"
-msgstr "수직 가이드 삭제"
+msgstr "수직 가이드 제거"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Horizontal Guide"
@@ -5595,7 +5593,7 @@ msgstr "수평 가이드 만들기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Remove Horizontal Guide"
-msgstr "수평 가이드 삭제"
+msgstr "수평 가이드 제거"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Horizontal and Vertical Guides"
@@ -5619,7 +5617,7 @@ msgstr "CanvasItem \"%s\" 앵커 이동"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr "Node2D \"%s\"를 (%s, %s)로 크기 조절"
+msgstr "Node2D \"%s\"를 (%s, %s)로 스케일 조절"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
@@ -5627,11 +5625,11 @@ msgstr "컨트롤 \"%s\"를 (%d, %d)로 크기 조절"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale %d CanvasItems"
-msgstr "CanvasItem %d개 크기 조절"
+msgstr "CanvasItem %d개 스케일 조절"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "CanvasItem \"%s\"를 (%s, %s)로 크기 조절"
+msgstr "CanvasItem \"%s\"를 (%s, %s)로 스케일 조절"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move %d CanvasItems"
@@ -5642,10 +5640,22 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem \"%s\"를 (%d, %d)로 이동"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "선택 항목 잠그기"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "그룹"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
-msgstr "컨테이너의 자식은 부모로 인해 재정의된 앵커와 여백 값을 가집니다."
+msgstr "컨테이너의 자손은 부모로 인해 재정의된 앵커와 여백 값을 가집니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Presets for the anchors and margins values of a Control node."
@@ -5739,13 +5749,12 @@ msgstr "앵커 바꾸기"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"게임 카메라 다시 정의\n"
-"편집기 뷰포트 카메라로 게임 카메라를 다시 정의합니다."
+"프로젝트 카메라 재정의\n"
+"실행 중인 프로젝트의 카메라를 에디터 뷰포트 카메라로 재정의합니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5754,6 +5763,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"프로젝트 카메라 재정의\n"
+"실행 중인 프로젝트 인스턴스가 없습니다. 이 기능을 사용하려면 에디터에서 프로"
+"젝트를 실행하세요."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5803,14 +5815,14 @@ msgstr "IK 체인 지우기"
msgid ""
"Warning: Children of a container get their position and size determined only "
"by their parent."
-msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결정됩니다."
+msgstr "경고: 컨테이너의 자손 위치와 크기는 부모에 의해 결정됩니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Reset"
-msgstr "줌 초기화"
+msgstr "줌 재설정"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5838,7 +5850,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "우클릭: 클릭한 위치에 노드를 추가합니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5853,7 +5865,7 @@ msgstr "회전 모드"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode"
-msgstr "크기 조절 모드"
+msgstr "스케일 모드"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5861,12 +5873,12 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
-"클릭한 위치에 있는 모든 객체 목록을 보여줘요\n"
+"클릭한 위치에 있는 모든 오브젝트 목록을 보여줍니다\n"
"(선택 모드에서 Alt+우클릭과 같음)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr "클릭으로 객체의 회전 피벗을 바꿉니다."
+msgstr "클릭으로 오브젝트의 회전 피벗을 바꿉니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
@@ -5902,7 +5914,7 @@ msgstr "회전 스냅 사용"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Scale Snap"
-msgstr "크기 조절 스냅 사용"
+msgstr "스케일 스냅 사용"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -5948,22 +5960,22 @@ msgstr "가이드에 스냅"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "선택한 객체를 그 자리에 잠가요 (움직일 수 없습니다)."
+msgstr "선택된 오브젝트를 그 자리에 잠급니다 (움직일 수 없습니다)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr "선택한 객체를 잠금에서 풀 (움직일 수 있습니다)."
+msgstr "선택된 오브젝트를 잠금에서 풉니다 (움직일 수 있습니다)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr "객체의 자식을 선택하지 않도록 합니다."
+msgstr "오브젝트의 자손을 선택하지 않도록 합니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr "객체의 자식을 선택할 수 있도록 합니다."
+msgstr "오브젝트의 자손을 선택할 수 있도록 복원합니다."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -6024,7 +6036,7 @@ msgstr "프레임 선택"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
-msgstr "캔버스 크기 조절 미리 보기"
+msgstr "캔버스 스케일 미리 보기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Translation mask for inserting keys."
@@ -6036,7 +6048,7 @@ msgstr "키를 삽입하기 위한 회전 마스크."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale mask for inserting keys."
-msgstr "키를 삽입하기 위한 크기 조절 마스크."
+msgstr "키를 삽입하기 위한 스케일 마스크."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert keys (based on mask)."
@@ -6049,8 +6061,8 @@ msgid ""
"Keys are only added to existing tracks, no new tracks will be created.\n"
"Keys must be inserted manually for the first time."
msgstr ""
-"객체를 전환, 회전 또는 크기 조절할 때마다 자동으로 키를 삽입합니다 (마스크 기"
-"준).\n"
+"오브젝트를 전환, 회전 또는 스케일을 조절할 때마다 자동으로 키를 삽입합니다 "
+"(마스크 기준).\n"
"키는 기존 트랙에만 추가되고, 새 트랙을 추가하진 않습니다.\n"
"처음에는 수동으로 키를 삽입해야 합니다."
@@ -6075,14 +6087,12 @@ msgid "Clear Pose"
msgstr "포즈 지우기"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "노드 추가"
+msgstr "여기에 노드 추가"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "씬 인스턴스화"
+msgstr "여기에 씬 인스턴스화"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6098,49 +6108,43 @@ msgstr "팬 보기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "3.125%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "6.25%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "12.5%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "줌 아웃"
+msgstr "25%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "줌 아웃"
+msgstr "50%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "줌 아웃"
+msgstr "100%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "줌 아웃"
+msgstr "200%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "줌 아웃"
+msgstr "400%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "줌 아웃"
+msgstr "800%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "1600%로 줌"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6166,14 +6170,14 @@ msgstr "'%s'에서 씬 인스턴스 중 오류"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Default Type"
-msgstr "기본 유형 바꾸기"
+msgstr "디폴트 유형 바꾸기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
-"드래그 & 드롭 + Shift : 형제 노드로 추가\n"
+"드래그 & 드롭 + Shift : 동기 노드로 추가\n"
"드래그 & 드롭 + Alt : 노드 유형 바꾸기"
#: editor/plugins/collision_polygon_editor_plugin.cpp
@@ -6186,7 +6190,7 @@ msgstr "폴리곤 편집"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr "폴리곤 편집 (점 삭제)"
+msgstr "폴리곤 편집 (점 제거)"
#: editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
@@ -6252,7 +6256,7 @@ msgstr "방출 색상"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
-msgstr "CPU파티클"
+msgstr "CPUParticles"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -6302,7 +6306,7 @@ msgstr "점 추가"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Remove Point"
-msgstr "점 삭제"
+msgstr "점 제거"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Left Linear"
@@ -6318,7 +6322,7 @@ msgstr "프리셋 불러오기"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Remove Curve Point"
-msgstr "곡선 점 삭제"
+msgstr "곡선 점 제거"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
@@ -6350,7 +6354,7 @@ msgstr "항목"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item List Editor"
-msgstr "항목 목록 편집기"
+msgstr "항목 목록 에디터"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
@@ -6362,7 +6366,7 @@ msgstr "메시가 없습니다!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a Trimesh collision shape."
-msgstr "Trimesh 충돌 모양을 만들 수 없습니다."
+msgstr "Trimesh 콜리전 모양을 만들 수 없습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
@@ -6378,32 +6382,31 @@ msgstr "Trimesh Static Shape 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create a single convex collision shape for the scene root."
-msgstr "씬 루트에서 단일 convex 충돌 Shape를 만들 수 없습니다."
+msgstr "씬 루트에서 단일 컨벡스 콜리전 모양을 만들 수 없습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a single convex collision shape."
-msgstr "단일 convex 충돌 모양을 만들 수 없습니다."
+msgstr "단일 컨벡스 콜리전 모양을 만들 수 없습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "개별 Convex 모양 만들기"
+msgstr "단순 컨벡스 모양 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
-msgstr "개별 Convex 모양 만들기"
+msgstr "단일 컨벡스 모양 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create multiple convex collision shapes for the scene root."
-msgstr "씬 루트에 다중 convex 충돌 모양을 만들 수 없습니다."
+msgstr "씬 루트에 다중 컨벡스 콜리전 모양을 만들 수 없습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create any collision shapes."
-msgstr "충돌 모양을 만들 수 없습니다."
+msgstr "콜리전 모양을 만들 수 없습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Shapes"
-msgstr "다중 Convex Shape 만들기"
+msgstr "다중 컨벡스 모양 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
@@ -6431,7 +6434,7 @@ msgstr "MeshInstance에 메시가 없습니다!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr "메시에 윤곽을 만들 표면이 없습니다!"
+msgstr "메시에 윤곽선을 만들 표면이 없습니다!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
@@ -6439,11 +6442,11 @@ msgstr "메시 기본 유형이 PRIMITIVE_TRIANGLES이 아닙니다!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
-msgstr "윤곽을 만들 수 없습니다!"
+msgstr "윤곽선을 만들 수 없습니다!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline"
-msgstr "윤곽 만들기"
+msgstr "윤곽선 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh"
@@ -6459,38 +6462,37 @@ msgid ""
"automatically.\n"
"This is the most accurate (but slowest) option for collision detection."
msgstr ""
-"StaticBody를 하나 만들고 거기에 폴리곤 기반 충돌 모양을 하나 자동으로 만들어 "
-"붙입니다.\n"
-"이 방법은 가장 정확한 (하지만 가장 느린) 충돌 탐지 방법입니다."
+"StaticBody를 만들고 거기에 폴리곤 기반 콜리전 모양을 자동으로 만들어 붙입니"
+"다.\n"
+"이 방법은 가장 정확한 (하지만 가장 느린) 콜리전 탐지 방법입니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Collision Sibling"
-msgstr "Trimesh 충돌 형제 만들기"
+msgstr "Trimesh 콜리전 동기 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
"Creates a polygon-based collision shape.\n"
"This is the most accurate (but slowest) option for collision detection."
msgstr ""
-"폴리곤 기반 충돌 모양을 하나 만듭니다.\n"
-"이 방법은 가장 정확한 (하지만 가장 느린) 충돌 탐지 방법입니다."
+"폴리곤 기반 콜리전 모양을 만듭니다.\n"
+"이 방법은 가장 정확한 (하지만 가장 느린) 콜리전 탐지 방법입니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Collision Sibling"
-msgstr "단일 Convex 충돌 형제 만들기"
+msgstr "단일 컨벡스 콜리전 동기 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
"Creates a single convex collision shape.\n"
"This is the fastest (but least accurate) option for collision detection."
msgstr ""
-"convex 충돌 모양을 하나 만듭니다.\n"
-"이 방법은 가장 빠른 (하지만 덜 정확한) 충돌 탐지 방법입니다."
+"단일 컨벡스 콜리전 모양을 만듭니다.\n"
+"이 방법은 가장 빠른 (하지만 덜 정확한) 콜리전 감지 옵션입니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "단일 Convex 충돌 형제 만들기"
+msgstr "단순 컨벡스 콜리전 동기 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6498,24 +6500,27 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"단순 컨벡스 콜리전 모양을 만듭니다.\n"
+"단일 콜리전 모양과 비슷하지만, 경우에 따라 정확도를 희생시켜 지오메트리가 더 "
+"단순해지는 결과를 초래할 수 있습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
-msgstr "다중 Convex 충돌 형제 만들기"
+msgstr "다중 컨벡스 콜리전 동기 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
-"폴리곤 기반 충돌 모양을 하나 만듭니다.\n"
-"이 방법은 위 두 가지 옵션의 중간 정도 성능입니다."
+"폴리곤 기반 콜리전 모양을 만듭니다.\n"
+"이 방법은 단일 컨벡스 콜리전과 폴리곤 기반 콜리전 사이의 중간 정도 성능입니"
+"다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
-msgstr "윤곽 메시 만들기..."
+msgstr "윤곽선 메시 만들기..."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6524,7 +6529,8 @@ msgid ""
"This can be used instead of the SpatialMaterial Grow property when using "
"that property isn't possible."
msgstr ""
-"정적 외곽선 메시를 만듭니다. 외곽선 메시의 법선 벡터는 자동으로 반전됩니다.\n"
+"스태틱 윤곽선 메시를 만듭니다. 윤곽선 메시의 법선 벡터는 자동으로 반전됩니"
+"다.\n"
"SpatialMaterial의 Grow 속성을 사용할 수 없을 때 대신 사용할 수 있습니다."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6541,11 +6547,11 @@ msgstr "라이트맵/AO를 위한 UV2 펼치기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
-msgstr "윤곽 메시 만들기"
+msgstr "윤곽선 메시 만들기"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Outline Size:"
-msgstr "윤곽 크기:"
+msgstr "윤곽선 크기:"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Channel Debug"
@@ -6553,7 +6559,7 @@ msgstr "UV 채널 디버그"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr "%d개의 항목을 삭제할까요?"
+msgstr "항목 %d개를 제거하시겠습니까?"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid ""
@@ -6573,10 +6579,16 @@ msgstr "항목 추가"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr "선택한 항목 삭제"
+msgstr "선택한 항목 제거"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "씬에서 가져오기"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "씬에서 가져오기"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6615,7 +6627,7 @@ msgstr "표면 소스가 잘못되었습니다 (잘못된 경로)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no geometry)."
-msgstr "표면 소스가 잘못되었습니다 (형태 없음)."
+msgstr "표면 소스가 잘못되었습니다 (지오메트리 없음)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no faces)."
@@ -6631,7 +6643,7 @@ msgstr "대상 표면을 선택하세요:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
-msgstr "표면 만들기"
+msgstr "표면 채우기"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
@@ -6671,7 +6683,7 @@ msgstr "무작위 기울기:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Scale:"
-msgstr "무작위 크기:"
+msgstr "무작위 스케일:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
@@ -6685,7 +6697,7 @@ msgstr "내비게이션 폴리곤 만들기"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Convert to CPUParticles"
-msgstr "CPU파티클로 변환"
+msgstr "CPUParticles로 변환"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generating Visibility Rect"
@@ -6710,11 +6722,11 @@ msgstr "생성 시간 (초):"
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry's faces don't contain any area."
-msgstr "형태의 표면에 영역이 없습니다."
+msgstr "지오메트리의 면에 영역이 포함되지 않습니다."
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry doesn't contain any faces."
-msgstr "형태에 면이 없습니다."
+msgstr "지오메트리에 면이 포함되지 않습니다."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't inherit from Spatial."
@@ -6722,11 +6734,11 @@ msgstr "\"%s\"은(는) Spatial을 상속받지 않습니다."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain geometry."
-msgstr "\"%s\"에 형태가 없습니다."
+msgstr "\"%s\"에 지오메트리가 포함되지 않습니다."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain face geometry."
-msgstr "\"%s\"에 면 형태가 없습니다."
+msgstr "\"%s\"에 면 지오메트리가 포함되지 않습니다."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter"
@@ -6746,7 +6758,7 @@ msgstr "표면 점+노멀 (직접)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
-msgstr "부피"
+msgstr "볼륨"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Source: "
@@ -6766,15 +6778,15 @@ msgstr "가시성 AABB 만들기"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr "곡선에서 점 삭제"
+msgstr "곡선에서 점 제거"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
-msgstr "곡선의 아웃-컨트롤 삭제"
+msgstr "곡선의 아웃-컨트롤 제거"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove In-Control from Curve"
-msgstr "곡선의 인-컨트롤 삭제"
+msgstr "곡선의 인-컨트롤 제거"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6879,15 +6891,15 @@ msgstr "경로 가르기"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove Path Point"
-msgstr "경로 점 삭제"
+msgstr "경로 점 제거"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove Out-Control Point"
-msgstr "아웃-컨트롤 점 삭제"
+msgstr "아웃-컨트롤 점 제거"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove In-Control Point"
-msgstr "인-컨트롤 점 삭제"
+msgstr "인-컨트롤 점 제거"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
@@ -6935,7 +6947,7 @@ msgstr "내부 꼭짓점 만들기"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Internal Vertex"
-msgstr "내부 꼭짓점 삭제"
+msgstr "내부 꼭짓점 제거"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Invalid Polygon (need 3 different vertices)"
@@ -6947,7 +6959,7 @@ msgstr "맞춤 폴리곤 추가"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Custom Polygon"
-msgstr "맞춤 폴리곤 삭제"
+msgstr "맞춤 폴리곤 제거"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
@@ -6963,11 +6975,11 @@ msgstr "본 가중치 칠하기"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Open Polygon 2D UV editor."
-msgstr "폴리곤 2D UV 편집기 열기."
+msgstr "폴리곤 2D UV 에디터를 엽니다."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon 2D UV Editor"
-msgstr "폴리곤 2D UV 편집기"
+msgstr "폴리곤 2D UV 에디터"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "UV"
@@ -6999,7 +7011,7 @@ msgstr "Shift: 모두 이동"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift+Command: Scale"
-msgstr "Shift+Command: 크기 조절"
+msgstr "Shift+Command: 스케일 조절"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -7007,7 +7019,7 @@ msgstr "Ctrl: 회전"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift+Ctrl: Scale"
-msgstr "Shift+Ctrl: 크기 조절"
+msgstr "Shift+Ctrl: 스케일 조절"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Polygon"
@@ -7019,19 +7031,19 @@ msgstr "폴리곤 회전"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Scale Polygon"
-msgstr "폴리곤 크기 조절"
+msgstr "폴리곤 스케일 조절"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create a custom polygon. Enables custom polygon rendering."
-msgstr "맞춤 폴리곤을 만듭니다. 맞춤 폴리곤 렌더링을 켜세요."
+msgstr "맞춤 폴리곤을 만듭니다. 맞춤 폴리곤 렌더링을 활성화합니다."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"Remove a custom polygon. If none remain, custom polygon rendering is "
"disabled."
msgstr ""
-"맞춤 폴리곤을 삭제합니다. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링"
-"은 꺼집니다."
+"맞춤 폴리곤을 제거합니다. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링"
+"은 비활성화됩니다."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint weights with specified intensity."
@@ -7141,7 +7153,7 @@ msgstr "유형:"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Open in Editor"
-msgstr "편집기에서 열기"
+msgstr "에디터에서 열기"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Load Resource"
@@ -7152,22 +7164,30 @@ msgid "ResourcePreloader"
msgstr "리소스 프리로더"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "수평으로 뒤집기"
+msgstr "포털 뒤집기"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Room Generate Points"
-msgstr "방 생성한 점 개수"
+msgstr "룸 생성한 점 개수"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Generate Points"
msgstr "생성한 점 개수"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "수평으로 뒤집기"
+msgstr "포털 뒤집기"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "변형 지우기"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "노드 만들기"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7402,7 +7422,7 @@ msgstr "디버거 항상 열어놓기"
#: editor/plugins/script_editor_plugin.cpp
msgid "Debug with External Editor"
-msgstr "외부 편집기로 디버깅"
+msgstr "외부 에디터로 디버깅"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
@@ -7411,11 +7431,11 @@ msgstr "온라인 문서"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation."
-msgstr "Godot 온라인 설명문서를 엽니다."
+msgstr "Godot 온라인 문서를 엽니다."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
-msgstr "참조 설명문서를 검색합니다."
+msgstr "참조 문서를 검색합니다."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to previous edited document."
@@ -7465,7 +7485,7 @@ msgstr "Target(대상)"
msgid ""
"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."
msgstr ""
-"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결하지 않았습니"
+"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결되지 않았습니"
"다."
#: editor/plugins/script_text_editor.cpp
@@ -7482,7 +7502,7 @@ msgstr "함수로 이동"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr "파일 시스템의 리소스만 드롭할 수 있습니다."
+msgstr "파일시스템의 리소스만 드롭할 수 있습니다."
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -7616,7 +7636,7 @@ msgstr "이전 북마크로 이동"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Bookmarks"
-msgstr "모든 북마크 삭제"
+msgstr "모든 북마크 제거"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Function..."
@@ -7633,7 +7653,7 @@ msgstr "중단점 토글"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Breakpoints"
-msgstr "모든 중단점 삭제"
+msgstr "모든 중단점 제거"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Next Breakpoint"
@@ -7657,7 +7677,7 @@ msgstr "셰이더"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "This skeleton has no bones, create some children Bone2D nodes."
-msgstr "이 스켈레톤에는 본이 없습니다. Bone2D노드를 자식으로 만드세요."
+msgstr "이 스켈레톤에는 본이 없습니다. Bone2D노드를 자손으로 만드세요."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Create Rest Pose from Bones"
@@ -7672,12 +7692,14 @@ msgid "Skeleton2D"
msgstr "스켈레톤2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "(본의) 대기 자세 만들기"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "본을 대기 자세로 설정"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "본을 대기 자세로 설정"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "덮어 쓰기"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7697,11 +7719,76 @@ msgstr "IK 실행"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr "직교보기"
+msgstr "직교"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr "원근보기"
+msgstr "원근"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "원근"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "원근"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "원근"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "원근"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "직교"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "원근"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -7740,7 +7827,7 @@ msgstr "이동"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale"
-msgstr "크기"
+msgstr "스케일"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7756,7 +7843,7 @@ msgstr "%s도로 회전."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
-msgstr "키가 꺼져 있습니다 (키가 삽입되지 않습니다)."
+msgstr "키가 비활성화되어 있습니다 (키가 삽입되지 않습니다)."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
@@ -7764,11 +7851,11 @@ msgstr "애니메이션 키를 삽입했습니다."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Pitch:"
-msgstr "피치:"
+msgstr "Pitch:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Yaw:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Size:"
@@ -7776,7 +7863,7 @@ msgstr "크기:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn:"
-msgstr "그려진 객체:"
+msgstr "그려진 오브젝트:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Material Changes:"
@@ -7800,7 +7887,7 @@ msgstr "정점:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7811,42 +7898,22 @@ msgid "Bottom View."
msgstr "아랫면 보기."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "아랫면"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "왼쪽면 보기."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "왼쪽면"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "오른쪽면 보기."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "오른쪽면"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "정면 보기."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "정면"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "뒷면 보기."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "뒷면"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "변형을 뷰에 정렬"
@@ -7856,11 +7923,11 @@ msgstr "회전을 뷰에 정렬"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr "자식을 인스턴스할 부모가 없습니다."
+msgstr "자손을 인스턴스할 부모가 없습니다."
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
-msgstr "이 작업은 하나의 노드를 선택해야 합니다."
+msgstr "이 작업은 단일 노드가 선택되어야 합니다."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Auto Orthogonal Enabled"
@@ -7912,7 +7979,7 @@ msgstr "오디오 리스너"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Enable Doppler"
-msgstr "파동 왜곡 켜기"
+msgstr "파동 왜곡 활성화"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Cinematic Preview"
@@ -7955,9 +8022,8 @@ msgid "Freelook Slow Modifier"
msgstr "자유 시점 느린 수정자"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "카메라 크기 바꾸기"
+msgstr "카메라 미리 보기 토글"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -7966,20 +8032,19 @@ msgstr "뷰 회전 잠김"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
"To zoom further, change the camera's clipping planes (View -> Settings...)"
-msgstr "더욱 확대하려면, 카메라의 클립핑 평면을 변경하세요 (보기 -> 설정...)"
+msgstr "더욱 확대하려면, 카메라의 클리핑 평면을 바꾸세요 (보기 -> 설정...)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
"Note: The FPS value displayed is the editor's framerate.\n"
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
-"참고: FPS 값은 편집기의 프레임으로 표시됩니다.\n"
+"참고: FPS 값은 에디터의 프레임으로 표시됩니다.\n"
"이것이 게임 내 성능을 보장할 수 없습니다."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "%s(으)로 변환"
+msgstr "룸 변환"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8000,7 +8065,6 @@ msgstr ""
"반 열린 눈: 불투명한 표면에도 기즈모가 보입니다 (\"엑스레이\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "노드를 바닥에 스냅"
@@ -8018,7 +8082,7 @@ msgstr "스냅 사용"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "포털 컬링을 위한 룸을 변환합니다."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8071,7 +8135,7 @@ msgstr "변형"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Object to Floor"
-msgstr "개체를 바닥에 스냅"
+msgstr "오브젝트를 바닥에 스냅"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog..."
@@ -8114,9 +8178,13 @@ msgid "View Grid"
msgstr "격자 보기"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "뷰포트 설정"
+msgstr "포털 컬링 보기"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "포털 컬링 보기"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8137,7 +8205,7 @@ msgstr "회전 스냅 (도):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr "크기 스냅 (%):"
+msgstr "스케일 스냅 (%):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
@@ -8169,7 +8237,7 @@ msgstr "회전 (도):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
-msgstr "크기 (비율):"
+msgstr "스케일 (비율):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
@@ -8184,8 +8252,9 @@ msgid "Post"
msgstr "후"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "이름 없는 기즈모"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "이름 없는 프로젝트"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8229,7 +8298,7 @@ msgstr "애니메이션 프레임을 사용하는 스프라이트를 메시로
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't replace by mesh."
-msgstr "잘못된 형태. 메시로 대체할 수 없습니다."
+msgstr "잘못된 지오메트리. 메시로 대체할 수 없습니다."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Convert to Mesh2D"
@@ -8237,7 +8306,7 @@ msgstr "Mesh2D로 변환"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
-msgstr "잘못된 형태. 폴리곤을 만들 수 없습니다."
+msgstr "잘못된 지오메트리. 폴리곤을 만들 수 없습니다."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Convert to Polygon2D"
@@ -8245,19 +8314,19 @@ msgstr "Polygon2D로 변환"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create collision polygon."
-msgstr "잘못된 형태. 충돌 폴리곤을 만들 수 없습니다."
+msgstr "잘못된 지오메트리. 콜리전 폴리곤을 만들 수 없습니다."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create CollisionPolygon2D Sibling"
-msgstr "CollisionPolygon2D 노드 만들기"
+msgstr "CollisionPolygon2D 동기 만들기"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create light occluder."
-msgstr "잘못된 형태, 조명 어클루더를 만들 수 없습니다."
+msgstr "잘못된 지오메트리. 조명 어클루더를 만들 수 없습니다."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D Sibling"
-msgstr "LightOccluder2D 노드 만들기"
+msgstr "LightOccluder2D 동기 만들기"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite"
@@ -8436,24 +8505,20 @@ msgid "TextureRegion"
msgstr "텍스처 영역"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "색깔"
+msgstr "색상"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
msgstr "글꼴"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
msgstr "아이콘"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "스타일 박스"
+msgstr "스타일박스"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
@@ -8513,12 +8578,11 @@ msgstr "항목 {n}/{n} 가져오는 중"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Updating the editor"
-msgstr "편집기를 업데이트 중"
+msgstr "에디터를 업데이트 중"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "분석 중"
+msgstr "마무리 중"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter:"
@@ -8533,17 +8597,16 @@ msgid "Select by data type:"
msgstr "데이터 유형 별 선택:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "지우기 위한 분할 위치를 선택하기."
+msgstr "보이는 모든 색상 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "보이는 모든 색상 항목과 그 데이터를 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "보이는 모든 색상 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items."
@@ -8551,11 +8614,11 @@ msgstr "보이는 모든 상수 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "보이는 모든 상수 항목과 그 데이터를 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "보이는 모든 상수 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items."
@@ -8563,11 +8626,11 @@ msgstr "보이는 모든 글꼴 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "보이는 모든 글꼴 항목과 그 데이터를 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "보이는 모든 글꼴 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible icon items."
@@ -8575,7 +8638,7 @@ msgstr "보이는 모든 아이콘 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible icon items and their data."
-msgstr "보이는 모든 아이콘 항목과 그 항목의 데이터를 선택합니다."
+msgstr "보이는 모든 아이콘 항목과 그 데이터를 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible icon items."
@@ -8583,21 +8646,22 @@ msgstr "보이는 모든 아이콘 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "보이는 모든 스타일박스 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "보이는 모든 스타일박스 항목과 그 데이터를 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "보이는 모든 스타일박스 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"주의: 아이콘 데이터를 추가하면 테마 리소스의 크기가 상당히 커질 수 있습니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Collapse types."
@@ -8612,27 +8676,24 @@ msgid "Select all Theme items."
msgstr "모든 테마 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "점 선택"
+msgstr "데이터로 선택"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "항목 데이터가 있는 모든 테마 항목을 선택합니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "모두 선택"
+msgstr "모두 선택 해제"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "모든 테마 항목을 선택 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "씬 가져오기"
+msgstr "선택된 항목 가져오기"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8640,278 +8701,249 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
+"항목 가져오기 탭에 일부 항목이 선택되어 있습니다. 이 창을 닫으면 선택을 잃게 "
+"됩니다.\n"
+"무시하고 닫으시겠습니까?"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"테마의 항목을 편집하려면 목록에서 테마 유형을 선택하세요.\n"
+"맞춤 유형을 추가하거나 다른 테마에서 테마 항목으로 유형을 가져올 수 있습니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 색상 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "항목 삭제"
+msgstr "항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 상수 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 글꼴 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 아이콘 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 스타일박스 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"이 테마 유형은 비어 있습니다.\n"
+"직접 또는 다른 테마에서 가져와서 테마에 더 많은 항목을 추가하세요."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "클래스 항목 추가"
+msgstr "색상 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "클래스 항목 추가"
+msgstr "상수 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "항목 추가"
+msgstr "글꼴 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "항목 추가"
+msgstr "아이콘 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "모든 항목 추가"
+msgstr "스타일박스 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "클래스 항목 삭제"
+msgstr "색상 항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "클래스 항목 삭제"
+msgstr "상수 항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "노드 이름 바꾸기"
+msgstr "글꼴 항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "노드 이름 바꾸기"
+msgstr "아이콘 항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "선택한 항목 삭제"
+msgstr "스타일박스 항목 이름 바꾸기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "잘못된 파일. 오디오 버스 레이아웃이 아닙니다."
+msgstr "잘못된 파일, 테마 리소스가 아닙니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "잘못된 파일, 편집된 테마 리소스와 같습니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "템플릿 관리"
+msgstr "테마 항목 관리"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "편집할 수 있는 항목"
+msgstr "항목 편집"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
msgstr "유형:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "유형:"
+msgstr "유형 추가:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Item:"
msgstr "항목 추가:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "모든 항목 추가"
+msgstr "스타일박스 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Items:"
-msgstr "항목 삭제:"
+msgstr "항목 제거:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
-msgstr "클래스 항목 삭제"
+msgstr "클래스 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "클래스 항목 삭제"
+msgstr "맞춤 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
-msgstr "모든 항목 삭제"
+msgstr "모든 항목 제거"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "GUI 테마 항목"
+msgstr "테마 항목 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "노드 이름:"
+msgstr "이전 이름:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "테마 가져오기"
+msgstr "항목 가져오기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "기본"
+msgstr "디폴트 테마"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "테마 편집"
+msgstr "테마 에디터"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select Another Theme Resource:"
msgstr "다른 테마 리소스 선택:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "테마 가져오기"
+msgstr "다른 테마"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "애니메이션 트랙 이름 변경"
+msgstr "항목 이름 바꾸기 확인"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "일괄 이름 바꾸기"
+msgstr "항목 이름 바꾸기 취소"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "재정의"
+msgstr "항목 재정의"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "이 스타일박스를 주 스타일로 고정을 해제합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"스타일박스를 주 스타일로 고정합니다. 속성을 편집하면 이 유형의 다른 모든 스타"
+"일박스에서 같은 속성이 업데이트됩니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "유형"
+msgstr "유형 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "항목 추가"
+msgstr "항목 유형 추가"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Node Types:"
msgstr "노드 유형:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "기본값 불러오기"
+msgstr "디폴트 보이기"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
-msgstr ""
+msgstr "재정의된 항목 옆에 디폴트 유형 항목을 보여줍니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "재정의"
+msgstr "모두 재정의"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "모든 디폴트 유형 항목을 재정의합니다."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme:"
msgstr "테마:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "내보내기 템플릿 관리..."
+msgstr "항목 관리..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "테마 항목을 추가, 제거, 구성 및 가져옵니다."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "미리 보기"
+msgstr "미리 보기 추가"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "업데이트 미리 보기"
+msgstr "디폴트 미리 보기"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "소스 메시를 선택하세요:"
+msgstr "UI 씬을 선택하세요:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
"Toggle the control picker, allowing to visually select control types for "
"edit."
msgstr ""
+"컨트롤 선택기를 토글하여, 편집할 컨트롤 유형을 시각적으로 선택할 수 있게 합니"
+"다."
#: editor/plugins/theme_editor_preview.cpp
msgid "Toggle Button"
@@ -8919,7 +8951,7 @@ msgstr "토글 버튼"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled Button"
-msgstr "꺼진 버튼"
+msgstr "비활성화된 버튼"
#: editor/plugins/theme_editor_preview.cpp
msgid "Item"
@@ -8927,7 +8959,7 @@ msgstr "항목"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled Item"
-msgstr "꺼진 항목"
+msgstr "비활성화된 항목"
#: editor/plugins/theme_editor_preview.cpp
msgid "Check Item"
@@ -8971,7 +9003,7 @@ msgstr "많은"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled LineEdit"
-msgstr "꺼진 LineEdit"
+msgstr "비활성화된 LineEdit"
#: editor/plugins/theme_editor_preview.cpp
msgid "Tab 1"
@@ -8999,20 +9031,19 @@ msgstr "많은,옵션,갖춤"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
-msgstr ""
+msgstr "잘못된 경로, PackedScene 리소스가 이동되었거나 제거되었을 수 있습니다."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
-msgstr ""
+msgstr "잘못된 PackedScene 리소스, 루트에 컨트롤 노드가 있어야 합니다."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "잘못된 파일. 오디오 버스 레이아웃이 아닙니다."
+msgstr "잘못된 파일, PackedScene 리소스가 아닙니다."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "씬을 새로 고쳐 가장 실제 상태를 반영합니다."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -9057,11 +9088,11 @@ msgstr "행렬 맞바꾸기"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Disable Autotile"
-msgstr "오토타일 끄기"
+msgstr "오토타일 비활성화"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Enable Priority"
-msgstr "우선 순위 켜기"
+msgstr "우선 순위 활성화"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Filter tiles"
@@ -9121,7 +9152,7 @@ msgstr "TileSet에 텍스처를 추가합니다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove selected Texture from TileSet."
-msgstr "선택된 텍스처를 TileSet에서 삭제합니다."
+msgstr "선택된 텍스처를 TileSet에서 제거합니다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from Scene"
@@ -9165,7 +9196,7 @@ msgstr "영역"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Collision"
-msgstr "충돌"
+msgstr "콜리전"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Occlusion"
@@ -9197,7 +9228,7 @@ msgstr "영역 모드"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Collision Mode"
-msgstr "충돌 모드"
+msgstr "콜리전 모드"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Occlusion Mode"
@@ -9257,11 +9288,11 @@ msgstr "선택된 모양 삭제"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Keep polygon inside region Rect."
-msgstr "사각형 영역 내에 폴리곤을 유지합니다."
+msgstr "사각형 영역 안에 폴리곤을 유지합니다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Enable snap and show grid (configurable via the Inspector)."
-msgstr "스냅을 켜고 격자를 보이기 (인스펙터를 통해 설정함)."
+msgstr "스냅을 활성화하고 격자를 보여줍니다 (인스펙터를 통해 구성함)."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Display Tile Names (Hold Alt Key)"
@@ -9276,23 +9307,24 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove selected texture? This will remove all tiles which use it."
msgstr ""
-"선택한 텍스처를 삭제할까요? 이 텍스처를 사용하는 모든 타일도 삭제될 것입니다."
+"선택한 텍스처를 제거하시겠습니까? 이 텍스처를 사용하는 모든 타일도 제거됩니"
+"다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "You haven't selected a texture to remove."
-msgstr "삭제할 텍스처를 선택하지 않았습니다."
+msgstr "제거할 텍스처를 선택하지 않았습니다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from scene? This will overwrite all current tiles."
-msgstr "씬에서 만들까요? 모든 현재 파일을 덮어 씌울 것입니다."
+msgstr "씬에서 만드시겠습니까? 모든 현재 파일을 덮어 씌울 것입니다."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr "씬에서 병합할까요?"
+msgstr "씬에서 병합하시겠습니까?"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Texture"
-msgstr "텍스처 삭제"
+msgstr "텍스처 제거"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "%s file(s) were not added because was already on the list."
@@ -9378,7 +9410,7 @@ msgstr "타일 비트 마스크 편집"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Collision Polygon"
-msgstr "충돌 폴리곤 편집"
+msgstr "콜리전 폴리곤 편집"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Occlusion Polygon"
@@ -9402,23 +9434,23 @@ msgstr "오목한 폴리곤 만들기"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Make Polygon Convex"
-msgstr "볼록한 폴리곤 만들기"
+msgstr "폴리곤을 볼록하게 만들기"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Tile"
-msgstr "타일 삭제"
+msgstr "타일 제거"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Collision Polygon"
-msgstr "충돌 폴리곤 삭제"
+msgstr "콜리전 폴리곤 제거"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Occlusion Polygon"
-msgstr "어클루전 폴리곤 삭제"
+msgstr "어클루전 폴리곤 제거"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Navigation Polygon"
-msgstr "내비게이션 폴리곤 삭제"
+msgstr "내비게이션 폴리곤 제거"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Priority"
@@ -9438,7 +9470,7 @@ msgstr "오목하게 만들기"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create Collision Polygon"
-msgstr "내비게이션 충돌 폴리곤 만들기"
+msgstr "콜리전 폴리곤 만들기"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create Occlusion Polygon"
@@ -9558,11 +9590,11 @@ msgstr "샘플러"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
-msgstr "입력 포트 추가하기"
+msgstr "입력 포트 추가"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
-msgstr "출력 포트 추가하기"
+msgstr "출력 포트 추가"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port type"
@@ -9582,11 +9614,11 @@ msgstr "출력 포트 이름 바꾸기"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Remove input port"
-msgstr "입력 포트 삭제하기"
+msgstr "입력 포트 제거"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Remove output port"
-msgstr "출력 포트 삭제하기"
+msgstr "출력 포트 제거"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set expression"
@@ -9594,7 +9626,7 @@ msgstr "표현식 설정"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Resize VisualShader node"
-msgstr "비주얼 셰이더 노드 크기 조정"
+msgstr "비주얼셰이더 노드 크기 조정"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
@@ -9602,7 +9634,7 @@ msgstr "Uniform 이름 설정"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Input Default Port"
-msgstr "입력 기본 포트 설정"
+msgstr "입력 디폴트 포트 설정"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Node to Visual Shader"
@@ -9647,7 +9679,7 @@ msgstr "조명"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Show resulted shader code."
-msgstr "결과 셰이더 코드 보이기."
+msgstr "결과 셰이더 코드를 보여줍니다."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Create Shader Node"
@@ -10308,7 +10340,7 @@ msgid ""
"light function, do not use it to write the function declarations inside."
msgstr ""
"맞춤 입력 및 출력 포트로 이루어진, 맞춤 Godot 셰이더 언어 명령문. 꼭짓점/프래"
-"그먼트/조명 함수에 직접 코드를 넣는 것이므로 코드 내에 함수 선언을 작성하는 "
+"그먼트/조명 함수에 직접 코드를 넣는 것이므로 코드 안에 함수 선언을 작성하는 "
"용도로 쓰지 마세요."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10326,9 +10358,9 @@ msgid ""
"it later in the Expressions. You can also declare varyings, uniforms and "
"constants."
msgstr ""
-"결과 셰이더 위에 배치된, 맞춤 Godot 셰이더 언어 표현식. 다양한 함수 선언을 놓"
-"은 뒤 나중에 표현식에서 호출할 수 있습니다. Varying, Uniform, 상수도 정의할 "
-"수 있습니다."
+"결과 셰이더 위에 배치된, 맞춤 Godot 셰이더 언어 표현식. 다양한 함수 선언을 안"
+"에 놓은 뒤 나중에 표현식에서 호출할 수 있습니다. Varying, Uniform, 상수도 선"
+"언할 수 있습니다."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
@@ -10382,7 +10414,7 @@ msgstr "(프래그먼트/조명 모드만 가능) (스칼라) 'x'와 'y'의 절
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
-msgstr "비주얼 셰이더"
+msgstr "비주얼셰이더"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Edit Visual Property:"
@@ -10398,7 +10430,7 @@ msgstr "실행가능"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
-msgstr "'%s' 프리셋을 삭제할까요?"
+msgstr "'%s' 프리셋을 삭제하시겠습니까?"
#: editor/project_export.cpp
msgid ""
@@ -10510,9 +10542,8 @@ msgid "Script"
msgstr "스크립트"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "스크립트 내보내기 모드:"
+msgstr "GDScript 내보내기 모드:"
#: editor/project_export.cpp
msgid "Text"
@@ -10520,21 +10551,19 @@ msgstr "텍스트"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "컴파일된 바이트코드 (더 빠른 불러오기)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "암호화 (아래에 키가 필요합니다)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "잘못된 암호화 키 (길이가 64자이어야 합니다)"
+msgstr "잘못된 암호화 키 (길이가 16진수 형식의 64자이어야 합니다)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "스크립트 암호화 키 (256-비트를 hex 형식으로):"
+msgstr "GDScript 암호화 키 (256-비트를 16진수 형식으로):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10562,7 +10591,7 @@ msgstr "Godot 게임 팩"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr "이 플랫폼에 대한 내보내기 템플릿이 없음:"
+msgstr "이 플랫폼에 대한 내보내기 템플릿이 누락됨:"
#: editor/project_export.cpp
msgid "Manage Export Templates"
@@ -10608,9 +10637,8 @@ msgid "Imported Project"
msgstr "가져온 프로젝트"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "잘못된 프로젝트 이름."
+msgstr "잘못된 프로젝트 이름입니다."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
@@ -10750,7 +10778,7 @@ msgstr "누락된 프로젝트"
#: editor/project_manager.cpp
msgid "Error: Project is missing on the filesystem."
-msgstr "오류: 프로젝트가 파일 시스템에서 누락되었습니다."
+msgstr "오류: 프로젝트가 파일시스템에서 누락되었습니다."
#: editor/project_manager.cpp
msgid "Can't open project at '%s'."
@@ -10830,34 +10858,34 @@ msgstr "한 번에 %d개의 프로젝트를 실행할 건가요?"
#: editor/project_manager.cpp
msgid "Remove %d projects from the list?"
-msgstr "목록에서 프로젝트 %d개를 삭제하시겠습니까?"
+msgstr "목록에서 프로젝트 %d개를 제거하시겠습니까?"
#: editor/project_manager.cpp
msgid "Remove this project from the list?"
-msgstr "목록에서 이 프로젝트를 삭제하시겠습니까?"
+msgstr "목록에서 이 프로젝트를 제거하시겠습니까?"
#: editor/project_manager.cpp
msgid ""
"Remove all missing projects from the list?\n"
"The project folders' contents won't be modified."
msgstr ""
-"모든 누락된 프로젝트를 삭제할까요?\n"
-"프로젝트 폴더의 내용은 수정되지 않습니다."
+"모든 누락된 프로젝트를 목록에서 제거하시겠습니까?\n"
+"프로젝트 폴더의 콘텐츠는 수정되지 않습니다."
#: editor/project_manager.cpp
msgid ""
"Language changed.\n"
"The interface will update after restarting the editor or project manager."
msgstr ""
-"언어가 바뀌었.\n"
-"인터페이스는 편집기나 프로젝트 매니저를 다시 켜면 적용됩니다."
+"언어가 바뀌었습니다.\n"
+"인터페이스는 에디터나 프로젝트 매니저를 다시 시작하고 나서 갱신됩니다."
#: editor/project_manager.cpp
msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
-"Godot 프로젝트를 확인하기 위해 %s 폴더를 스캔할까요?\n"
+"Godot 프로젝트를 확인하기 위해 %s 폴더를 스캔하시겠습니까?\n"
"시간이 걸릴 수 있습니다."
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
@@ -10866,9 +10894,8 @@ msgid "Project Manager"
msgstr "프로젝트 매니저"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "프로젝트"
+msgstr "로컬 프로젝트"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -10879,23 +10906,20 @@ msgid "Last Modified"
msgstr "마지막으로 수정됨"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "프로젝트 내보내기"
+msgstr "프로젝트 편집"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "프로젝트 이름 바꾸기"
+msgstr "프로젝트 실행"
#: editor/project_manager.cpp
msgid "Scan"
msgstr "스캔"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "프로젝트"
+msgstr "프로젝트 스캔"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -10906,27 +10930,24 @@ msgid "New Project"
msgstr "새 프로젝트"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "가져온 프로젝트"
+msgstr "프로젝트 가져오기"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "프로젝트 이름 바꾸기"
+msgstr "프로젝트 제거"
#: editor/project_manager.cpp
msgid "Remove Missing"
-msgstr "누락된 부분 삭제"
+msgstr "누락된 부분 제거"
#: editor/project_manager.cpp
msgid "About"
msgstr "정보"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "애셋 라이브러리"
+msgstr "애셋 라이브러리 프로젝트"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -10934,11 +10955,11 @@ msgstr "지금 다시 시작"
#: editor/project_manager.cpp
msgid "Remove All"
-msgstr "모두 삭제"
+msgstr "모두 제거"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "프로젝트 콘텐츠도 삭제 (되돌릴 수 없습니다!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -10953,20 +10974,18 @@ msgstr ""
"애셋 라이브러리에서 공식 예제 프로젝트를 찾아볼까요?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "필터 속성"
+msgstr "프로젝트 필터"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"이 검색창은 프로젝트를 이름과 경로의 마지막 부분으로 거릅니다.\n"
-"프로젝트를 전체 경로를 기준으로 걸러내려면 검색어에 `/` 가 한 글자 이상 포함"
-"시키세요."
+"이 필드는 프로젝트를 이름과 경로의 마지막 부분으로 거릅니다.\n"
+"프로젝트를 이름과 전체 경로를 기준으로 걸러내려면, 검색어에 `/`를 한 글자 이"
+"상 포함시켜야 합니다."
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -10974,7 +10993,7 @@ msgstr "키 "
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "물리 키"
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11022,7 +11041,7 @@ msgstr "기기"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (물리)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11165,23 +11184,20 @@ msgid "Override for Feature"
msgstr "기능 재정의"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "번역 추가"
+msgstr "번역 %d개 추가"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
-msgstr "번역 삭제"
+msgstr "번역 제거"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "리소스 리맵핑 추가"
+msgstr "리소스 리맵핑 번역: 경로 %d개 추가"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "리소스 리맵핑 추가"
+msgstr "리소스 리맵핑 번역: 리매핑 %d개 추가"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -11189,11 +11205,11 @@ msgstr "리소스 리맵핑 언어 바꾸기"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
-msgstr "리소스 리맵핑 삭제"
+msgstr "리소스 리맵핑 제거"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap Option"
-msgstr "리소스 리맵핑 설정 삭제"
+msgstr "리소스 리맵핑 옵션 제거"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter"
@@ -11213,11 +11229,11 @@ msgstr "일반"
#: editor/project_settings_editor.cpp
msgid "Override For..."
-msgstr "재정의..."
+msgstr "재정의 대상..."
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "The editor must be restarted for changes to take effect."
-msgstr "변경 사항을 적용하려면 편집기를 다시 켜야 합니다."
+msgstr "변경 사항을 반영하려면 에디터를 다시 시작해야 합니다."
#: editor/project_settings_editor.cpp
msgid "Input Map"
@@ -11277,11 +11293,11 @@ msgstr "로케일 필터"
#: editor/project_settings_editor.cpp
msgid "Show All Locales"
-msgstr "모든 로케일 보기"
+msgstr "모든 로케일 보이기"
#: editor/project_settings_editor.cpp
msgid "Show Selected Locales Only"
-msgstr "선택한 로케일만 보기"
+msgstr "선택한 로케일만 보이기"
#: editor/project_settings_editor.cpp
msgid "Filter mode:"
@@ -11301,7 +11317,7 @@ msgstr "플러그인(Plugin)"
#: editor/project_settings_editor.cpp
msgid "Import Defaults"
-msgstr "기본값 가져오기"
+msgstr "디폴트 가져오기"
#: editor/property_editor.cpp
msgid "Preset..."
@@ -11413,7 +11429,7 @@ msgid ""
"Compare counter options."
msgstr ""
"순차 정수 카운터.\n"
-"카운터 옵션과 비교합니다."
+"카운터 옵션을 비교합니다."
#: editor/rename_dialog.cpp
msgid "Per-level Counter"
@@ -11421,7 +11437,7 @@ msgstr "단계별 카운터"
#: editor/rename_dialog.cpp
msgid "If set, the counter restarts for each group of child nodes."
-msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다."
+msgstr "설정하면 각 그룹의 자손 노드의 카운터를 다시 시작합니다."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
@@ -11551,7 +11567,7 @@ msgstr "가지 씬으로 교체"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr "자식 씬 인스턴스화"
+msgstr "자손 씬 인스턴스화"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
@@ -11601,7 +11617,7 @@ msgstr "노드를 루트로 만들기"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes and any children?"
-msgstr "%d 개의 노드와 모든 자식 노드를 삭제할까요?"
+msgstr "%d 개의 노드와 모든 자손 노드를 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
@@ -11613,7 +11629,7 @@ msgstr "루트 노드 \"%s\"을(를) 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr "노드 \"%s\"와(과) 자식을 삭제할까요?"
+msgstr "노드 \"%s\"와(과) 자손을 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -11622,13 +11638,15 @@ msgstr "노드 \"%s\"을(를) 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
-msgstr ""
+msgstr "가지를 씬으로 저장하려면 에디터에서 씬을 열어야 합니다."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"가지를 씬으로 저장하려면 노드 한 개만 선택해야 하지만, 노드 %d개가 선택되어 "
+"있습니다."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11637,6 +11655,10 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"루트 노드 가지를 인스턴스된 씬으로 저장할 수 없습니다.\n"
+"현재 씬의 편집 가능한 복사본을 만드려면, 파일시스템 독 컨텍스트 메뉴를 사용하"
+"여 복제하거나\n"
+"상속 씬을 씬 > 새 상속 씬...을 대신 사용하여 만드세요."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11644,6 +11666,9 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"이미 인스턴스된 씬의 가지를 저장할 수 없습니다.\n"
+"씬의 바리에이션을 만드려면, 인스턴스된 씬을 바탕으로 상속 씬을 씬 > 새 상속 "
+"씬...을 대신 사용하여 만들 수 있습니다."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -11654,15 +11679,15 @@ msgid ""
"Disabling \"editable_instance\" will cause all properties of the node to be "
"reverted to their default."
msgstr ""
-"\"editable_instance\"를 끄게 되면 노드의 모든 속성이 기본 값으로 복원됩니다."
+"\"editable_instance\"가 비활성화되면 노드의 모든 속성이 디폴트로 복원됩니다."
#: editor/scene_tree_dock.cpp
msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"\"자리 표시자로 불러오기\"를 켜면 \"편집할 수 있는 자식\" 설정이 꺼지고, 그러"
-"면 그 노드의 모든 속성이 기본값으로 복원됩니다."
+"\"자리 표시자로 불러오기\"를 활성화하면 \"편집할 수 있는 자손\" 설정이 비활성"
+"화되고, 그러면 그 노드의 모든 속성이 디폴트로 복원됩니다."
#: editor/scene_tree_dock.cpp
msgid "Make Local"
@@ -11714,7 +11739,7 @@ msgstr "노드 잘라내기"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr "노드 삭제"
+msgstr "노드 제거"
#: editor/scene_tree_dock.cpp
msgid "Change type of node(s)"
@@ -11745,7 +11770,7 @@ msgstr "상속 지우기"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr "편집할 수 있는 자식"
+msgstr "편집할 수 있는 자손"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
@@ -11758,11 +11783,11 @@ msgid ""
"disabled."
msgstr ""
"스크립트를 붙일 수 없습니다: 언어가 하나도 등록되지 않았습니다.\n"
-"에디터가 모든 언어를 비활성화한 채로 빌드되어서 그럴 가능성이 높습니다."
+"에디터가 모든 언어 모듈을 비활성화한 채로 빌드되어서 그럴 가능성이 높습니다."
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "자식 노드 추가"
+msgstr "자손 노드 추가"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
@@ -11898,7 +11923,7 @@ msgid ""
"Children are not selectable.\n"
"Click to make selectable."
msgstr ""
-"자식을 선택할 수 없습니다.\n"
+"자손을 선택할 수 없습니다.\n"
"클릭하면 선택할 수 있습니다."
#: editor/scene_tree_editor.cpp
@@ -11971,7 +11996,7 @@ msgstr "'%s' 템플릿 불러오는 중 오류"
#: editor/script_create_dialog.cpp
msgid "Error - Could not create script in filesystem."
-msgstr "오류 - 파일 시스템에 스크립트를 만들 수 없습니다."
+msgstr "오류 - 파일시스템에 스크립트를 만들 수 없습니다."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
@@ -12038,7 +12063,7 @@ msgid ""
"Note: Built-in scripts have some limitations and can't be edited using an "
"external editor."
msgstr ""
-"참고: 내장 스크립트에는 일부 제한 사항이 있으며 외부 편집기를 사용하여 편집"
+"참고: 내장 스크립트에는 일부 제한 사항이 있으며 외부 에디터를 사용하여 편집"
"할 수 없습니다."
#: editor/script_create_dialog.cpp
@@ -12046,6 +12071,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"경고: 스크립트 이름을 내장 유형과 같게 정하는 적은 일반적으로 바람직하지 않습"
+"니다."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12109,7 +12136,7 @@ msgstr "오류"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
-msgstr "자식 프로세스 연결됨."
+msgstr "자손 프로세스 연결됨."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -12117,7 +12144,7 @@ msgstr "복사 오류"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "GitHub에서 C++ 소스 열기"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12229,7 +12256,7 @@ msgstr "단축키 바꾸기"
#: editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "편집기 설정"
+msgstr "에디터 설정"
#: editor/settings_config_dialog.cpp
msgid "Shortcuts"
@@ -12296,14 +12323,22 @@ msgid "Change Ray Shape Length"
msgstr "광선 모양 길이 바꾸기"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "곡선 점 위치 설정"
+msgstr "룸 점 위치 설정"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "곡선 점 위치 설정"
+msgstr "포털 점 위치 설정"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "캡슐 모양 반지름 바꾸기"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "곡선의 인 위치 설정"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12331,7 +12366,7 @@ msgstr "이 항목의 동적 라이브러리의 종속 관계를 선택"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Remove current entry"
-msgstr "현재 엔트리 삭제"
+msgstr "현재 엔트리 제거"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Double click to create a new entry"
@@ -12359,11 +12394,11 @@ msgstr "GDNative 라이브러리"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Enabled GDNative Singleton"
-msgstr "켜진 GDNative 싱글톤"
+msgstr "활성화된 GDNative 싱글톤"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Disabled GDNative Singleton"
-msgstr "꺼진 GDNative 싱글톤"
+msgstr "비활성화된 GDNative 싱글톤"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Library"
@@ -12395,33 +12430,31 @@ msgstr "리소스 파일에 기반하지 않음"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "잘못된 인스턴스 Dictionary 형식 (@path 없음)"
+msgstr "잘못된 인스턴스 딕셔너리 형식 (@path 누락됨)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
-msgstr "잘못된 인스턴스 Dictionary 형식 (@path 에서 스크립트를 불러올 수 없음)"
+msgstr "잘못된 인스턴스 딕셔너리 형식 (@path에서 스크립트를 불러올 수 없음)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "잘못된 인스턴스 Dictionary 형식 (@path의 스크립트가 올바르지 않음)"
+msgstr "잘못된 인스턴스 딕셔너리 형식 (잘못된 @path의 스크립트)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr "잘못된 인스턴스 Dictionary (하위 클래스가 올바르지 않음)"
+msgstr "잘못된 인스턴스 딕셔너리 (잘못된 하위 클래스)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
-msgstr "객체는 길이를 제공할 수 없습니다."
+msgstr "오브젝트는 길이를 제공할 수 없습니다."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "메시 라이브러리 내보내기"
+msgstr "메시 GLTF2 내보내기"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "내보내기..."
+msgstr "GLTF 내보내기..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12464,9 +12497,8 @@ msgid "GridMap Paint"
msgstr "그리드맵 칠하기"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "그리드맵 선택 항목 채우기"
+msgstr "그리드맵 선택"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12478,7 +12510,7 @@ msgstr "스냅 뷰"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Disabled"
-msgstr "클립 꺼짐"
+msgstr "클립 비활성화"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
@@ -12588,6 +12620,11 @@ msgstr "구분하는 조명"
msgid "Class name can't be a reserved keyword"
msgstr "클래스 이름은 키워드가 될 수 없습니다"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "선택 항목 채우기"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "내부 예외 스택 추적의 끝"
@@ -12646,7 +12683,7 @@ msgstr "내비게이션 메시 생성기 설정:"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
-msgstr "형태 분석 중..."
+msgstr "지오메트리 분석 중..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Done!"
@@ -12717,14 +12754,12 @@ msgid "Add Output Port"
msgstr "출력 포트 추가하기"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "유형 바꾸기"
+msgstr "포트 유형 바꾸기"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "입력 포트 이름 바꾸기"
+msgstr "포트 이름 바꾸기"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -12788,11 +12823,11 @@ msgstr "시그널 추가"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Input Port"
-msgstr "입력 포트 삭제하기"
+msgstr "입력 포트 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Output Port"
-msgstr "출력 포트 삭제하기"
+msgstr "출력 포트 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Expression"
@@ -12800,11 +12835,11 @@ msgstr "표현식 바꾸기"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove VisualScript Nodes"
-msgstr "비주얼 스크립트 노드 삭제"
+msgstr "비주얼스크립트 노드 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Duplicate VisualScript Nodes"
-msgstr "비주얼 스크립트 노드 복제"
+msgstr "비주얼스크립트 노드 복제"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
@@ -12839,7 +12874,6 @@ msgid "Add Preload Node"
msgstr "Preload 노드 추가"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
msgstr "노드 추가"
@@ -12874,7 +12908,7 @@ msgstr "노드 이동"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove VisualScript Node"
-msgstr "비주얼 스크립트 노드 삭제"
+msgstr "비주얼스크립트 노드 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Connect Nodes"
@@ -12910,7 +12944,7 @@ msgstr "함수 노드를 복사할 수 없습니다."
#: modules/visual_script/visual_script_editor.cpp
msgid "Paste VisualScript Nodes"
-msgstr "비주얼 스크립트 노드 붙여넣기"
+msgstr "비주얼스크립트 노드 붙여넣기"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
@@ -12934,11 +12968,11 @@ msgstr "함수 만들기"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr "함수 삭제"
+msgstr "함수 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr "변수 삭제"
+msgstr "변수 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
@@ -12946,7 +12980,7 @@ msgstr "변수 편집:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr "시그널 삭제"
+msgstr "시그널 제거"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
@@ -13026,7 +13060,7 @@ msgstr "잘못된 인덱스 속성 이름."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr "기본 객체는 노드가 아닙니다!"
+msgstr "기본 오브젝트는 노드가 아닙니다!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
@@ -13066,75 +13100,73 @@ msgstr ""
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
-msgstr "비주얼 스크립트 검색"
+msgstr "비주얼스크립트 검색"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Get %s"
msgstr "Get %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
-msgstr "패키지 이름이 없습니다."
+msgstr "패키지 이름이 누락되어 있습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "패키지 세그먼트는 길이가 0이 아니어야 합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "문자 '%s'은(는) Android 애플리케이션 패키지 이름으로 쓸 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "숫자는 패키지 세그먼트의 첫 문자로 쓸 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "문자 '%s'은(는) 패키지 세그먼트의 첫 문자로 쓸 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "패키지는 적어도 하나의 '.' 분리 기호가 있어야 합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "목록에서 기기 선택"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "%s에서 실행"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "APK로 내보내는 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "제거 중..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "로드 중, 기다려 주세요..."
+msgstr "기기에 설치 중, 기다려 주세요..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "기기에 설치할 수 없음: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "기기에서 실행 중..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "폴더를 만들 수 없습니다."
+msgstr "기기에서 실행할 수 없었습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "'apksigner' 도구를 찾을 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13142,7 +13174,7 @@ msgstr ""
"프로젝트에 Android 빌드 템플릿을 설치하지 않았습니다. 프로젝트 메뉴에서 설치"
"하세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13150,11 +13182,11 @@ msgstr ""
"Debug Keystore, Debug User 및 Debug Password 설정을 구성하거나 그 중 어느 것"
"도 없어야 합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
-msgstr "Debug keystore를 편집기 설정과 프리셋에 구성하지 않았습니다."
+msgstr "Debug keystore를 에디터 설정과 프리셋에 구성하지 않았습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13162,47 +13194,47 @@ msgstr ""
"Release Keystore, Release User 및 Release Password 설정을 구성하거나 그 중 어"
"느 것도 없어야 합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "내보내기 프리셋에 출시 keystorke가 잘못 구성되어 있습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
-msgstr "편집기 설정에서 올바른 Android SDK 경로가 필요합니다."
+msgstr "에디터 설정에서 올바른 Android SDK 경로가 필요합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
-msgstr "편집기 설정에서 잘못된 Android SDK 경로입니다."
+msgstr "에디터 설정에서 잘못된 Android SDK 경로입니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
-msgstr "'platform-tools' 디렉토리가 없습니다!"
+msgstr "'platform-tools' 디렉토리가 누락되어 있습니다!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Android SDK platform-tools의 adb 명령을 찾을 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
-msgstr "편집기 설정에서 지정된 Android SDK 디렉토리를 확인해주세요."
+msgstr "에디터 설정에서 지정된 Android SDK 디렉토리를 확인해주세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
-msgstr "'build-tools' 디렉토리가 없습니다!"
+msgstr "'build-tools' 디렉토리가 누락되어 있습니다!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Android SDK build-tools의 apksigner 명령을 찾을 수 없습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "APK 확장에 잘못된 공개 키입니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "잘못된 패키지 이름:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13210,89 +13242,76 @@ msgstr ""
"\"android/modules\" 프로젝트 세팅에 잘못된 \"GodotPaymentV3\" 모듈이 포함되"
"어 있습니다. (Godot 3.2.2 에서 변경됨).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
-msgstr "플러그인을 사용하려면 \"커스텀 빌드 사용\"이 활성화되어야 합니다."
+msgstr "플러그인을 사용하려면 \"Use Custom Build\"가 활성화되어야 합니다."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"자유도(DoF)\"는 \"Xr 모드\" 가 \"Oculus Mobile VR\" 일 때만 사용 가능합니"
-"다."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"손 추적\" 은 \"Xr 모드\" 가 \"Oculus Mobile VR\"일 때만 사용 가능합니다."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"포커스 인식\"은 \"Xr 모드\"가 \"Oculus Mobile VR\" 인 경우에만 사용 가능합"
-"니다."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
-msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화 된 경우에만 유효합니다."
+msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화된 경우에만 유효합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"'apksigner'를 찾을 수 없었습니다.\n"
+"명령이 Android SDK build-tools 디렉토리에서 사용 가능한지 확인해주세요.\n"
+"결과 %s는 서명되지 않습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "디버그 %s에 서명 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "출시 %s에 서명 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "keystore를 찾을 수 없어, 내보낼 수 없었습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner'가 오류 #%d로 반환되었습니다"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "%s 추가하는 중..."
+msgstr "%s 검증 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "%s의 'apksigner' 검증에 실패했습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Android용으로 내보내는 중"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "잘못된 파일명! Android App Bundle에는 * .aab 확장자가 필요합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK 확장은 Android App Bundle과 호환되지 않습니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr "잘못된 파일명! Android APK는 *.apk 확장자가 필요합니다."
+msgstr "잘못된 파일이름입니다! Android APK는 *.apk 확장자가 필요합니다."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "지원되지 않는 내보내기 형식입니다!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13300,7 +13319,7 @@ msgstr ""
"맞춤 빌드 템플릿으로 빌드하려 했으나, 버전 정보가 없습니다. '프로젝트' 메뉴에"
"서 다시 설치해주세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13312,36 +13331,37 @@ msgstr ""
" Godot 버전: %s\n"
"'프로젝트' 메뉴에서 Android 빌드 템플릿을 다시 설치해주세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"res://android/build/res/*.xml 파일을 프로젝트 이름으로 덮어쓸 수 없습니다"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "프로젝트 파일을 gradle 프로젝트로 내보낼 수 없었습니다\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "확장 패키지 파일을 쓸 수 없었습니다!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Android 프로젝트 빌드 중 (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Android 프로젝트의 빌드에 실패했습니다, 출력된 오류를 확인하세요.\n"
-"또는 docs.godotengine.org에서 Android 빌드 설명문서를 찾아보세요."
+"또는 docs.godotengine.org에서 Android 빌드 문서를 찾아보세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "출력 이동 중"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13349,16 +13369,15 @@ msgstr ""
"내보내기 파일을 복사하고 이름을 바꿀 수 없습니다, 출력에 대한 gradle 프로젝"
"트 디렉토리를 확인하세요."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "애니메이션을 찾을 수 없음: '%s'"
+msgstr "패키지를 찾을 수 없음: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "APK를 만드는 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13366,33 +13385,37 @@ msgstr ""
"내보낼 템플릿 APK를 찾을 수 없음:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"선택된 아키텍처를 위한 내보내기 템플릿에 라이브러리가 누락되어 있습니다: "
+"%s.\n"
+"모든 필수 라이브러리로 템플릿을 빌드하거나, 내보내기 프리셋에서 누락된 아키텍"
+"처를 선택 취소하세요."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "파일을 추가하는 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "프로젝트 파일을 내보낼 수 없었습니다"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "APK를 정렬 중..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "임시 정렬되지 않은 APK의 압축을 풀 수 없었습니다."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
-msgstr "식별자가 없습니다."
+msgstr "식별자가 누락되어 있습니다."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "The character '%s' is not allowed in Identifier."
@@ -13456,19 +13479,19 @@ msgstr "잘못된 bundle 식별자:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "공증: 코드 서명이 필요합니다."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "공증: 강화된 런타임이 필요합니다."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "공증: Apple ID 이름이 지정되지 않았습니다."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "공증: Apple ID 비밀번호가 지정되지 않았습니다."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -13535,8 +13558,8 @@ msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
-"CanvasModulate는 씬 당 단 하나만 보일 수 있습니다. 처음에 만든 것만 작동하"
-"고, 나머지는 무시됩니다."
+"CanvasModulate는 씬 (또는 인스턴트된 씬 세트) 당 단 하나만 보일 수 있습니다. "
+"처음에 만든 것만 작동하고, 나머지는 무시됩니다."
#: scene/2d/collision_object_2d.cpp
msgid ""
@@ -13544,9 +13567,9 @@ msgid ""
"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to "
"define its shape."
msgstr ""
-"이 노드는 Shape가 없습니다, 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n"
-"CollisionShape2D 또는 CollisionPolygon2D를 자식 노드로 추가하여 Shape를 정의"
-"하세요."
+"이 노드는 모양이 없습니다, 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n"
+"CollisionShape2D 또는 CollisionPolygon2D를 자손 노드로 추가하여 모양을 정의하"
+"는 것을 고려하세요."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -13554,13 +13577,13 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩"
-"니다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D 등의 자식으로만 사용해주세요."
+"CollisionPolygon2D는 CollisionObject2D에 콜리전 모양을 지정하는 용도로만 사용"
+"됩니다. 모양을 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D 등의 자손으로만 사용해주세요."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
-msgstr "빈 CollisionPolygon2D는 충돌에 영향을 주지 않습니다."
+msgstr "빈 CollisionPolygon2D는 콜리전에 영향을 주지 않습니다."
#: scene/2d/collision_polygon_2d.cpp
msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode."
@@ -13576,24 +13599,24 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩니"
-"다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D "
-"등의 자식으로만 사용해주세요."
+"CollisionShape2D는 CollisionObject2D에 콜리전 모양을 지정하는 용도로만 사용됩"
+"니다. 모양을 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D 등의 자손으로만 사용해주세요."
#: scene/2d/collision_shape_2d.cpp
msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
msgstr ""
-"CollisionShape2D가 작동하려면 반드시 Shape가 있어야 합니다. Shape 리소스를 만"
-"들어주세요!"
+"CollisionShape2D가 작동하려면 반드시 모양이 있어야 합니다. 모양 리소스를 만들"
+"어주세요!"
#: scene/2d/collision_shape_2d.cpp
msgid ""
"Polygon-based shapes are not meant be used nor edited directly through the "
"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
msgstr ""
-"폴리곤 기반 Shape는 CollisionShape2D에 추가하거나 거기서 편집하게끔 설계하지 "
+"폴리곤 기반 모양은 CollisionShape2D에 추가하거나 거기서 편집하게끔 설계하지 "
"않았습니다. 대신 CollisionPolygon2D 노드를 사용하십시오."
#: scene/2d/cpu_particles_2d.cpp
@@ -13601,7 +13624,7 @@ msgid ""
"CPUParticles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
msgstr ""
-"CPUParticles2D 애니메이션에는 \"Particles Animation\"이 켜진 "
+"CPUParticles2D 애니메이션에는 \"Particles Animation\"이 활성화된 "
"CanvasItemMaterial을 사용해야 합니다."
#: scene/2d/joints_2d.cpp
@@ -13634,8 +13657,7 @@ msgstr "조명의 모양을 나타낼 텍스처를 \"Texture\" 속성에 지정
msgid ""
"An occluder polygon must be set (or drawn) for this occluder to take effect."
msgstr ""
-"이 Occluder가 영향을 주게 하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 합"
-"니다."
+"이 Occluder를 반영하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 합니다."
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
@@ -13654,14 +13676,14 @@ msgid ""
"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
"node. It only provides navigation data."
msgstr ""
-"NavigationPolygonInstance는 Navigation2D 노드의 자식 또는 그 아래에 있어야 합"
-"니다. 이것은 내비게이션 데이터만을 제공합니다."
+"NavigationPolygonInstance는 Navigation2D 노드의 자손이나 손주에 있어야 합니"
+"다. 이것은 내비게이션 데이터만을 제공합니다."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"ParallaxLayer는 ParallaxBackground 노드의 자식 노드로 있을 때만 작동합니다."
+"ParallaxLayer는 ParallaxBackground 노드의 자손 노드로 있을 때만 작동합니다."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -13670,15 +13692,15 @@ msgid ""
"CPUParticles\" option for this purpose."
msgstr ""
"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n"
-"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 옵션을 사"
-"용할 수 있습니다."
+"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPUParticles로 변환\" 옵션"
+"을 사용할 수 있습니다."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
-"파티클을 처리할 머티리얼을 지정하지 않았습니다. 아무런 동작도 찍히지 않습니"
+"파티클을 처리할 머티리얼이 할당되지 않았으므로, 아무런 동작도 찍히지 않습니"
"다."
#: scene/2d/particles_2d.cpp
@@ -13686,12 +13708,12 @@ msgid ""
"Particles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
msgstr ""
-"Particles2D 애니메이션은 \"Particles Animation\"이 켜져 있는 "
+"Particles2D 애니메이션은 \"Particles Animation\"이 활성화되어 있는 "
"CanvasItemMaterial을 사용해야 합니다."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
-msgstr "PathFollow2D는 Path2D 노드의 자식 노드로 있을 때만 작동합니다."
+msgstr "PathFollow2D는 Path2D 노드의 자손 노드로 있을 때만 작동합니다."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -13701,7 +13723,7 @@ msgid ""
msgstr ""
"(캐릭터나 리지드 모드에서) RigidBody2D의 크기 변경은 물리 엔진이 작동하는 동"
"안 큰 부담이 됩니다.\n"
-"대신 자식 충돌 형태의 크기를 변경해보세요."
+"대신 자손 콜리전 모양의 크기를 변경해보세요."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
@@ -13728,9 +13750,9 @@ msgid ""
"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
"KinematicBody2D, etc. to give them a shape."
msgstr ""
-"Use Parent가 켜진 TileMap은 형태를 주는 부모 CollisionObject2D가 필요합니다. "
-"형태를 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자"
-"식 노드로 사용해주세요."
+"Use Parent가 켜진 TileMap은 모양을 주는 부모 CollisionObject2D가 필요합니다. "
+"모양을 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자"
+"손 노드로 사용해주세요."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -13767,15 +13789,15 @@ msgstr "앵커 ID가 0이 되면 앵커가 실제 앵커에 바인딩하지 않
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
-msgstr "ARVROrigin은 자식으로 ARVRCamera 노드가 필요합니다."
+msgstr "ARVROrigin은 자손으로 ARVRCamera 노드가 필요합니다."
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
-msgstr "메시 및 조명 찾는 중"
+msgstr "메시 및 조명을 찾는 중"
#: scene/3d/baked_lightmap.cpp
msgid "Preparing geometry (%d/%d)"
-msgstr "형태 준비 중 (%d/%d)"
+msgstr "지오메트리 준비 중 (%d/%d)"
#: scene/3d/baked_lightmap.cpp
msgid "Preparing environment"
@@ -13787,7 +13809,7 @@ msgstr "캡처 생성 중"
#: scene/3d/baked_lightmap.cpp
msgid "Saving lightmaps"
-msgstr "라이트맵 저장 중"
+msgstr "라이트맵을 저장 중"
#: scene/3d/baked_lightmap.cpp
msgid "Done"
@@ -13799,9 +13821,9 @@ msgid ""
"Consider adding a CollisionShape or CollisionPolygon as a child to define "
"its shape."
msgstr ""
-"이 노드는 Shape가 없습니다. 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n"
-"CollisionShape 또는 CollisionPolygon을 자식 노드로 추가해서 Shape을 정의해보"
-"세요."
+"이 노드는 모양이 없습니다. 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n"
+"CollisionShape 또는 CollisionPolygon을 자손 노드로 추가해서 모양을 정의하는 "
+"것을 고려하세요."
#: scene/3d/collision_polygon.cpp
msgid ""
@@ -13809,13 +13831,13 @@ msgid ""
"CollisionObject derived node. Please only use it as a child of Area, "
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionPolygon은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니"
-"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용"
+"CollisionPolygon은 CollisionObject에 콜리전 모양을 지정하는 용도로만 사용됩니"
+"다. Area, StaticBody, RigidBody, KinematicBody 등에 자손 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
-msgstr "빈 CollisionPolygon는 충돌에 영향을 주지 않습니다."
+msgstr "빈 CollisionPolygon는 콜리전에 영향을 주지 않습니다."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -13823,8 +13845,8 @@ msgid ""
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionShape은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니"
-"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용"
+"CollisionShape은 CollisionObject에 콜리전 모양을 지정하는 용도로만 사용됩니"
+"다. Area, StaticBody, RigidBody, KinematicBody 등에 자손 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_shape.cpp
@@ -13832,8 +13854,8 @@ msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
msgstr ""
-"CollisionShape가 제 기능을 하려면 Shape가 있어야 합니다. Shape 리소스를 만들"
-"어주세요."
+"CollisionShape가 제 기능을 하려면 모양이 있어야 합니다. 모양 리소스를 만들어"
+"주세요."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -13884,6 +13906,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"GIProbe Compress 속성은 알려진 버그로 인해 더 이상 사용되지 않으며 더 이상 영"
+"향이 없습니다.\n"
+"이 경고를 제거하려면, GIProbe의 Compress 속성을 비활성화하세요."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -13899,8 +13924,16 @@ msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance는 Navigation 노드의 자식이나 더 하위에 있어야 합니다. "
-"이것은 내비게이션 데이터만 제공합니다."
+"NavigationMeshInstance는 Navigation 노드의 자손이나 손주에 있어야 합니다. 이"
+"것은 내비게이션 데이터만 제공합니다."
+
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
#: scene/3d/particles.cpp
msgid ""
@@ -13909,8 +13942,8 @@ msgid ""
"\" option for this purpose."
msgstr ""
"GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n"
-"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 설정을 사용"
-"할 수 있습니다."
+"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPUParticles로 변환\" 설정을 "
+"사용할 수 있습니다."
#: scene/3d/particles.cpp
msgid ""
@@ -13927,7 +13960,7 @@ msgstr ""
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
-msgstr "PathFollow는 Path 노드의 자식으로 있을 때만 작동합니다."
+msgstr "PathFollow는 Path 노드의 자손으로 있을 때만 작동합니다."
#: scene/3d/path.cpp
msgid ""
@@ -13945,7 +13978,7 @@ msgid ""
msgstr ""
"(캐릭터나 리지드 모드에서) RigidBody의 크기 변경은 물리 엔진이 작동하는 동안 "
"큰 부담이 됩니다.\n"
-"대신 자식 충돌 모양의 크기를 변경하세요."
+"대신 자손 콜리전 모양의 크기를 변경하세요."
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be PhysicsBodies"
@@ -13969,15 +14002,15 @@ msgstr "노드 A와 노드 B는 서로 다른 PhysicsBody여야 합니다"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomManager는 Portal의 자손이나 손주가 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Room은 Portal의 자손이나 손주가 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomGroup은 Portal의 자손이나 손주가 아니어야 합니다."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -13989,79 +14022,93 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Room은 다른 Room을 자손이나 손주로 가질 수 없습니다."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "RoomManager는 Room 안에 배치해서는 안됩니다."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "RoomGroup은 Room 안에 배치해서는 안됩니다."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"룸 컨벡스 헐에는 다수의 평면이 있습니다.\n"
+"성능을 높이려면 룸 경계를 단순화하는 것을 고려하세요."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "RoomManager는 RoomGroup 안에 배치해서는 안됩니다."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "RoomList가 할당되어 있지 않습니다."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "RoomList 노드는 Spatial(또는 Spatial에서 파생)이어야 합니다."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"포털 깊이 제한이 영으로 설정됩니다.\n"
+"카메라가 있는 룸만 렌더링될 것입니다."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "SceneTree에는 RoomManager 하나만 있어야 합니다."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"RoomList 경로가 잘못되었습니다.\n"
+"RoomList 가지가 RoomManager에서 할당되었는지 확인해주세요."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList에 포함된 Room이 없어, 중단합니다."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"이름이 잘못된 노드가 감지되었으며, 자세한 사항은 출력 로그를 확인하세요. 중단"
+"합니다."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
-msgstr ""
+msgstr "포털 연결 룸을 찾을 수 없으며, 자세한 사항은 출력 로그를 확인하세요."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"포털 자동연결에 실패했으며, 자세한 사항은 출력 로그를 확인하세요.\n"
+"포털이 소스 룸으로부터 바깥쪽을 향하고 있는지 확인하세요."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"룸 겹침이 감지되어, 카메라가 겹치는 영역에서 잘못 작동할 수 있습니다.\n"
+"자세한 사항은 출력 로그를 확인하세요."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"룸 경계를 계산하는 중 오류.\n"
+"모든 룸에 지오메트리 또는 수동 경계가 포함되어 있는지 확인하세요."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14074,7 +14121,7 @@ msgid ""
"Change the size in children collision shapes instead."
msgstr ""
"실행 중에 SoftBody의 크기 변경은 물리 엔진에 의해 재정의됩니다.\n"
-"대신 자식의 충돌 모양 크기를 변경하세요."
+"대신 자손 콜리전 모양의 크기를 변경하세요."
#: scene/3d/sprite_3d.cpp
msgid ""
@@ -14090,21 +14137,21 @@ msgid ""
"it as a child of a VehicleBody."
msgstr ""
"VehicleWheel은 VehicleBody로 바퀴 시스템을 제공하는 역할입니다. VehicleBody"
-"의 자식으로 사용해주세요."
+"의 자손으로 사용해주세요."
#: scene/3d/world_environment.cpp
msgid ""
"WorldEnvironment requires its \"Environment\" property to contain an "
"Environment to have a visible effect."
msgstr ""
-"WorldEnvironment가 시각 효과를 갖도록 Environment를 갖고 있는 \"Environment"
+"WorldEnvironment가 시각 이펙트를 갖도록 Environment를 갖고 있는 \"Environment"
"\" 속성이 필요합니다."
#: scene/3d/world_environment.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
-"씬마다 (혹은 인스턴스된 씬 세트마다) WorldEnvironment는 하나만 허용됩니다."
+"씬(또는 인스턴스된 씬 세트마다) 당 WorldEnvironment는 하나만 허용됩니다."
#: scene/3d/world_environment.cpp
msgid ""
@@ -14124,7 +14171,7 @@ msgstr "애니메이션을 찾을 수 없음: '%s'"
#: scene/animation/animation_player.cpp
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "애니메이션 적용 재설정"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14169,11 +14216,11 @@ msgid ""
msgstr ""
"색상: #%s\n"
"좌클릭: 색상 설정\n"
-"우클릭: 프리셋 삭제"
+"우클릭: 프리셋 제거"
#: scene/gui/color_picker.cpp
msgid "Pick a color from the editor window."
-msgstr "편집기 창에서 색상을 고르세요."
+msgstr "에디터 창에서 색상을 고르세요."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -14197,7 +14244,7 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"Container 자체는 자식 배치 작업을 구성하는 스크립트 외에는 목적이 없습니다.\n"
+"Container 자체는 자손 배치 작업을 구성하는 스크립트 외에는 목적이 없습니다.\n"
"스크립트를 추가하는 의도가 없으면, 순수한 Control 노드를 사용해주세요."
#: scene/gui/control.cpp
@@ -14225,6 +14272,14 @@ msgstr "올바른 확장자를 사용해야 합니다."
msgid "Enable grid minimap."
msgstr "그리드 미니맵을 활성화합니다."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14236,7 +14291,7 @@ msgstr ""
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
-msgstr "\"Exp Edit\"을 켜면, \"Min Value\"는 반드시 0보다 커야 합니다."
+msgstr "\"Exp Edit\"을 활성화하면, \"Min Value\"는 반드시 0보다 커야 합니다."
#: scene/gui/scroll_container.cpp
msgid ""
@@ -14244,8 +14299,8 @@ msgid ""
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer는 단일 자식 Control을 작업하기 위한 것입니다.\n"
-"(VBox, HBox 등) 컨테이너를 자식으로 사용하거나, Control을 사용하고 맞춤 최소 "
+"ScrollContainer는 단일 자손 Control을 작업하기 위한 것입니다.\n"
+"(VBox, HBox 등) 컨테이너를 자손으로 사용하거나, Control을 사용하고 맞춤 최소 "
"수치를 수동으로 설정하세요."
#: scene/gui/tree.cpp
@@ -14257,8 +14312,8 @@ msgid ""
"Default Environment as specified in Project Settings (Rendering -> "
"Environment -> Default Environment) could not be loaded."
msgstr ""
-"프로젝트 설정 (Rendering -> Environment -> Default Environment)에 지정한 기"
-"본 환경을 불러올 수 없습니다."
+"프로젝트 설정 (Rendering -> Environment -> Default Environment)에 지정한 디폴"
+"트 환경을 불러올 수 없습니다."
#: scene/main/viewport.cpp
msgid ""
@@ -14268,7 +14323,7 @@ msgid ""
"texture to some node for display."
msgstr ""
"뷰포트를 렌더 대상으로 설정하지 않았습니다. 뷰포트의 내용을 화면에 직접 표시"
-"하려면, Control의 자식 노드로 만들어서 크기를 얻어야 합니다. 그렇지 않을 경"
+"하려면, Control의 자손 노드로 만들어서 크기를 얻어야 합니다. 그렇지 않을 경"
"우, 화면에 표시하기 위해서는 뷰포트를 RenderTarget으로 만들고 내부적인 텍스처"
"를 다른 노드에 지정해야 합니다."
@@ -14276,6 +14331,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "무엇이든 렌더링하려면 뷰포트 크기가 0보다 커야 합니다."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14297,25 +14356,28 @@ msgid "Invalid comparison function for that type."
msgstr "해당 유형에 잘못된 비교 함수."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Varying은 꼭짓점 함수에만 지정할 수 있습니다."
+msgstr "Varying은 '%s' 함수에서 할당되지 않을 수 있습니다."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"'vertex' 함수에서 할당된 Varying은 'fragment' 또는 'light'에서 재할당되지 않"
+"을 수 있습니다."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"'fragment' 함수에서 할당된 Varying은 'vertex' 또는 'light'에서 재할당되지 않"
+"을 수 있습니다."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
-msgstr ""
+msgstr "맞춤 함수에서 Fragment-stage varying에 접근할 수 없습니다!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
@@ -14329,6 +14391,41 @@ msgstr "Uniform에 대입."
msgid "Constants cannot be modified."
msgstr "상수는 수정할 수 없습니다."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "(본의) 대기 자세 만들기"
+
+#~ msgid "Bottom"
+#~ msgstr "아랫면"
+
+#~ msgid "Left"
+#~ msgstr "왼쪽면"
+
+#~ msgid "Right"
+#~ msgstr "오른쪽면"
+
+#~ msgid "Front"
+#~ msgstr "정면"
+
+#~ msgid "Rear"
+#~ msgstr "뒷면"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "이름 없는 기즈모"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"자유도(DoF)\"는 \"Xr 모드\" 가 \"Oculus Mobile VR\" 일 때만 사용 가능합"
+#~ "니다."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"포커스 인식\"은 \"Xr 모드\"가 \"Oculus Mobile VR\" 인 경우에만 사용 가능"
+#~ "합니다."
+
#~ msgid "Package Contents:"
#~ msgstr "패키지 내용:"
@@ -16407,9 +16504,6 @@ msgstr "상수는 수정할 수 없습니다."
#~ msgid "Images:"
#~ msgstr "이미지:"
-#~ msgid "Group"
-#~ msgstr "그룹"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "샘플 변환 모드: (.wav 파일):"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index f8bc356023..a853757f43 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -1037,7 +1037,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1669,13 +1669,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2067,7 +2067,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2556,6 +2556,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3191,6 +3215,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animacija: Pakeisti Transformaciją"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3443,6 +3472,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5572,6 +5605,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Panaikinti pasirinkimą"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6500,7 +6544,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7098,6 +7146,16 @@ msgstr "Sukurti"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Animacija: Pakeisti Transformaciją"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Ištrinti Efektą"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7610,11 +7668,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Sukurti Naują"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7642,6 +7701,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7750,42 +7863,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8050,6 +8143,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Priedai"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8115,7 +8213,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12174,6 +12272,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12462,6 +12568,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Visas Pasirinkimas"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12947,163 +13058,152 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Redaguoti"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Išinstaliuoti"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Atsiųsti"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Netinkamas šrifto dydis."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13111,57 +13211,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13169,55 +13269,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animacijos Nodas"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13225,20 +13325,20 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Filtrai..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13698,6 +13798,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13992,6 +14100,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14032,6 +14148,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 180cd1be1c..26674cb5b8 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -1029,7 +1029,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Atkarības"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resurs"
@@ -1678,13 +1678,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2059,7 +2059,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2537,6 +2537,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3162,6 +3186,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Izmainīt Transformāciju"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3406,6 +3435,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5459,6 +5492,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupa Izvēlēta"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6370,7 +6414,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6962,6 +7010,15 @@ msgstr "Izveidot punktus."
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Izdzēst"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7468,11 +7525,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Ielādēt Noklusējumu"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7500,6 +7558,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7610,42 +7722,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7909,6 +8001,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Izveidot"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7974,7 +8071,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11988,6 +12085,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12273,6 +12378,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Visa Izvēle"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12750,161 +12860,150 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Instalēt..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Ielādēt..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nederīgs paketes nosaukums:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12912,57 +13011,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12970,55 +13069,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animācija netika atrasta: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13026,20 +13125,20 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Pievienot Mezglus..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13496,6 +13595,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13786,6 +13893,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13826,6 +13941,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index 3a70aade1a..456d89671e 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -985,7 +985,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1614,13 +1614,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1990,7 +1990,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2468,6 +2468,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3091,6 +3115,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3331,6 +3359,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5371,6 +5403,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6269,7 +6311,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6853,6 +6899,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7347,11 +7401,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7379,6 +7433,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7486,42 +7594,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7783,6 +7871,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7848,7 +7940,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11748,6 +11840,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12028,6 +12128,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12494,159 +12598,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12654,57 +12747,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12712,54 +12805,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12767,19 +12860,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13229,6 +13322,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13518,6 +13619,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13558,6 +13667,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index bf449381bb..26d14a75ba 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -992,7 +992,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1621,13 +1621,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3100,6 +3124,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3340,6 +3368,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5383,6 +5415,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6282,7 +6324,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6868,6 +6914,14 @@ msgstr "Промести Безиер Точка"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7362,11 +7416,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7394,6 +7448,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7501,42 +7609,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7798,6 +7886,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7863,7 +7955,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11763,6 +11855,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12043,6 +12143,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12509,159 +12613,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12669,57 +12762,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12727,54 +12820,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12782,19 +12875,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13244,6 +13337,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13533,6 +13634,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13573,6 +13682,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index b0d3a5a8d7..b9f86d4cf2 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -997,7 +997,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1627,13 +1627,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2003,7 +2003,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2483,6 +2483,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3106,6 +3130,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "പരിവർത്തനം ചലിപ്പിക്കുക"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3346,6 +3375,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5390,6 +5423,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6290,7 +6333,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6876,6 +6923,14 @@ msgstr "ബെസിയർ ബിന്ദു നീക്കുക"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7370,11 +7425,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7402,6 +7457,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7509,42 +7618,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7806,6 +7895,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7871,7 +7964,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11772,6 +11865,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12052,6 +12153,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12520,159 +12625,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12680,57 +12774,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12738,54 +12832,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12793,19 +12887,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13255,6 +13349,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13544,6 +13646,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13584,6 +13694,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index af59635c8a..e305a8b937 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -993,7 +993,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1622,13 +1622,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3100,6 +3124,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3340,6 +3368,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5380,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6281,7 +6323,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6865,6 +6911,15 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "नोड हलवा"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7359,11 +7414,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7391,6 +7446,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7499,42 +7608,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7796,6 +7885,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7861,7 +7954,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11765,6 +11858,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12045,6 +12146,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12512,159 +12617,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12672,57 +12766,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12730,54 +12824,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12785,19 +12879,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13247,6 +13341,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13536,6 +13638,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13576,6 +13686,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index 5fd2547bcb..ca77c01937 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-02 02:00+0000\n"
+"PO-Revision-Date: 2021-08-22 22:46+0000\n"
"Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/"
"ms/>\n"
@@ -23,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -372,7 +372,7 @@ msgstr "Masukkan Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr ""
+msgstr "nod '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -599,7 +599,7 @@ msgstr "Pergi ke Langkah Sebelumnya"
#: editor/animation_track_editor.cpp
msgid "Apply Reset"
-msgstr ""
+msgstr "Guna Set Semula"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -966,11 +966,11 @@ msgstr "Cipta %s Baru"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "Tiada hasil untuk \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Tiada keterangan tersedia untuk %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1030,7 +1030,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Kebergantungan"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Sumber"
@@ -1274,11 +1274,11 @@ msgstr "%s (Sudah Wujud)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Kandungan aset \"%s\" - fail-fail %d bercanggah dengan projek anda:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "Kandungan aset \"%s\" - Tiada fail-fail bercanggah dengan projek anda:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1544,11 +1544,11 @@ msgstr "Tidak boleh menambahkan autoload:"
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. File does not exist."
-msgstr ""
+msgstr "%s adalah laluan yang tidak sah. Fail tidak wujud."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s adalah laluan yang tidak sah. Tidak dalam laluan sumber (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1573,7 +1573,7 @@ msgstr "Nama"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
-msgstr ""
+msgstr "Pembolehubah Global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1697,13 +1697,13 @@ msgstr ""
"Aktifkan 'Import Pvrtc' dalam Tetapan Projek, atau nyahaktifkan 'Driver "
"Fallback Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Templat nyahpepijat tersuai tidak dijumpai."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1748,15 +1748,16 @@ msgstr "Import Dok"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Membenarkan untuk melihat dan menyunting adegan 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
+"Membenarkan untuk menyunting skrip-skrip menggunakan editor skrip bersepadu."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Memberikan akses terbina dalam kepada Perpustakaan Aset."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
@@ -2088,7 +2089,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Mengimport (Semula) Aset"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Atas"
@@ -2599,6 +2600,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Adegan semasa tidak disimpan. Masih buka?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Buat Asal"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Buat Semula"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Tidak dapat memuatkan semula adegan yang tidak pernah disimpan."
@@ -3290,6 +3317,11 @@ msgid "Merge With Existing"
msgstr "Gabung Dengan Sedia Ada"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Ubah Perubahan"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Buka & Jalankan Skrip"
@@ -3547,6 +3579,10 @@ msgstr ""
"Sumber yang dipilih (%s) tidak sesuai dengan jenis yang diharapkan untuk "
"sifat ini (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Buat Unik"
@@ -5656,6 +5692,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Kumpulan"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6569,7 +6616,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7155,6 +7206,16 @@ msgstr "Masukkan Titik"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Kosongkan Transformasi"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Semua Pilihan"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7650,12 +7711,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Set Semula ke Lalai"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Tulis Ganti"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7682,6 +7745,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7795,42 +7912,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8095,6 +8192,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8160,7 +8261,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12141,6 +12242,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12428,6 +12537,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Semua Pilihan"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12901,165 +13015,154 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Eksport..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Nyahpasang"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Mengambil maklumat cermin, sila tunggu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Tidak dapat memulakan subproses!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Menjalankan Skrip Tersuai..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Tidak dapat mencipta folder."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13067,60 +13170,60 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Mengimbas Fail,\n"
"Sila Tunggu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13128,56 +13231,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Kandungan Pakej:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Menyambung..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13185,21 +13288,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Tapis Fail-fail..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Tidak dapat memulakan subproses!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13653,6 +13756,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13942,6 +14053,14 @@ msgstr "Mesti menggunakan sambungan yang sah."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13982,6 +14101,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 02f32b055b..0b9333655f 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -14,7 +14,7 @@
# Byzantin <kasper-hoel@hotmail.com>, 2018.
# Hans-Marius Øverås <hansmariusoveras@gmail.com>, 2019.
# Revolution <revosw@gmail.com>, 2019.
-# Petter Reinholdtsen <pere-weblate@hungry.com>, 2019, 2020.
+# Petter Reinholdtsen <pere-weblate@hungry.com>, 2019, 2020, 2021.
# Patrick Sletvold <patricksletvold@hotmail.com>, 2021.
# Kristoffer <kskau93@gmail.com>, 2021.
# Lili Zoey <sayaks1@gmail.com>, 2021.
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-05-29 13:49+0000\n"
-"Last-Translator: Lili Zoey <sayaks1@gmail.com>\n"
+"PO-Revision-Date: 2021-08-12 21:32+0000\n"
+"Last-Translator: Petter Reinholdtsen <pere-weblate@hungry.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
"engine/godot/nb_NO/>\n"
"Language: nb\n"
@@ -31,7 +31,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1054,7 +1054,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Avhengigheter"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ressurs"
@@ -1739,13 +1739,13 @@ msgstr ""
"Aktiver 'Importer Etc' i Prosjektinnstillinger, eller deaktiver "
"'Drivertilbakefall Aktivert'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Tilpasset feilsøkingsmal ble ikke funnet."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1929,7 +1929,7 @@ msgstr "Gjeldende:"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr "Importer"
+msgstr "importer"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -2149,7 +2149,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importerer Assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Topp"
@@ -2681,6 +2681,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Gjeldende scene er ikke lagret. Åpne likevel?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Angre"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Gjenta"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Kan ikke laste en scene som aldri ble lagret."
@@ -3380,6 +3406,11 @@ msgid "Merge With Existing"
msgstr "Slå sammen Med Eksisterende"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Forandre Omforming"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Åpne & Kjør et Skript"
@@ -3643,6 +3674,10 @@ msgstr ""
"Den valgte ressursen (%s) svarer ikke til noen forventede verdier for denne "
"egenskapen (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Gjør Unik"
@@ -5891,6 +5926,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Endre CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Slett Valgte"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupper"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6874,7 +6921,13 @@ msgid "Remove Selected Item"
msgstr "Fjern Valgte Element"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importer fra Scene"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importer fra Scene"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7491,6 +7544,16 @@ msgstr "Fjern Punkt"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Nullstill Transformasjon"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Lag Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -8011,12 +8074,14 @@ msgid "Skeleton2D"
msgstr "Singleton"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Last Standard"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Overskriv"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -8045,6 +8110,67 @@ msgid "Perspective"
msgstr "Perspektiv"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Venstre knapp"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Høyre knapp"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektiv"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -8162,42 +8288,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Venstre"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Høyrevisning."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Høyre"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Frontvisning."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Front"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Bakvisning."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Bak"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "Høyrevisning"
@@ -8468,6 +8574,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Rediger Poly"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Innstillinger …"
@@ -8533,7 +8644,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12746,6 +12857,15 @@ msgstr "Fjern Funksjon"
msgid "Set Portal Point Position"
msgstr "Fjern Funksjon"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Fjern Funksjon"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -13048,6 +13168,11 @@ msgstr "Genererer Lyskart"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Alle valg"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13554,166 +13679,155 @@ msgstr "Lim inn Noder"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Velg enhet fra listen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Eksporter"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Avinstaller"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Henter fillager, vennligst vent..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Kunne ikke starta subprosess!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Kjører Tilpasser Skript..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Kunne ikke opprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Ugyldig navn."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13721,63 +13835,63 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Gjennomgår filer,\n"
"Vent…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Kunne ikke opprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Legger til %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Eksporter"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13785,59 +13899,59 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Kunne ikke endre project.godot i projsektstien."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Kunne ikke opprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animasjonsverktøy"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Lager konturer..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Kunne ikke opprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13845,21 +13959,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Legger til %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Kunne ikke opprette mappe."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14327,6 +14441,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14621,6 +14743,14 @@ msgstr "Må ha en gyldig filutvidelse."
msgid "Enable grid minimap."
msgstr "Aktiver Snap"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14661,6 +14791,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14713,6 +14847,18 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanter kan ikke endres."
+#~ msgid "Left"
+#~ msgstr "Venstre"
+
+#~ msgid "Right"
+#~ msgstr "Høyre"
+
+#~ msgid "Front"
+#~ msgstr "Front"
+
+#~ msgid "Rear"
+#~ msgstr "Bak"
+
#, fuzzy
#~ msgid "Package Contents:"
#~ msgstr "Innhold:"
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 00f87ef79c..d588afb791 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -1072,7 +1072,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Afhankelijkheden"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Bron"
@@ -1734,13 +1734,13 @@ msgstr ""
"Schakel 'Import Pvrtc' in bij de Projectinstellingen, of schakel de optie "
"'Driver Fallback Enabled' uit."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Aangepast debug pakket niet gevonden."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2124,7 +2124,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Bronnen (her)importeren"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Boven"
@@ -2637,6 +2637,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "De huidige scène is niet opgeslagen. Toch openen?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Ongedaan maken"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Opnieuw"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Een scène die nooit opgeslagen is kan niet opnieuw laden worden."
@@ -3325,6 +3351,11 @@ msgid "Merge With Existing"
msgstr "Met bestaande samenvoegen"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Wijzig Transform"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Voer Een Script Uit"
@@ -3582,6 +3613,10 @@ msgstr ""
"De geselecteerde hulpbron (%s) komt niet overeen met het verwachte type van "
"deze eigenschap (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Maak Uniek"
@@ -5717,6 +5752,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem \"%s\" naar (%d, %d) verplaatsen"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Slot Geselecteerd"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Groepen"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6672,7 +6719,13 @@ msgid "Remove Selected Item"
msgstr "Geselecteerd element verwijderen"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Vanuit scène importeren"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Vanuit scène importeren"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7270,6 +7323,16 @@ msgstr "Telling Gegenereerde Punten:"
msgid "Flip Portal"
msgstr "Horizontaal omdraaien"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Transform wissen"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Knoop maken"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree heeft geen ingesteld pad naar een AnimationPlayer"
@@ -7771,12 +7834,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Maak Rustpose (van Botten)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Botten in rusthouding zetten"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Botten in rusthouding zetten"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Overschrijven"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7803,6 +7868,71 @@ msgid "Perspective"
msgstr "Perspectief"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspectief"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspectief"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspectief"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspectief"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Orthogonaal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspectief"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformatie Afgebroken."
@@ -7921,42 +8051,22 @@ msgid "Bottom View."
msgstr "Onderaanzicht."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Onder"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Linkeraanzicht."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Links"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Rechteraanzicht."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Rechts"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vooraanzicht."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Voor"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Achteraanzicht."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Achter"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Uitlijnen Transform met aanzicht"
@@ -8230,6 +8340,11 @@ msgid "View Portal Culling"
msgstr "Beeldvensterinstellingen"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Beeldvensterinstellingen"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Instellingen..."
@@ -8295,8 +8410,9 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Naamloze gizmo"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Naamloos Project"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12497,6 +12613,16 @@ msgstr "Zet Curve Punt Positie"
msgid "Set Portal Point Position"
msgstr "Zet Curve Punt Positie"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Wijzig Cylinder Vorm Radius"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Zet Curve In Positie"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Wijzig Cylinder Straal"
@@ -12781,6 +12907,11 @@ msgstr "Lightmaps plotten"
msgid "Class name can't be a reserved keyword"
msgstr "Klassennaam kan geen gereserveerd sleutelwoord zijn"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Vul selectie"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Einde van innerlijke exception stack trace"
@@ -13270,75 +13401,75 @@ msgstr "Zoek VisualScript"
msgid "Get %s"
msgstr "Krijg %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Package naam ontbreekt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Pakketsegmenten moeten een lengte ongelijk aan nul hebben."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"Het karakter '%s' is niet toegestaan in Android application pakketnamen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Een getal kan niet het eerste teken zijn in een pakket segment."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Het karakter '%s' kan niet het eerste teken zijn in een pakket segment."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "De pakketnaam moet ten minste een '.' bevatten."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Selecteer apparaat uit de lijst"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exporteer alles"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Verwijderen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Aan het laden, even wachten a.u.b..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Kon het subproces niet opstarten!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Aangepast script uitvoeren ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Map kon niet gemaakt worden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Het hulpmiddel 'apksigner' kon niet gevonden worden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13346,64 +13477,64 @@ msgstr ""
"Geen Android bouwsjabloon geïnstalleerd in dit project. Vanuit het "
"projectmenu kan het geïnstalleerd worden."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "Debug Keystore is niet ingesteld of aanwezig in de Editor Settings."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "Release-Keystore is verkeerd ingesteld in de exportinstelingen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Een geldig Android SDK-pad moet in de Editorinstellingen ingesteld zijn."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Ongeldig Android SDK-pad in Editorinstellingen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "'platform-tools' map ontbreekt!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "Controleer de opgegeven Android SDK map in de Editor instellingen."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "'build tools' map ontbreekt!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Ongeldige publieke sleutel voor APK -uitbreiding."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Ongeldige pakketnaam:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13411,37 +13542,22 @@ msgstr ""
"Ongeldige \"GodotPaymentV3\" module ingesloten in de projectinstelling "
"\"android/modules\" (veranderd in Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Use Custom Build\" moet geactiveerd zijn om plugins te gebruiken."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR"
-"\" staat."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" "
"staat."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" "
-"staat."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13449,58 +13565,58 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Bestanden aan het doornemen,\n"
"Wacht alstublieft..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Kon template niet openen voor export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "%s aan het toevoegen..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Exporteer alles"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Bestandsnaam niet toegestaan! Android App Bundle vereist een *.aab extensie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion werkt niet samen met Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Bestandsnaam niet toegestaan! Android APK vereist een *.apk extensie."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13508,7 +13624,7 @@ msgstr ""
"Geprobeerd met een eigen bouwsjabloon te bouwen, maar versie info ontbreekt. "
"Installeer alstublieft opnieuw vanuit het 'Project' menu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13520,26 +13636,26 @@ msgstr ""
" Godot versie: %s\n"
"Herinstalleer Android build template vanuit het 'Project' menu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Kan project.godot niet bewerken in projectpad."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Kon bestand niet schrijven:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Bouwen van Android Project (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13547,11 +13663,11 @@ msgstr ""
"Bouwen van Androidproject mislukt, bekijk de foutmelding in de uitvoer.\n"
"Zie anders Android bouwdocumentatie op docs.godotengine.org."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Output verplaatsen"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13559,24 +13675,24 @@ msgstr ""
"Niet in staat om het export bestand te kopiëren en hernoemen. Controleer de "
"gradle project folder voor outputs."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animatie niet gevonden: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Contouren aan het creëeren..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Kon template niet openen voor export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13584,21 +13700,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "%s aan het toevoegen..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Kon bestand niet schrijven:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14138,6 +14254,14 @@ msgstr ""
"NavigationMeshInstance moet een (klein)kind zijn van een Navigation-knoop om "
"navigatiegevens door te geven."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14465,6 +14589,14 @@ msgstr "Een geldige extensie moet gebruikt worden."
msgid "Enable grid minimap."
msgstr "Rasteroverzicht inschakelen."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14518,6 +14650,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"De grootte van een Viewport moet groter zijn dan 0 om iets weer te geven."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14569,6 +14705,41 @@ msgstr "Toewijzing aan uniform."
msgid "Constants cannot be modified."
msgstr "Constanten kunnen niet worden aangepast."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Maak Rustpose (van Botten)"
+
+#~ msgid "Bottom"
+#~ msgstr "Onder"
+
+#~ msgid "Left"
+#~ msgstr "Links"
+
+#~ msgid "Right"
+#~ msgstr "Rechts"
+
+#~ msgid "Front"
+#~ msgstr "Voor"
+
+#~ msgid "Rear"
+#~ msgstr "Achter"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Naamloze gizmo"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" is alleen geldig als \"Xr Mode\" op \"Oculus "
+#~ "Mobile VR\" staat."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR"
+#~ "\" staat."
+
#~ msgid "Package Contents:"
#~ msgstr "Pakketinhoud:"
diff --git a/editor/translations/or.po b/editor/translations/or.po
index 8bee62f8d5..c1036fa702 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -991,7 +991,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1620,13 +1620,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1996,7 +1996,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2474,6 +2474,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3097,6 +3121,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3337,6 +3365,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5377,6 +5409,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6275,7 +6317,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6859,6 +6905,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7353,11 +7407,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7385,6 +7439,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7492,42 +7600,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7789,6 +7877,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7854,7 +7946,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11754,6 +11846,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12034,6 +12134,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12500,159 +12604,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12660,57 +12753,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12718,54 +12811,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12773,19 +12866,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13235,6 +13328,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13524,6 +13625,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13564,6 +13673,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 24ad379ad0..7a5a0eb037 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -48,11 +48,12 @@
# gnu-ewm <gnu.ewm@protonmail.com>, 2021.
# vrid <patryksoon@live.com>, 2021.
# Suchy Talerz <kacperkubis06@gmail.com>, 2021.
+# Bartosz Stasiak <bs97086@amu.edu.pl>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-29 21:48+0000\n"
+"PO-Revision-Date: 2021-09-15 00:46+0000\n"
"Last-Translator: Tomek <kobewi4e@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
@@ -62,7 +63,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -411,15 +412,13 @@ msgstr "Wstaw animację"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Nie można otworzyć '%s'."
+msgstr "węzeł \"%s\""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animacja"
+msgstr "animacja"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -428,9 +427,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Właściwość \"%s\" nie istnieje."
+msgstr "właściwość \"%s\""
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -639,9 +637,8 @@ msgid "Go to Previous Step"
msgstr "Przejdź do poprzedniego kroku"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Resetuj"
+msgstr "Zastosuj reset"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -660,9 +657,8 @@ msgid "Use Bezier Curves"
msgstr "Użyj krzywych Beziera"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Wklej ścieżki"
+msgstr "Utwórz ścieżki RESET"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -986,7 +982,6 @@ msgid "Edit..."
msgstr "Edytuj..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "Idź do metody"
@@ -1008,7 +1003,7 @@ msgstr "Brak wyników dla \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Brak dostępnego opisu dla %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1068,7 +1063,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Zależności"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Zasoby"
@@ -1108,17 +1103,16 @@ msgid "Owners Of:"
msgstr "Właściciele:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
"Usunąć wybrane pliki z projektu? (nie można tego cofnąć)\n"
-"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić."
+"W zależności od konfiguracji systemu plików, te pliki zostaną przeniesione "
+"do kosza albo usunięte na stałe."
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
@@ -1128,7 +1122,8 @@ msgid ""
msgstr ""
"Usuwane pliki są wymagane przez inne zasoby, żeby mogły one działać.\n"
"Usunąć mimo to? (nie można tego cofnąć)\n"
-"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić."
+"W zależności od konfiguracji systemu plików, te pliki zostaną przeniesione "
+"do kosza albo usunięte na stałe."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1298,41 +1293,37 @@ msgid "Licenses"
msgstr "Licencje"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Błąd otwierania pliku pakietu (nie jest w formacie ZIP)."
+msgstr "Błąd otwierania pliku zasobu dla \"%s\" (nie jest w formacie ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
msgstr "%s (już istnieje)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Zawartość zasobu \"%s\" - %d plik(ów) konfliktuje z twoim projektem:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Zawartość zasobu \"%s\" - Żaden plik nie konfliktuje z twoim projektem:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Dekompresja zasobów"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Nie powiodło się wypakowanie z pakietu następujących plików:"
+msgstr "Nie powiodło się wypakowanie następujących plików z zasobu \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "I jeszcze %s plików."
+msgstr "(i jeszcze %s plików)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pakiet zainstalowano poprawnie!"
+msgstr "Zasób \"%s\" zainstalowany pomyślnie!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1344,9 +1335,8 @@ msgid "Install"
msgstr "Zainstaluj"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
-msgstr "Instalator pakietu"
+msgstr "Instalator zasobu"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1409,7 +1399,6 @@ msgid "Bypass"
msgstr "Omiń"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
msgstr "Opcje magistrali"
@@ -1577,13 +1566,12 @@ msgid "Can't add autoload:"
msgstr "Nie można dodać Autoload:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "Plik nie istnieje."
+msgstr "Ścieżka %s jest nieprawidłowa. Plik nie istnieje."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s jest nieprawidłową ścieżką. Nie jest ścieżką zasobu (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1607,9 +1595,8 @@ msgid "Name"
msgstr "Nazwa"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Zmienna"
+msgstr "Zmienna globalna"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1733,13 +1720,13 @@ msgstr ""
"Włącz \"Import Pvrtc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback "
"Enabled\"."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Nie znaleziono własnego szablonu debugowania."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1783,48 +1770,50 @@ msgstr "Dok importowania"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Pozwala wyświetlać i edytować sceny 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Pozwala edytować skrypty, z użyciem zintegrowanego edytora skryptów."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Zapewnia wbudowany dostęp do Biblioteki Zasobów."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Pozwala edytować hierarchię węzłów w doku sceny."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Pozwala pracować z sygnałami i grupami węzłów zaznaczonych w doku sceny."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Pozwala przeglądać lokalny system plików używając dedykowanego doku."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Pozwala konfigurować ustawienia importu dla indywidualnych zasobów. Wymaga "
+"doku systemu plików do funkcjonowania."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Bieżący)"
+msgstr "(bieżący)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(żaden)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Usunąć aktualnie wybrany profil, \"%s\"? Nie można cofnąć."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1855,19 +1844,16 @@ msgid "Enable Contextual Editor"
msgstr "Włącz edytor kontekstowy"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Właściwości:"
+msgstr "Właściwości klasy:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Funkcje"
+msgstr "Główne funkcjonalności:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Włączone klasy:"
+msgstr "Węzły i klasy:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1885,7 +1871,6 @@ msgid "Error saving profile to path: '%s'."
msgstr "Błąd zapisywania profilu do ścieżki \"%s\"."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
msgstr "Resetuj do domyślnych"
@@ -1894,14 +1879,12 @@ msgid "Current Profile:"
msgstr "Bieżący profil:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Usuń profil"
+msgstr "Utwórz profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Usuń Kafelek"
+msgstr "Usuń profil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1921,18 +1904,17 @@ msgid "Export"
msgstr "Eksportuj"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Bieżący profil:"
+msgstr "Konfiguruj wybrany profil:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opcje Tekstury"
+msgstr "Opcje dodatkowe:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Utwórz lub zaimportuj profil, by edytować dostępne klasy i właściwości."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1959,7 +1941,6 @@ msgid "Select Current Folder"
msgstr "Wybierz bieżący katalog"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "Plik istnieje, nadpisać?"
@@ -2120,7 +2101,7 @@ msgstr "Istnieje wiele importerów różnych typów dla pliku %s, import przerwa
msgid "(Re)Importing Assets"
msgstr "(Ponowne) importowanie zasobów"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Góra"
@@ -2357,6 +2338,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Kręci się, gdy edytor się przerysowuje.\n"
+"Ciągła aktualizacja jest włączona, co zwiększa pobór mocy. Kliknij, by ją "
+"wyłączyć."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2593,13 +2577,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"Aktualna scena nie ma korzenia, ale %s zmodyfikowane zasoby zostały zapisane "
+"i tak."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Scena musi posiadać korzeń, by ją zapisać."
+msgstr ""
+"Scena musi posiadać korzeń, by ją zapisać. Możesz dodać węzeł korzenia "
+"używając doku drzewa sceny."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2630,6 +2617,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Aktualna scena nie została zapisana. Otworzyć mimo to?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Cofnij"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Ponów"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nie można przeładować sceny która nie została zapisana."
@@ -2981,9 +2994,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Eksplorator osieroconych zasobów..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Zmień nazwę projektu"
+msgstr "Wczytaj ponownie aktualny projekt"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3142,22 +3154,20 @@ msgid "Help"
msgstr "Pomoc"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Otwórz dokumentację"
+msgstr "Dokumentacja online"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Pytania i odpowiedzi"
#: editor/editor_node.cpp
msgid "Report a Bug"
msgstr "Zgłoś błąd"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "Ustaw Wartość"
+msgstr "Zasugeruj funkcjonalność"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3168,9 +3178,8 @@ msgid "Community"
msgstr "Społeczność"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "O silniku"
+msgstr "O Godocie"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3262,14 +3271,12 @@ msgid "Manage Templates"
msgstr "Zarządzaj szablonami"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "Zainstaluj z pliku"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Wybierz siatkę źródłową:"
+msgstr "Wybierz pliki źródłowe Androida"
#: editor/editor_node.cpp
msgid ""
@@ -3317,6 +3324,11 @@ msgid "Merge With Existing"
msgstr "Połącz z Istniejącym"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Zmiana transformacji"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Otwórz i Uruchom Skrypt"
@@ -3351,9 +3363,8 @@ msgid "Select"
msgstr "Zaznacz"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Wybierz bieżący katalog"
+msgstr "Wybierz aktualną"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3388,9 +3399,8 @@ msgid "No sub-resources found."
msgstr "Nie znaleziono podzasobów."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Nie znaleziono podzasobów."
+msgstr "Otwórz listę pod-zasobów."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3417,14 +3427,12 @@ msgid "Update"
msgstr "Odśwież"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Wersja:"
+msgstr "Wersja"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autorzy"
+msgstr "Autor"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3437,14 +3445,12 @@ msgid "Measure:"
msgstr "Zmierzono:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Czas klatki (sek)"
+msgstr "Czas klatki (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "Średni czas (sek)"
+msgstr "Średni czas (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3471,6 +3477,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"Inkluzyjny: Zawiera czas z innych funkcji wywołanych przez tę funkcję.\n"
+"Użyj tego, by znaleźć wąskie gardła.\n"
+"\n"
+"Własny: Licz tylko czas spędzony w samej funkcji, bez funkcji wywołanych "
+"przez nią.\n"
+"Użyj tego, by znaleźć pojedyncze funkcje do optymalizacji."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3573,6 +3585,10 @@ msgstr ""
"Wybrany zasób (%s) nie zgadza się z żadnym rodzajem przewidywanym dla tego "
"użycia (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Zrób unikalny"
@@ -3592,9 +3608,8 @@ msgid "Paste"
msgstr "Wklej"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Konwersja do %s"
+msgstr "Konwertuj do %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3643,10 +3658,9 @@ msgid "Did you forget the '_run' method?"
msgstr "Zapomniano metody \"_run\"?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Przytrzyma Ctrl, by zaokrąglić do liczb całkowitych. Przytrzymaj Shift dla "
+"Przytrzymaj %s, by zaokrąglić do liczb całkowitych. Przytrzymaj Shift dla "
"bardziej precyzyjnych zmian."
#: editor/editor_sub_scene.cpp
@@ -3667,49 +3681,43 @@ msgstr "Zaimportuj z węzła:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Otwórz folder zawierający te szablony."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Odinstaluj te szablony."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "Nie ma pliku \"%s\"."
+msgstr "Brak dostępnych mirrorów."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "Pobieranie informacji o serwerach lustrzanych, proszę czekać..."
+msgstr "Pobieranie listy mirrorów..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "Zaczynam pobieranie..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
msgstr "Błąd podczas żądania adresu URL:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "Łączenie z serwerem lustrzanym..."
+msgstr "Łączenie z mirrorem..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Nie udało się odnaleźć hosta:"
+msgstr "Nie udało się rozstrzygnąć żądanego adresu."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Nie można połączyć do hosta:"
+msgstr "Nie można połączyć z mirrorem."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "Brak odpowiedzi hosta:"
+msgstr "Brak odpowiedzi mirrora."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3717,18 +3725,16 @@ msgid "Request failed."
msgstr "Żądanie nie powiodło się."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Żądanie nieudane, zbyt dużo przekierowań"
+msgstr "Żądanie skończyło w pętli przekierowań."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Żądanie nie powiodło się."
+msgstr "Żądanie nie powiodło się:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Pobieranie ukończone; rozpakowuję szablony..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3747,13 +3753,12 @@ msgid "Error getting the list of mirrors."
msgstr "Błąd odbierania listy mirrorów."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
-msgstr "Błąd parsowania JSONa listy mirrorów. Zgłoś proszę ten błąd!"
+msgstr "Błąd parsowania JSONa z listą mirrorów. Zgłoś proszę ten błąd!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Najlepszy dostępny mirror"
#: editor/export_template_manager.cpp
msgid ""
@@ -3806,24 +3811,20 @@ msgid "SSL Handshake Error"
msgstr "Błąd podczas wymiany (handshake) SSL"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Nie można otworzyć pliku zip szablonów eksportu."
+msgstr "Nie można otworzyć pliku szablonów eksportu."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Nieprawidłowy format pliku version.txt w szablonach: %s."
+msgstr "Nieprawidłowy format version.txt w pliku szablonów eksportu: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Nie znaleziono pliku version.txt w szablonach."
+msgstr "Nie znaleziono version.txt w pliku szablonu eksportu."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Błąd tworzenia ścieżki dla szablonów:"
+msgstr "Błąd tworzenia ścieżki do rozpakowania szablonów:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3834,9 +3835,8 @@ msgid "Importing:"
msgstr "Importowanie:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Usunąć wersję \"%s\" szablonu?"
+msgstr "Usunąć szablony dla wersji \"%s\"?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3852,54 +3852,51 @@ msgstr "Aktualna wersja:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
-msgstr ""
+msgstr "Brakuje szablonów eksportu. Pobierz je lub zainstaluj z pliku."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Szablony eksportu są zainstalowane i gotowe do użycia."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Otwórz plik"
+msgstr "Otwórz folder"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Otwórz folder zawierający zainstalowane szablony dla aktualnej wersji."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Odinstaluj"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Początkowa wartość dla licznika"
+msgstr "Odinstaluj szablony dla aktualnej wersji."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Błąd pobierania"
+msgstr "Pobierz z:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Uruchom w przeglądarce"
+msgstr "Otwórz w przeglądarce"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Kopiuj błąd"
+msgstr "Kopiuj URL mirrora"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Pobierz i zainstaluj"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Pobierz i zainstaluj szablony dla aktualnej wersji z najlepszego dostępnego "
+"mirroru."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -3908,14 +3905,12 @@ msgstr ""
"programistycznych."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
msgstr "Zainstaluj z pliku"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Zaimportuj Szablony z pliku ZIP"
+msgstr "Zainstaluj szablony z lokalnego pliku."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3923,19 +3918,16 @@ msgid "Cancel"
msgstr "Anuluj"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Nie można otworzyć pliku zip szablonów eksportu."
+msgstr "Anuluj pobieranie szablonów."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Zainstalowane szablony:"
+msgstr "Inne zainstalowane wersje:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Odinstaluj"
+msgstr "Odinstaluj szablon"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3950,6 +3942,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Szablony kontynuują pobieranie.\n"
+"Możesz doświadczyć krótkiego zacięcia edytora, kiedy skończą."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4097,35 +4091,32 @@ msgid "Collapse All"
msgstr "Zwiń wszystko"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Przeszukaj pliki"
+msgstr "Sortuj pliki"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Sortuj po nazwie (rosnąco)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Sortuj po nazwie (malejąco)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Sortuj po typie (rosnąco)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Sortuj po typie (malejąco)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Data modyfikacji"
+msgstr "Ostatnie zmodyfikowane"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Data modyfikacji"
+msgstr "Pierwsze zmodyfikowane"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4137,7 +4128,7 @@ msgstr "Zmień nazwę..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Przełącz na pasek wyszukiwania"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4447,14 +4438,12 @@ msgid "Failed to load resource."
msgstr "Nie udało się wczytać zasobu."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Właściwości"
+msgstr "Skopiuj właściwości"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Właściwości"
+msgstr "Wklej właściwości"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4479,23 +4468,20 @@ msgid "Save As..."
msgstr "Zapisz jako..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Nie znaleziono w ścieżce zasobów."
+msgstr "Dodatkowe opcje zasobów."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Edytuj schowek zasobów"
+msgstr "Edytuj zasób ze schowka"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Kopiuj zasób"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Stwórz wbudowany"
+msgstr "Uczyń zasób wbudowanym"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4510,9 +4496,8 @@ msgid "History of recently edited objects."
msgstr "Historia ostatnio edytowanych obiektów."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Otwórz dokumentację"
+msgstr "Otwórz dokumentację dla tego obiektu."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4523,9 +4508,8 @@ msgid "Filter properties"
msgstr "Filtruj właściwości"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Właściwości obiektu."
+msgstr "Zarządzaj właściwościami obiektu."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4770,9 +4754,8 @@ msgid "Blend:"
msgstr "Mieszanie:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Parametr zmieniony"
+msgstr "Parametr zmieniony:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5503,11 +5486,11 @@ msgstr "Wszystko"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Przeszukaj szablony, projekty i dema"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Przeszukaj zasoby (bez szablonów, projektów i dem)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5551,7 +5534,7 @@ msgstr "Plik ZIP assetów"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Graj/Pauzuj podgląd audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5710,6 +5693,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Przesuń CanvasItem \"%s\" na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Zablokuj wybrane"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupa"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5812,13 +5807,12 @@ msgstr "Zmień zakotwiczenie"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
"Przejmij kamerę gry\n"
-"Zastępuje kamerę gry kamerą z widoku edytora."
+"Nadpisuje kamerę uruchomionego projektu kamerą z widoku edytora."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5827,6 +5821,9 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Przejmij kamerę gry\n"
+"Nie ma uruchomionej instancji projektu. Uruchom projekt z edytora, by użyć "
+"tej funkcjonalności."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5894,31 +5891,27 @@ msgstr "Tryb zaznaczenia"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Usuń zaznaczony węzeł lub przejście."
+msgstr "Przeciągnij: Obróć zaznaczony węzeł wokół osi obrotu."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Przeciągnij: Przesuń"
+msgstr "Alt+Przeciągnij: Przesuń zaznaczony węzeł."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Usuń zaznaczony węzeł lub przejście."
+msgstr "V: Ustaw pozycję osi obrotu zaznaczonego węzła."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Pokaż listę obiektów w miejscu kliknięcia\n"
-"(tak samo jak Alt+RMB w trybie zaznaczania)."
+"Alt+PPM: Pokaż listę wszystkich węzłów na klikniętej pozycji, wliczając "
+"zablokowane."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "Ctrl+PPM: Dodaj węzeł na klikniętej pozycji."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5990,7 +5983,7 @@ msgstr "Przyciągaj względnie"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr "Użyj krokowania na poziomie pikseli"
+msgstr "Przyciągaj do pikseli"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart Snapping"
@@ -6156,14 +6149,12 @@ msgid "Clear Pose"
msgstr "Wyczyść pozę"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Dodaj węzeł"
+msgstr "Dodaj węzeł tutaj"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Dodaj instancję sceny"
+msgstr "Instancjonuj scenę tutaj"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6179,49 +6170,43 @@ msgstr "Przesuń widok"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Oddal do 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Oddal do 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Oddal do 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Oddal"
+msgstr "Oddal do 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Oddal"
+msgstr "Oddal do 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Oddal"
+msgstr "Przybliż do 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Oddal"
+msgstr "Przybliż do 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Oddal"
+msgstr "Przybliż do 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Oddal"
+msgstr "Przybliż do 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Przybliż do 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6468,9 +6453,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr "Nie udało się utworzyć pojedynczego wypukłego kształtu kolizji."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
-msgstr "Utwórz pojedynczy wypukły kształt"
+msgstr "Utwórz uproszczony wypukły kształt"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Single Convex Shape"
@@ -6506,9 +6490,8 @@ msgid "No mesh to debug."
msgstr "Brak siatki do debugowania."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "Model nie posiada UV w tej warstwie"
+msgstr "Siatka nie posiada UV na warstwie %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6573,9 +6556,8 @@ msgstr ""
"To jest najszybsza (ale najmniej dokładna) opcja dla detekcji kolizji."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Utwórz pojedynczego wypukłego sąsiada kolizji"
+msgstr "Utwórz uproszczonego wypukłego sąsiada kolizji"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6583,20 +6565,23 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Tworzy uproszczony wypukły kształt kolizji.\n"
+"Podobne do pojedynczego kształtu, ale w niektórych przypadkach tworzy "
+"prostszą geometrię, kosztem dokładności."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
msgstr "Utwórz wiele wypukłych sąsiadów kolizji"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Tworzy kształt kolizji oparty o wielokąty.\n"
-"To jest złoty środek względem wydajności powyższych dwóch opcji."
+"To jest złoty środek względem wydajności pomiędzy pojedynczym kształtem, a "
+"kolizją opartą o wielokąty."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -6663,7 +6648,13 @@ msgid "Remove Selected Item"
msgstr "Usuń zaznaczony element"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Import ze sceny"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Import ze sceny"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7238,24 +7229,30 @@ msgid "ResourcePreloader"
msgstr "Wstępny ładowacz zasobów"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Odbij poziomo"
+msgstr "Odbij portale"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Wygeneruj chmurę punktów:"
+msgstr "Wygeneruj punkty pokoju"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Wygeneruj chmurę punktów:"
+msgstr "Wygeneruj punkty"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Odbij poziomo"
+msgstr "Odbij portal"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Wyczyść przekształcenie"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Utwórz węzeł"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7760,12 +7757,14 @@ msgid "Skeleton2D"
msgstr "Szkielet 2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Utwórz pozę spoczynkową (z kości)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Ustaw kości do pozy spoczynkowej"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Ustaw kości do pozy spoczynkowej"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Nadpisz"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7792,6 +7791,71 @@ msgid "Perspective"
msgstr "Perspektywa"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektywa"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektywa"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektywa"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektywa"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonalna"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektywa"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformacja Zaniechana."
@@ -7818,20 +7882,17 @@ msgid "None"
msgstr "Brak"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Status:"
+msgstr "Obróć"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Przesuń:"
+msgstr "Przesuń"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Skala:"
+msgstr "Skaluj"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7854,52 +7915,44 @@ msgid "Animation Key Inserted."
msgstr "Wstawiono klucz animacji."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Wysokość"
+msgstr "Pułap:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Odchylenie:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Rozmiar: "
+msgstr "Rozmiar:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Narysowane obiekty"
+msgstr "Narysowane obiekty:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Zmiany materiału"
+msgstr "Zmiany materiału:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Zmiany Shadera"
+msgstr "Zmiany shadera:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Zmiany powierzchni"
+msgstr "Zmiany powierzchni:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Wywołania rysowania"
+msgstr "Wywołania rysowania:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Wierzchołki"
+msgstr "Wierzchołki:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7910,42 +7963,22 @@ msgid "Bottom View."
msgstr "Widok z dołu."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Dół"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Widok z lewej."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Lewa"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Widok z prawej."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Prawa"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Widok z przodu."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Przód"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Widok z tyłu."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Tył"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Dopasuj położenie do widoku"
@@ -8054,9 +8087,8 @@ msgid "Freelook Slow Modifier"
msgstr "Wolny modyfikator swobodnego widoku"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Zmień rozmiar kamery"
+msgstr "Przełącz podgląd kamery"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8078,9 +8110,8 @@ msgstr ""
"Nie może być używana jako miarodajny wskaźnik wydajności w grze."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Konwersja do %s"
+msgstr "Konwertuj pokoje"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8102,7 +8133,6 @@ msgstr ""
"powierzchnie (\"x-ray\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "Przyciągnij węzły do podłogi"
@@ -8120,7 +8150,7 @@ msgstr "Użyj przyciągania"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "Konwertuje pokoje do cullingu portali."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8216,9 +8246,13 @@ msgid "View Grid"
msgstr "Pokaż siatkę"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Ustawienia widoku"
+msgstr "Culling portali widoku"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Culling portali widoku"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8286,8 +8320,9 @@ msgid "Post"
msgstr "Po"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Uchwyt bez nazwy"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Projekt bez nazwy"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8364,7 +8399,7 @@ msgstr "Utwórz równorzędny węzeł LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite"
-msgstr "Postać"
+msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Simplification: "
@@ -8539,221 +8574,196 @@ msgid "TextureRegion"
msgstr "Obszar tekstury"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Kolor"
+msgstr "Kolory"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Font"
+msgstr "Fonty"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Ikona"
+msgstr "Ikony"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Styleboxy"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} kolor(y)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Nie znaleziono podzasobów."
+msgstr "Nie znaleziono kolorów."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Stałe"
+msgstr "{num} stałych"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Stała koloru."
+msgstr "Nie znaleziono stałych."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} czcionki"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Nie znaleziono!"
+msgstr "Nie znaleziono czcionek."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} ikon"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Nie znaleziono!"
+msgstr "Nie znaleziono ikon."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} stylebox(y)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Nie znaleziono podzasobów."
+msgstr "Nie znaleziono styleboxów."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} aktualnie wybrane"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Nic nie zostało wybrane do importu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Zaimportuj motyw"
+msgstr "Importowanie elementów motywu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "Importowanie elementów {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Zamknąć edytor?"
+msgstr "Aktualizowanie edytora"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "Analizowanie"
+msgstr "Finalizowanie"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtr: "
+msgstr "Filtr:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "z danymi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Wybierz węzeł"
+msgstr "Zaznacz po typie danych:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Wybierz podział, by go usunąć."
+msgstr "Zaznacz wszystkie widoczne elementy kolorów."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Zaznacz wszystkie widoczne elementy kolorów oraz ich dane."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Odznacz wszystkie widoczne elementy kolorów."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Najpierw wybierz ustawienie z listy!"
+msgstr "Zaznacz wszystkie widoczne elementy stałych."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Zaznacz wszystkie widoczne elementy stałych i ich dane."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Odznacz wszystkie widoczne elementy stałych."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Najpierw wybierz ustawienie z listy!"
+msgstr "Zaznacz wszystkie widoczne elementy czcionek."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Zaznacz wszystkie widoczne elementy czcionek i ich dane."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Odznacz wszystkie widoczne elementy czcionek."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Najpierw wybierz ustawienie z listy!"
+msgstr "Zaznacz wszystkie widoczne elementy ikon."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Najpierw wybierz ustawienie z listy!"
+msgstr "Zaznacz wszystkie widoczne elementy ikon i ich dane."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Najpierw wybierz ustawienie z listy!"
+msgstr "Odznacz wszystkie widoczne elementy ikon."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "Zaznacz wszystkie widoczne elementy styleboxów."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "Zaznacz wszystkie widoczne elementy styleboxów i ich dane."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "Odznacz wszystkie widoczne elementy styleboxów."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Uwaga: Dodanie danych ikon może znacząco zwiększyć rozmiar twojego zasobu "
+"Theme."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Zwiń wszystko"
+msgstr "Zwiń typy."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Rozwiń wszystko"
+msgstr "Rozwiń typy."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Wybierz plik szablonu"
+msgstr "Zaznacz wszystkie elementy motywu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Zaznacz Punkty"
+msgstr "Zaznacz z danymi"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "Zaznacz wszystkie elementy motywu z ich danymi."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Zaznacz wszystko"
+msgstr "Odznacz wszystko"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Odznacz wszystkie elementy motywu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importuj Scenę"
+msgstr "Importuj zaznaczone"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8761,283 +8771,250 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
+"Zakładka importu elementów ma zaznaczone elementy. Zaznaczenie zostanie "
+"utracone po zamknięciu tego okna.\n"
+"Zamknąć tak czy inaczej?"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Wybierz typ motywu z listy, aby edytować jego elementy.\n"
+"Możesz dodać niestandardowy typ lub importować typ wraz z jego elementami z "
+"innego motywu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Usuń wszystkie elementy"
+msgstr "Usuń wszystkie elementy kolorów"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Usuń element"
+msgstr "Zmień nazwę elementu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Usuń wszystkie elementy"
+msgstr "Usuń wszystkie elementy stałych"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Usuń wszystkie elementy"
+msgstr "Usuń wszystkie elementy czcionek"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Usuń wszystkie elementy"
+msgstr "Usuń wszystkie elementy ikon"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Usuń wszystkie elementy"
+msgstr "Usuń wszystkie elementy styleboxów"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Ten motyw jest pusty.\n"
+"Dodaj więcej elementów ręcznie albo importując z innego motywu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Dodaj klasę elementów"
+msgstr "Dodaj element koloru"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Dodaj klasę elementów"
+msgstr "Dodaj element stałej"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Dodaj element"
+msgstr "Dodaj element czcionki"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Dodaj element"
+msgstr "Dodaj element ikony"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Dodaj wszystkie elementy"
+msgstr "Dodaj element stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Usuń elementy klasy"
+msgstr "Zmień nazwę elementu koloru"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Usuń elementy klasy"
+msgstr "Zmień nazwę elementu stałej"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Zmień nazwę węzła"
+msgstr "Zmień nazwę elementu czcionki"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Zmień nazwę węzła"
+msgstr "Zmień nazwę elementu ikony"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Usuń zaznaczony element"
+msgstr "Zmień nazwę elementu stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Plik niepoprawny, nie jest układem magistral audio."
+msgstr "Plik niepoprawny, nie jest zasobem motywu (Theme)."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Nieprawidłowy plik, taki sam jak edytowany zasób motywu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Zarządzaj szablonami"
+msgstr "Zarządzaj elementami motywu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Edytowalny element"
+msgstr "Edytuj elementy"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Typ:"
+msgstr "Typy:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Typ:"
+msgstr "Dodaj typ:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Dodaj element"
+msgstr "Dodaj element:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Dodaj wszystkie elementy"
+msgstr "Dodaj element stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Usuń element"
+msgstr "Usuń elementy:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Usuń elementy klasy"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Usuń elementy klasy"
+msgstr "Usuń własne elementy"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Usuń wszystkie elementy"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Elementy motywu interfejsu"
+msgstr "Dodaj element motywu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nazwa węzła:"
+msgstr "Stara nazwa:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Zaimportuj motyw"
+msgstr "Importuj elementy"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Domyślny"
+msgstr "Domyślny motyw"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Edytuj motyw"
+msgstr "Motyw edytora"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Usuń zasób"
+msgstr "Wybierz inny zasób motywu:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Zaimportuj motyw"
+msgstr "Inny motyw"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Zmień nazwę ściezki animacji"
+msgstr "Potwierdź zmianę nazwy elementu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Grupowa zmiana nazwy"
+msgstr "Anuluj zmianę nazwy elementu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Nadpisuje"
+msgstr "Nadpisz element"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Odepnij ten StyleBox jako główny styl."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Przypnij ten StyleBox jako główny styl. Edytowanie jego właściwości "
+"zaktualizuje te same właściwości we wszystkich innych StyleBoxach tego typu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Typ"
+msgstr "Dodaj typ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Dodaj element"
+msgstr "Dodaj typ elementu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Typ węzła"
+msgstr "Typy węzłów:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Wczytaj domyślny"
+msgstr "Pokaż domyślne"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
-msgstr ""
+msgstr "Pokaż domyślne elementy typu obok elementów, które zostały nadpisane."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Nadpisuje"
+msgstr "Nadpisz wszystkie"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Nadpisz wszystkie domyślne elementy typu."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Motyw"
+msgstr "Motyw:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Zarządzaj szablonami eksportu..."
+msgstr "Zarządzaj elementami..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Dodaj, usuń, organizuj i importuj elementy motywu (Theme)."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Podgląd"
+msgstr "Dodaj podgląd"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Odśwież podgląd"
+msgstr "Domyślny podgląd"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Wybierz siatkę źródłową:"
+msgstr "Wybierz scenę UI:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
"Toggle the control picker, allowing to visually select control types for "
"edit."
msgstr ""
+"Przełącz pobieranie kontrolek, pozwalające na wizualne wybranie typów "
+"kontrolek do edytowania."
#: editor/plugins/theme_editor_preview.cpp
msgid "Toggle Button"
@@ -9072,9 +9049,8 @@ msgid "Checked Radio Item"
msgstr "Zaznaczony element opcji"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Named Separator"
-msgstr "Nazwany sep."
+msgstr "Nazwany separator"
#: editor/plugins/theme_editor_preview.cpp
msgid "Submenu"
@@ -9127,19 +9103,21 @@ msgstr "Ma,Wiele,Opcji"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Nieprawidłowa ścieżka, zasób PackedScene został prawdopodobnie przeniesiony "
+"lub usunięty."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
+"Nieprawidłowy zasób PackedScene, musi posiadać węzeł Control jako korzeń."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "Plik niepoprawny, nie jest układem magistral audio."
+msgstr "Nieprawidłowy plik, nie jest zasobem PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Przeładuj scenę, by odzwierciedlić jej najbardziej aktualny stan."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -10540,9 +10518,8 @@ msgid "VisualShader"
msgstr "Shader wizualny"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Edytuj Wizualną Właściwość"
+msgstr "Edytuj wizualną właściwość:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10667,9 +10644,8 @@ msgid "Script"
msgstr "Skrypt"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Tryb eksportu skryptów:"
+msgstr "Tryb eksportu GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -10677,21 +10653,20 @@ msgstr "Tekst"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Skompilowany kod bajtowy (szybsze ładowanie)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "Zaszyfrowany (podaj klucz poniżej)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "Nieprawidłowy klucz szyfrowania (długość musi wynosić 64 znaki)"
+msgstr ""
+"Nieprawidłowy klucz szyfrowania (długość musi wynosić 64 znaki szesnastkowe)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "Klucz szyfrujący skryptu (256-bit jako hex):"
+msgstr "Klucz szyfrujący GDScript (256 bitów jako szesnastkowy):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10764,7 +10739,6 @@ msgid "Imported Project"
msgstr "Zaimportowano projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
msgstr "Nieprawidłowa nazwa projektu."
@@ -10991,14 +10965,12 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Czy na pewno chcesz uruchomić %d projektów na raz?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Wybierz urządzenie z listy"
+msgstr "Usunąć %d projektów z listy?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Wybierz urządzenie z listy"
+msgstr "Usunąć ten projekt z listy?"
#: editor/project_manager.cpp
msgid ""
@@ -11031,9 +11003,8 @@ msgid "Project Manager"
msgstr "Menedżer projektów"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projekty"
+msgstr "Lokalne projekty"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11044,23 +11015,20 @@ msgid "Last Modified"
msgstr "Data modyfikacji"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Wyeksportuj projekt"
+msgstr "Edytuj projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Zmień nazwę projektu"
+msgstr "Uruchom projekt"
#: editor/project_manager.cpp
msgid "Scan"
msgstr "Skanuj"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projekty"
+msgstr "Skanuj projekty"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11071,14 +11039,12 @@ msgid "New Project"
msgstr "Nowy projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Zaimportowano projekt"
+msgstr "Importuj projekt"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Zmień nazwę projektu"
+msgstr "Usuń projekt"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11089,9 +11055,8 @@ msgid "About"
msgstr "O silniku"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Biblioteka zasobów"
+msgstr "Projekty Biblioteki Zasobów"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11103,7 +11068,7 @@ msgstr "Usuń wszystkie"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Usuń także projekt (nie można cofnąć!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11118,20 +11083,17 @@ msgstr ""
"Czy chcesz zobaczyć oficjalne przykładowe projekty w Bibliotece Zasobów?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Filtruj właściwości"
+msgstr "Filtruj projekty"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"Pasek wyszukiwania filtruje projekty po nazwie i ostatnim komponencie "
-"ścieżki.\n"
-"By filtrować po nazwie i pełnej ścieżce, zapytanie musi zawierać "
+"To pole filtruje projekty po nazwie i ostatniej składowej ścieżki.\n"
+"By filtrować projekty po nazwie i pełnej ścieżce, zapytanie musi zawierać "
"przynajmniej jeden znak \"/\"."
#: editor/project_settings_editor.cpp
@@ -11140,7 +11102,7 @@ msgstr "Klawisz "
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "Fizyczny klawisz"
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11188,7 +11150,7 @@ msgstr "Urządzenie"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (fizyczny)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11331,23 +11293,20 @@ msgid "Override for Feature"
msgstr "Nadpisanie dla cechy"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Dodaj tłumaczenie"
+msgstr "Dodaj %d tłumaczeń"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
msgstr "Usuń tłumaczenie"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Dodaj mapowanie zasobu"
+msgstr "Przemapowanie tłumaczenia zasobu: Dodaj %d ścieżek"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Dodaj mapowanie zasobu"
+msgstr "Przemapowanie tłumaczenia zasobu: Dodaj %d przemapowań"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -11790,13 +11749,15 @@ msgstr "Usunąć węzeł \"%s\"?"
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
-msgstr ""
+msgstr "Zapisane gałęzi jako scena wymaga, aby scena była otwarta w edytorze."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Zapisanie gałęzi jako scena wymaga wybrania tylko jednego węzła, a masz "
+"wybrane %d węzłów."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11805,6 +11766,10 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Nie można zapisać gałęzi z korzenia jako instancji sceny.\n"
+"By utworzyć edytowalną kopię aktualnej sceny, zduplikuj ją z menu "
+"kontekstowego doku systemu plików\n"
+"lub utwórz scenę dziedziczącą używając Scena > Nowa scena dziedzicząca..."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11812,6 +11777,9 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Nie można zapisać gałęzi instancji sceny.\n"
+"By utworzyć wariację sceny, zamiast tego możesz stworzyć scenę dziedziczącą "
+"bazowaną na instancji sceny, używając Scena -> Nowa scena dziedzicząca..."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12218,6 +12186,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Ostrzeżenie: Posiadanie skryptu z nazwą taką samą jak typ wbudowany jest "
+"zazwyczaj niepożądane."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12289,7 +12259,7 @@ msgstr "Kopiuj błąd"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Otwórz źródło C++ na GitHubie"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12468,14 +12438,22 @@ msgid "Change Ray Shape Length"
msgstr "Zmień długość Ray Shape"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Ustaw pozycje punktu krzywej"
+msgstr "Ustaw pozycję punktu pokoju"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Ustaw pozycje punktu krzywej"
+msgstr "Ustaw pozycję punktu portalu"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Zmień promień kształtu cylindra"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Ustaw punkt kontrolny wchodzący z krzywej"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12587,14 +12565,12 @@ msgid "Object can't provide a length."
msgstr "Obiekt nie może podać długości."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Eksportuj bibliotekę Meshów"
+msgstr "Eksportowani siatki GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Eksport..."
+msgstr "Eksportuj GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12637,9 +12613,8 @@ msgid "GridMap Paint"
msgstr "Malowanie GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "GridMap Wypełnij zaznaczenie"
+msgstr "Wybór GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12762,6 +12737,11 @@ msgstr "Kreślenie map światła"
msgid "Class name can't be a reserved keyword"
msgstr "Nazwa klasy nie może być słowem zastrzeżonym"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Wypełnij zaznaczone"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Koniec śladu stosu wewnętrznego wyjątku"
@@ -12891,14 +12871,12 @@ msgid "Add Output Port"
msgstr "Dodaj port wyjściowy"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Zmień typ"
+msgstr "Zmień typ portu"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Zmień nazwę portu wejściowego"
+msgstr "Zmień nazwę portu"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -13013,9 +12991,8 @@ msgid "Add Preload Node"
msgstr "Dodaj wstępnie wczytany węzeł"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Dodaj węzeł"
+msgstr "Dodaj węzeł(y)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13247,73 +13224,67 @@ msgstr "Przeszukaj VisualScript"
msgid "Get %s"
msgstr "Przyjmij %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Brakuje nazwy paczki."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Segmenty paczki muszą mieć niezerową długość."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Znak \"%s\" nie jest dozwolony w nazwach paczek aplikacji Androida."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Cyfra nie może być pierwszym znakiem w segmencie paczki."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Znak \"%s\" nie może być pierwszym znakiem w segmencie paczki."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Paczka musi mieć co najmniej jedną kropkę jako separator."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Wybierz urządzenie z listy"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "Uruchamiam na %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
-msgstr "Eksportowanie wszystkiego"
+msgstr "Eksportowanie APK..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
-msgstr "Odinstaluj"
+msgstr "Odinstalowywanie..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "Wczytywanie, proszę czekać..."
+msgstr "Instalowanie na urządzeniu, proszę czekać..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
-msgstr "Nie można stworzyć instancji sceny!"
+msgstr "Nie udało się zainstalować na urządzeniu: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
-msgstr "Uruchamiam skrypt..."
+msgstr "Uruchamiam na urządzeniu..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "Nie można utworzyć katalogu."
+msgstr "Nie udało się uruchomić na urządzeniu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Nie udało się znaleźć narzędzia \"apksigner\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13321,7 +13292,7 @@ msgstr ""
"Szablon budowania Androida nie jest zainstalowany dla projektu. Zainstaluj "
"go z menu Projekt."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13329,13 +13300,13 @@ msgstr ""
"Albo ustawienia Debug Keystore, Debug User ORAZ Debug Password muszą być "
"skonfigurowane, ALBO żadne z nich."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Debugowy keystore nieskonfigurowany w Ustawieniach Edytora ani w profilu "
"eksportu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13343,49 +13314,49 @@ msgstr ""
"Albo ustawienia Release Keystore, Release User ORAZ Release Password muszą "
"być skonfigurowane, ALBO żadne z nich."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Wydaniowy keystore jest niepoprawnie skonfigurowany w profilu eksportu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Wymagana jest poprawna ścieżka SDK Androida w Ustawieniach Edytora."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Niepoprawna ścieżka do SDK Androida w Ustawieniach Edytora."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Folder \"platform-tools\" nie istnieje!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"Nie udało się znaleźć komendy adb z narzędzi platformowych SDK Androida."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "Sprawdź w folderze SDK Androida podanych w Ustawieniach Edytora."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Brakuje folderu \"build-tools\"!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Nie udało się znaleźć komendy apksigner z narzędzi SDK Androida."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Niepoprawny klucz publiczny dla ekspansji APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Niepoprawna nazwa paczki:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13393,97 +13364,79 @@ msgstr ""
"Niepoprawny moduł \"GodotPaymentV3\" załączony w ustawieniu projektu "
"\"android/modules\" (zmieniony w Godocie 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Use Custom Build\" musi być włączone, by używać wtyczek."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus "
-"Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus Mobile VR"
"\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus Mobile "
-"VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Eksportuj AAB\" jest ważne tylko gdy \"Use Custom Build\" jest włączone."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"\"apksigner\" nie został znaleziony.\n"
+"Sprawdź, czy komenda jest dostępna w folderze narzędzi SDK Androida.\n"
+"Wynikowy %s jest niepodpisany."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "Podpisywanie debugu %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
-msgstr ""
-"Skanowanie plików,\n"
-"Proszę czekać..."
+msgstr "Podpisywanie wydania %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
-msgstr "Nie można otworzyć szablonu dla eksportu:"
+msgstr "Nie udało się znaleźć keystore, nie można eksportować."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "\"apksigner\" zwrócił błąd #%d"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "Dodawanie %s..."
+msgstr "Weryfikowanie %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "Weryfikacja \"apksigner\" dla %s nieudana."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "Eksportowanie wszystkiego"
+msgstr "Eksportowanie na Androida"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Nieprawidłowa nazwa pliku! Android App Bundle wymaga rozszerzenia *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion nie jest kompatybilne z Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nieprawidłowa nazwa pliku! APK Androida wymaga rozszerzenia *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Nieobsługiwany format eksportu!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13491,7 +13444,7 @@ msgstr ""
"Próbowano zbudować z własnego szablonu, ale nie istnieje dla niego "
"informacja o wersji. Zainstaluj ponownie z menu \"Projekt\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13503,26 +13456,26 @@ msgstr ""
" Wersja Godota: %s\n"
"Zainstaluj ponownie szablon z menu \"Projekt\"."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Nie udało się nadpisać plików \"res://android/build/res/*.xml\" nazwą "
+"projektu"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "Nie znaleziono project.godot w ścieżce projektu."
+msgstr "Nie udało się eksportować plików projektu do projektu gradle\n"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
-msgstr "Nie można zapisać pliku:"
+msgstr "Nie udało się zapisać pliku pakietu rozszerzenia!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Budowanie projektu Androida (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13531,11 +13484,11 @@ msgstr ""
"Alternatywnie, odwiedź docs.godotengine.org po dokumentację budowania dla "
"Androida."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Przesuwam wyjście"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13543,48 +13496,48 @@ msgstr ""
"Nie udało się skopiować i przemianować pliku eksportu, sprawdź folder "
"projektu gradle po informacje."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "Animacja nie znaleziona: \"%s\""
+msgstr "Pakiet nie znaleziony: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "Tworzenie konturów..."
+msgstr "Tworzenie APK..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Nie można otworzyć szablonu dla eksportu:"
+msgstr ""
+"Nie udało się znaleźć szablonu APK do eksportu:\n"
+"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"Brakujące biblioteki w szablonie eksportu dla wybranej architektury: %s.\n"
+"Zbuduj szablon ze wszystkimi wymaganymi bibliotekami lub odznacz brakujące "
+"architektury w profilu eksportu."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
-msgstr "Dodawanie %s..."
+msgstr "Dodawanie plików..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
-msgstr "Nie można zapisać pliku:"
+msgstr "Nie udało się eksportować plików projektu"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Uzgadnianie APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "Nie udało się rozpakować tymczasowego niewyrównanego APK."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
@@ -13631,45 +13584,40 @@ msgid "Could not write file:"
msgstr "Nie można zapisać pliku:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Nie można zapisać pliku:"
+msgstr "Nie udało się odczytać pliku:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Nie można odczytać niestandardowe powłoki HTML:"
+msgstr "Nie udało się odczytać powłoki HTML:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Nie można utworzyć katalogu."
+msgstr "Nie udało się utworzyć folderu serwera HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Błąd podczas zapisywania sceny."
+msgstr "Błąd uruchamiania serwera HTTP:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Niepoprawny identyfikator:"
+msgstr "Nieprawidłowy identyfikator paczki:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "Poświadczenie: wymagane podpisanie kodu."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Poświadczenie: wymagane wzmocnione środowisko wykonawcze."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Poświadczenie: Nazwa Apple ID nie podana."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Poświadczenie: Hasło Apple ID nie podane."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
@@ -14113,6 +14061,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"Właściwość GIProbe Compress jest przestarzała z powodu znanych błędów i nie "
+"ma już żadnego efektu.\n"
+"By usunąć to ostrzeżenie, wyłącz właściwość Compress w GIProbe."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -14132,6 +14083,14 @@ msgstr ""
"NavigationMeshInstance musi być dzieckiem lub wnukiem węzła typu Navigation. "
"Udostępnia on tylko dane nawigacyjne."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14200,15 +14159,15 @@ msgstr "Node A i Node B muszą być różnymi węzłami PhysicsBody"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomManager nie powinien być potomkiem Portalu."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Room nie powinien być potomkiem Portalu."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "RoomGroup nie powinien być potomkiem Portalu."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14220,79 +14179,96 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Room nie może mieć innego węzła Room jako potomka."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "RoomManager nie powinien znajdować się w węźle Room."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "RoomGroup nie powinien znajdować się w węźle Room."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"Otoczka wypukła pokoju zawiera dużą liczbę płaszczyzn.\n"
+"Rozważ uproszczenie granicy pokoju w celu zwiększenia wydajności."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "RoomManager nie powinien znajdować się w węźle RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "RoomList nie został przypisany."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "Węzeł RoomList powinien być typu Spatial lub pochodnego."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"Portal Depth Limit jest ustawione na zero.\n"
+"Tylko pokój, w którym jest kamera będzie się renderował."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Powinien być tylko jeden RoomManager w drzewie sceny."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Ścieżka RoomList jest nieprawidłowa.\n"
+"Sprawdź czy gałąź RoomList została przypisana w RoomManager."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList nie zawiera żadnego węzła Room, przerywam."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Wykryto błędnie nazwane węzły, sprawdź dziennik wyjściowy po więcej "
+"szczegółów. Przerywam."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Łącznik portali nie znaleziony, sprawdź dziennik wyjściowy po więcej "
+"szczegółów."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Autołączenie portali nieudane, sprawdź dziennik wyjścia po szczegóły.\n"
+"Sprawdź, czy portal jest zwrócony na zewnątrz ze źródłowego pokoju."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Wykryto nachodzenie się pokoi, kamery mogą działać niepoprawnie na "
+"nachodzącym obszarze.\n"
+"Sprawdź dziennik wyjścia po szczegóły."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Błąd liczenia granic pokoju.\n"
+"Upewnij się, że wszystkie pokoje zawierają geometrię lub ręczne granice."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14357,7 +14333,7 @@ msgstr "Animacja nie znaleziona: \"%s\""
#: scene/animation/animation_player.cpp
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "Resetowanie animacji"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14457,6 +14433,14 @@ msgstr "Rozszerzenie musi być poprawne."
msgid "Enable grid minimap."
msgstr "Włącz minimapę siatki."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14509,6 +14493,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Rozmiar węzła Viewport musi być większy niż 0, by coś wyrenderować."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14530,25 +14518,29 @@ msgid "Invalid comparison function for that type."
msgstr "Niewłaściwa funkcja porównania dla tego typu."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Varying może być przypisane tylko w funkcji wierzchołków."
+msgstr "Varying nie może zostać przypisane w funkcji \"%s\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"Varyings przypisane w funkcji \"vertex\" nie mogą zostać przypisane ponownie "
+"we \"fragment\" ani \"light\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"Varyings przypisane w funkcji \"fragment\" nie mogą zostać przypisane "
+"ponownie we \"vertex\" ani \"light\"."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
msgstr ""
+"Varying z etapu fragmentów nie jest dostępny w niestandardowej funkcji!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
@@ -14562,6 +14554,41 @@ msgstr "Przypisanie do uniformu."
msgid "Constants cannot be modified."
msgstr "Stałe nie mogą być modyfikowane."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Utwórz pozę spoczynkową (z kości)"
+
+#~ msgid "Bottom"
+#~ msgstr "Dół"
+
+#~ msgid "Left"
+#~ msgstr "Lewa"
+
+#~ msgid "Right"
+#~ msgstr "Prawa"
+
+#~ msgid "Front"
+#~ msgstr "Przód"
+
+#~ msgid "Rear"
+#~ msgstr "Tył"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Uchwyt bez nazwy"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus "
+#~ "Mobile VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus "
+#~ "Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Zawartość paczki:"
@@ -16432,9 +16459,6 @@ msgstr "Stałe nie mogą być modyfikowane."
#~ msgid "Images:"
#~ msgstr "Obrazki:"
-#~ msgid "Group"
-#~ msgstr "Grupa"
-
#~ msgid "Compress (RAM - IMA-ADPCM)"
#~ msgstr "Kompresja (RAM - IMA-ADPCM)"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 96fab899cd..8f2aa04183 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -1037,7 +1037,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1676,14 +1676,14 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom debug template not found."
msgstr "Yer fancy debug package be nowhere."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -2072,7 +2072,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2560,6 +2560,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3201,6 +3225,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Change yer Anim Transform"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3447,6 +3476,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5572,6 +5605,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Yar, Blow th' Selected Down!"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Yar, Blow th' Selected Down!"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6496,7 +6541,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7095,6 +7144,16 @@ msgstr "Yar, Blow th' Selected Down!"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Change yer Anim Transform"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Slit th' Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7614,11 +7673,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Yar, Blow th' Selected Down!"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7646,6 +7706,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7759,42 +7873,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8059,6 +8153,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Ye be fixin' Signal:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8124,7 +8223,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12205,6 +12304,15 @@ msgstr "Discharge ye' Signal"
msgid "Set Portal Point Position"
msgstr "Discharge ye' Signal"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Discharge ye' Signal"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12501,6 +12609,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "All yer Booty"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13016,161 +13129,150 @@ msgstr "Discharge ye' Variable"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Edit"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Yer unique name be evil."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13178,57 +13280,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13236,54 +13338,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13291,20 +13393,20 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Find ye Node Type"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13762,6 +13864,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14052,6 +14162,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14092,6 +14210,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index 1c8e2476a3..94bcea301b 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-06 06:48+0000\n"
+"PO-Revision-Date: 2021-09-15 00:46+0000\n"
"Last-Translator: João Lopes <linux-man@hotmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
@@ -32,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -381,15 +381,13 @@ msgstr "Anim Inserir"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Impossível abrir '%s'."
+msgstr "nó '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animação"
+msgstr "animação"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -399,9 +397,8 @@ msgstr ""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Não existe a Propriedade '%s'."
+msgstr "propriedade '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -461,7 +458,7 @@ msgstr "Caminho da pista é inválido, não se consegue adicionar uma chave."
#: editor/animation_track_editor.cpp
msgid "Track is not of type Spatial, can't insert key"
-msgstr "Pista não é do tipo Spatial, não consigo inserir chave"
+msgstr "Pista não é do tipo Spatial, incapaz de inserir chave"
#: editor/animation_track_editor.cpp
msgid "Add Transform Track Key"
@@ -473,7 +470,7 @@ msgstr "Adicionar Chave da Pista"
#: editor/animation_track_editor.cpp
msgid "Track path is invalid, so can't add a method key."
-msgstr "Caminho da pista é inválido, não consigo adicionar uma chave método."
+msgstr "Caminho da pista é inválido, incapaz de adicionar uma chave método."
#: editor/animation_track_editor.cpp
msgid "Add Method Track Key"
@@ -877,7 +874,7 @@ msgstr "Desconecta o sinal após a primeira emissão."
#: editor/connections_dialog.cpp
msgid "Cannot connect signal"
-msgstr "Não consigo conectar sinal"
+msgstr "Incapaz de conectar sinal"
#: editor/connections_dialog.cpp editor/dependency_editor.cpp
#: editor/export_template_manager.cpp editor/groups_editor.cpp
@@ -1037,7 +1034,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependências"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recurso"
@@ -1082,7 +1079,7 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Remover ficheiros selecionados do Projeto? (Sem desfazer.)\n"
+"Remover ficheiros selecionados do Projeto? (Não pode ser revertido.)\n"
"Dependendo da configuração, pode encontrar os ficheiros removidos na "
"Reciclagem do sistema ou apagados permanentemente."
@@ -1096,13 +1093,13 @@ msgid ""
msgstr ""
"Os ficheiros a serem removidos são necessários para que outros recursos "
"funcionem.\n"
-"Remover mesmo assim? (Sem desfazer.)\n"
+"Remover mesmo assim? (Não pode ser revertido.)\n"
"Dependendo da configuração, pode encontrar os ficheiros removidos na "
"Reciclagem do sistema ou apagados permanentemente."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
-msgstr "Não consigo remover:"
+msgstr "Incapaz de remover:"
#: editor/dependency_editor.cpp
msgid "Error loading:"
@@ -1279,14 +1276,16 @@ msgstr "%s (já existe)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"Conteúdos do recurso \"%s\" - %d ficheiro(s) em conflito com o projeto:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Conteúdos do recurso \"%s\" - Nenhum ficheiro em conflito com o projeto:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
-msgstr "A Descomprimir Ativos"
+msgstr "A Descomprimir Recursos"
#: editor/editor_asset_installer.cpp
msgid "The following files failed extraction from asset \"%s\":"
@@ -1374,9 +1373,8 @@ msgid "Bypass"
msgstr "Ignorar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Opções de barramento"
+msgstr "Opções de Barramento"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1540,16 +1538,15 @@ msgstr "Reorganizar Carregamentos Automáticos"
#: editor/editor_autoload_settings.cpp
msgid "Can't add autoload:"
-msgstr "Não consigo adicionar carregamento automático:"
+msgstr "Incapaz de adicionar carregamento automático:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "O Ficheiro não existe."
+msgstr "%s é um caminho inválido. O ficheiro não existe."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s é um caminho inválido. Não está no caminho do recurso (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1573,9 +1570,8 @@ msgid "Name"
msgstr "Nome"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Variável"
+msgstr "Variável Global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1699,13 +1695,13 @@ msgstr ""
"Ative 'Importar Pvrtc' nas Configurações do Projeto, ou desative 'Driver de "
"Recurso Ativo'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Modelo de depuração personalizado não encontrado."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1730,7 +1726,7 @@ msgstr "Editor de Script"
#: editor/editor_feature_profile.cpp
msgid "Asset Library"
-msgstr "Biblioteca de Ativos"
+msgstr "Biblioteca de Recursos"
#: editor/editor_feature_profile.cpp
msgid "Scene Tree Editing"
@@ -1750,48 +1746,50 @@ msgstr "Importar Doca"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Permite ver e editar cenas 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
-msgstr ""
+msgstr "Permite editar scripts com o editor de scripts integrado."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Fornece acesso integrado à Biblioteca de Recursos."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Permite editar a hierarquia de nós na doca de Cena."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Permite trabalhar com sinais e grupos do nó selecionado na doca de Cena."
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Permite navegar no sistema de ficheiros local por uma doca dedicada."
#: editor/editor_feature_profile.cpp
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Permite a configuração da importação para recursos individuais. Necessita da "
+"doca FileSystem."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Atual)"
+msgstr "(atual)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(nada)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Remover perfil selecionado, '%s'? Não pode ser revertido."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1822,19 +1820,16 @@ msgid "Enable Contextual Editor"
msgstr "Ativar Editor de Contexto"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Propriedades:"
+msgstr "Propriedades da Classe:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Características"
+msgstr "Características Principais:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Ativar Classes:"
+msgstr "Nós e Classes:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1852,23 +1847,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "Erro ao guardar perfil no caminho: '%s'."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "Restaurar Predefinições"
+msgstr "Restaurar Predefinição"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "Perfil atual:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Apagar Perfil"
+msgstr "Criar Perfil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Remover Tile"
+msgstr "Remover Perfil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1888,18 +1880,17 @@ msgid "Export"
msgstr "Exportar"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Perfil atual:"
+msgstr "Configurar Perfil Selecionado:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opções da Classe:"
+msgstr "Opções Extra:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Criar ou importar perfil para editar classes e propriedades disponíveis."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -1926,9 +1917,8 @@ msgid "Select Current Folder"
msgstr "Selecionar pasta atual"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "O Ficheiro existe, sobrescrever?"
+msgstr "O ficheiro existe, sobrescrever?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2075,7 +2065,7 @@ msgstr "Ficheiro:"
#: editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr "Analisar fontes"
+msgstr "PesquisarFontes"
#: editor/editor_file_system.cpp
msgid ""
@@ -2087,9 +2077,9 @@ msgstr ""
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr "A (Re)Importar Ativos"
+msgstr "A (Re)Importar Recursos"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Topo"
@@ -2359,7 +2349,7 @@ msgstr "Guardar Recurso Como..."
#: editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr "Não consigo abrir o ficheiro para escrita:"
+msgstr "Incapaz de abrir o ficheiro para escrita:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
@@ -2371,7 +2361,7 @@ msgstr "Erro ao guardar."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Can't open '%s'. The file could have been moved or deleted."
-msgstr "Não consigo abrir '%s'. O ficheiro pode ter sido movido ou apagado."
+msgstr "Incapaz de abrir '%s'. O ficheiro pode ter sido movido ou apagado."
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
@@ -2419,7 +2409,7 @@ msgid ""
"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't "
"be satisfied."
msgstr ""
-"Não consigo guardar cena. Provavelmente, as dependências (instâncias ou "
+"Incapaz de guardar cena. Provavelmente, as dependências (instâncias ou "
"heranças) não puderam ser satisfeitas."
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
@@ -2428,7 +2418,7 @@ msgstr "Não se consegue sobrescrever cena ainda aberta!"
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr "Não consigo carregar MeshLibrary para combinar!"
+msgstr "Incapaz de carregar MeshLibrary para combinar!"
#: editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
@@ -2436,7 +2426,7 @@ msgstr "Erro ao guardar MeshLibrary!"
#: editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr "Não consigo carregar TileSet para combinar!"
+msgstr "Incapaz de carregar TileSet para combinar!"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
@@ -2563,13 +2553,16 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"A cena atual não tem nó raiz, mas %d recurso(s) externo(s) modificados foram "
+"guardados."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "É necessário um nó raiz para guardar a cena."
+msgstr ""
+"É necessário um nó raiz para guardar a cena. Pode adicionar um nó raiz na "
+"doca de árvore da Cena."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2600,8 +2593,34 @@ msgid "Current scene not saved. Open anyway?"
msgstr "A cena atual não foi guardada. Abrir na mesma?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Desfazer"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refazer"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr "Não consigo recarregar uma cena que nunca foi guardada."
+msgstr "Incapaz de recarregar uma cena que nunca foi guardada."
#: editor/editor_node.cpp
msgid "Reload Saved Scene"
@@ -2952,9 +2971,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Explorador de Recursos Órfãos..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Renomear Projeto"
+msgstr "Recarregar Projeto Atual"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3114,13 +3132,12 @@ msgid "Help"
msgstr "Ajuda"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Abrir documentação"
+msgstr "Documentação Online"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Perguntas & Respostas"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3128,7 +3145,7 @@ msgstr "Denunciar um Bug"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "Proponha uma Funcionalidade"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3139,9 +3156,8 @@ msgid "Community"
msgstr "Comunidade"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Sobre"
+msgstr "Sobre Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3233,14 +3249,12 @@ msgid "Manage Templates"
msgstr "Gerir Modelos"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Instalar do Ficheiro"
+msgstr "Instalar do ficheiro"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Selecione uma Fonte Malha:"
+msgstr "Selecione ficheiros fonte android"
#: editor/editor_node.cpp
msgid ""
@@ -3289,6 +3303,11 @@ msgid "Merge With Existing"
msgstr "Combinar com o Existente"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Mudar Transformação"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Abrir & Executar um Script"
@@ -3323,9 +3342,8 @@ msgid "Select"
msgstr "Selecionar"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Selecionar pasta atual"
+msgstr "Selecionar Atual"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3341,7 +3359,7 @@ msgstr "Abrir Editor de Script"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr "Abrir Biblioteca de Ativos"
+msgstr "Abrir Biblioteca de Recursos"
#: editor/editor_node.cpp
msgid "Open the next Editor"
@@ -3360,9 +3378,8 @@ msgid "No sub-resources found."
msgstr "Sub-recurso não encontrado."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Sub-recurso não encontrado."
+msgstr "Abrir a lista de sub-recursos."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3389,14 +3406,12 @@ msgid "Update"
msgstr "Atualizar"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Versão:"
+msgstr "Versão"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autores"
+msgstr "Autor"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3409,14 +3424,12 @@ msgid "Measure:"
msgstr "Medida:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Tempo do Frame (seg)"
+msgstr "Tempo do Frame (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "Tempo Médio (seg)"
+msgstr "Tempo Médio (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3545,6 +3558,10 @@ msgstr ""
"O recurso selecionado (%s) não corresponde a qualquer tipo esperado para "
"esta propriedade (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Fazer único"
@@ -3564,7 +3581,6 @@ msgid "Paste"
msgstr "Colar"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
msgstr "Converter em %s"
@@ -3616,10 +3632,9 @@ msgid "Did you forget the '_run' method?"
msgstr "Esqueceu-se do método '_run'?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Pressione Ctrl para arredondar para inteiro. Pressione Shift para mudanças "
+"Pressione %s para arredondar para inteiro. Pressione Shift para mudanças "
"mais precisas."
#: editor/editor_sub_scene.cpp
@@ -3640,49 +3655,43 @@ msgstr "Importar do Nó:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Abrir a pasta que contem estes modelos."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Desinstalar este modelos."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "Não existe ficheiro '%s'."
+msgstr "Não existem mirrors disponíveis."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Retrieving the mirror list..."
-msgstr "A readquirir servidores, espere por favor..."
+msgstr "A readquirir lista de mirror..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "A iniciar a transferência..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
msgstr "Erro ao solicitar URL:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "A ligar ao servidor..."
+msgstr "A ligar ao mirror..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Não consigo resolver hostname:"
+msgstr "Incapaz de resolver o endereço solicitado."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Não consigo ligar ao host:"
+msgstr "Incapaz de ligar ao mirror."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "Sem resposta do host:"
+msgstr "Sem resposta do mirror."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3690,22 +3699,20 @@ msgid "Request failed."
msgstr "Pedido falhado."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Falha na solicitação, demasiados redirecionamentos"
+msgstr "Pedido acaba num loop de redirecionamento."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Pedido falhado."
+msgstr "Pedido falhado:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Transferência completa; a extrair modelos..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
-msgstr "Não consigo remover ficheiro temporário:"
+msgstr "Incapaz de remover ficheiro temporário:"
#: editor/export_template_manager.cpp
msgid ""
@@ -3720,14 +3727,12 @@ msgid "Error getting the list of mirrors."
msgstr "Erro na receção da lista de mirrors."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
-msgstr ""
-"Erro ao analisar a lista de mirrors JSON. Por favor denuncie o problema!"
+msgstr "Erro ao analisar a lista JSON de mirrors. Por favor relate o problema!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Melhor mirror disponível"
#: editor/export_template_manager.cpp
msgid ""
@@ -3748,7 +3753,7 @@ msgstr "A resolver"
#: editor/export_template_manager.cpp
msgid "Can't Resolve"
-msgstr "Não consigo Resolver"
+msgstr "Incapaz de Resolver"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3757,7 +3762,7 @@ msgstr "A ligar..."
#: editor/export_template_manager.cpp
msgid "Can't Connect"
-msgstr "Não consigo Conectar"
+msgstr "Incapaz de Conectar"
#: editor/export_template_manager.cpp
msgid "Connected"
@@ -3781,24 +3786,23 @@ msgid "SSL Handshake Error"
msgstr "Erro SSL Handshake"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Não consigo abrir zip de modelos de exportação."
+msgstr "Incapaz de abrir ficheiro de modelos de exportação."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Formato de version.txt inválido dentro dos modelos: %s."
+msgstr ""
+"Formato de version.txt inválido dentro do ficheiro de exportação de modelos: "
+"%s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Não foi encontrado version.txt dentro dos Modelos."
+msgstr ""
+"Não foi encontrado version.txt dentro do ficheiro de exportação de modelos."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Erro ao criar o caminho para os modelos:"
+msgstr "Erro ao criar o caminho para extrair os modelos:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3809,9 +3813,8 @@ msgid "Importing:"
msgstr "A Importar:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Remover versão '%s' do Modelo?"
+msgstr "Remover modelos para a versão '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3828,53 +3831,51 @@ msgstr "Versão Atual:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
msgstr ""
+"Modelos de exportação em falta. Descarregue-os ou instale-os de um ficheiro."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Modelos de exportação estão instalados e prontos para serem usados."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Abrir Ficheiro"
+msgstr "Abrir Pasta"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Abrir a pasta que contem os modelos instalados para a versão atual."
#: editor/export_template_manager.cpp
msgid "Uninstall"
msgstr "Desinstalar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valor inicial do contador"
+msgstr "Desinstalar modelos para a versão atual."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Erro na transferência"
+msgstr "Transferir de:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Executar no Navegador"
+msgstr "Abrir no Navegador"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copiar Erro"
+msgstr "Copiar URL do Mirror"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Descarregar e Instalar"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Descarregar do melhor mirror disponível e instalar modelos para a versão "
+"atual."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -3883,14 +3884,12 @@ msgstr ""
"desenvolvimento."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
msgstr "Instalar do Ficheiro"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Importar Modelos a partir de um Ficheiro ZIP"
+msgstr "Instalar modelos a partir de um ficheiro local."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -3898,19 +3897,16 @@ msgid "Cancel"
msgstr "Cancelar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Não consigo abrir zip de modelos de exportação."
+msgstr "Cancelar a transferência dos modelos."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Versões Instaladas:"
+msgstr "Outras Versões Instaladas:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Desinstalar"
+msgstr "Desinstalar Modelo"
#: editor/export_template_manager.cpp
msgid "Select Template File"
@@ -3925,6 +3921,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Os modelos vão continuar a ser descarregados.\n"
+"Pode experimentar um curto bloqueio do editor quando terminar."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4072,35 +4070,32 @@ msgid "Collapse All"
msgstr "Colapsar Tudo"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Procurar ficheiros"
+msgstr "Ordenar ficheiros"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Ordenar por Nome (Ascendente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Ordenar por Nome (Descendente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Ordenar por Tipo (Ascendente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Ordenar por Tipo (Descendente)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Última modificação"
+msgstr "Ordenar por Último Modificado"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Última modificação"
+msgstr "Ordenar por Primeiro Modificado"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4112,7 +4107,7 @@ msgstr "Renomear..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Focar a caixa de pesquisa"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4124,7 +4119,7 @@ msgstr "Próxima Pasta/Ficheiro"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Carregar novamente o Sistema de Ficheiros"
+msgstr "Re-pesquisar o Sistema de Ficheiros"
#: editor/filesystem_dock.cpp
msgid "Toggle Split Mode"
@@ -4139,7 +4134,7 @@ msgid ""
"Scanning Files,\n"
"Please Wait..."
msgstr ""
-"A analisar Ficheiros,\n"
+"A pesquisar Ficheiros,\n"
"Espere, por favor..."
#: editor/filesystem_dock.cpp
@@ -4412,7 +4407,7 @@ msgstr "Alterar o tipo de um ficheiro importado requer reiniciar o editor."
msgid ""
"WARNING: Assets exist that use this resource, they may stop loading properly."
msgstr ""
-"AVISO: Existem Ativos que usam este recurso, poderem não ser carregados "
+"AVISO: Outros recursos usam este recurso, e podem não ser carregados "
"corretamente."
#: editor/inspector_dock.cpp
@@ -4420,14 +4415,12 @@ msgid "Failed to load resource."
msgstr "Falha ao carregar recurso."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Propriedades"
+msgstr "Copiar Propriedades"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Propriedades"
+msgstr "Colar Propriedades"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4452,23 +4445,20 @@ msgid "Save As..."
msgstr "Guardar Como..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Não está no caminho do recurso."
+msgstr "Opções de recurso extra."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Editar Área de Transferência de Recursos"
+msgstr "Editar Recurso da Área de Transferência"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Copiar Recurso"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Tornar Incorporado"
+msgstr "Tornar Recurso Incorporado"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
@@ -4483,9 +4473,8 @@ msgid "History of recently edited objects."
msgstr "Histórico de Objetos recentemente editados."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Abrir documentação"
+msgstr "Abrir documentação para este objeto."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4496,9 +4485,8 @@ msgid "Filter properties"
msgstr "Propriedades do Filtro"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Propriedades do Objeto."
+msgstr "Gerir propriedades do objeto."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4742,9 +4730,8 @@ msgid "Blend:"
msgstr "Mistura:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Mudança de Parâmetro"
+msgstr "Parâmetro Alterado:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5318,11 +5305,11 @@ msgstr "Erro de ligação, tente novamente."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect."
-msgstr "Não consigo conectar."
+msgstr "Incapaz de conectar."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr "Não consigo ligar ao host:"
+msgstr "Incapaz de ligar ao host:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
@@ -5334,11 +5321,11 @@ msgstr "Sem resposta."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr "Não consigo resolver hostname:"
+msgstr "Incapaz de resolver hostname:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve."
-msgstr "Não consigo resolver."
+msgstr "Incapaz de resolver."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
@@ -5346,7 +5333,7 @@ msgstr "Falha na solicitação, código de retorno:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Cannot save response to:"
-msgstr "Não consigo guardar resposta para:"
+msgstr "Incapaz de guardar resposta para:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Write error."
@@ -5390,7 +5377,7 @@ msgstr "Falhou a verificação hash SHA-256"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Erro na transferência de Ativo:"
+msgstr "Erro na Transferência de Recurso:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5426,7 +5413,7 @@ msgstr "Erro na transferência"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "A transferência deste Ativo já está em andamento!"
+msgstr "A transferência deste recurso já está em andamento!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
@@ -5474,11 +5461,11 @@ msgstr "Todos"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Procurar modelos, projetos e demos"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Procurar recursos (excluindo modelos, projetos e demos)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5518,28 +5505,27 @@ msgstr "A Carregar..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "Ficheiro ZIP de Ativos"
+msgstr "Ficheiro ZIP de Recursos"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Play/Pause Pré-visualização Áudio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"Can't determine a save path for lightmap images.\n"
"Save your scene and try again."
msgstr ""
-"Não consigo determinar um caminho para guardar imagens lightmap.\n"
+"Incapaz de determinar um caminho para guardar imagens lightmap.\n"
"Guarde a sua cena e tente novamente."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"Não há malhas para consolidar. Assegure-se que contêm um canal UV2 e que a "
-"referência 'Bake Light' flag está on."
+"Não há malhas para consolidar. Assegure-se que contêm um canal UV2 e que "
+"'Use In Baked Light' e 'Generate Lightmap' estão ativas."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5680,6 +5666,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Mover CanvasItem \"%s\" para (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Bloquear Seleção"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupos"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5781,13 +5779,12 @@ msgstr "Mudar âncoras"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
-"Sobreposição de Câmara de Jogo\n"
-"Sobrepõe câmara de jogo com câmara viewport do editor."
+"Sobreposição de Câmara do Projeto\n"
+"Substitui a câmara do projeto pela câmara viewport do editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5863,31 +5860,27 @@ msgstr "Modo Seleção"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Remover nó ou transição selecionado."
+msgstr "Arrastar: Roda o nó selecionado à volta do pivô."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Arrastar: Mover"
+msgstr "Alt+Arrastar: Mover nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Remover nó ou transição selecionado."
+msgstr "V: Define posição do pivô do nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Mostra lista de todos os Objetos na posição clicada\n"
-"(o mesmo que Alt+RMB no modo seleção)."
+"Alt+RMB: Mostra lista de todos os nós na posição clicada, incluindo os "
+"trancados."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "RMB: Adicionar nó na posição clicada."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6125,14 +6118,12 @@ msgid "Clear Pose"
msgstr "Limpar Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Adicionar Nó"
+msgstr "Adicionar Nó Aqui"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Cena(s) da Instância"
+msgstr "Instância da Cena Aqui"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6148,49 +6139,43 @@ msgstr "Vista Pan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Zoom a 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Zoom a 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Zoom a 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Diminuir Zoom"
+msgstr "Zoom a 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Zoom a 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6202,7 +6187,7 @@ msgstr "A adicionar %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Cannot instantiate multiple nodes without root."
-msgstr "Não consigo instanciar nós múltiplos sem raiz."
+msgstr "Incapaz de instanciar nós múltiplos sem raiz."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -6216,7 +6201,7 @@ msgstr "Erro a instanciar cena de %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Default Type"
-msgstr "Mudar Predefinição de Tipo"
+msgstr "Mudar Tipo Predefinido"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6428,14 +6413,13 @@ msgstr "Criar Forma Estática Trimesh"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create a single convex collision shape for the scene root."
-msgstr "Não consigo criar uma única forma convexa para a raiz da cena."
+msgstr "Incapaz de criar uma única forma convexa para a raiz da cena."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a single convex collision shape."
msgstr "Não consegui criar uma forma única de colisão convexa."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Shape"
msgstr "Criar Forma Convexa Simples"
@@ -6446,7 +6430,7 @@ msgstr "Criar Forma Convexa Simples"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create multiple convex collision shapes for the scene root."
msgstr ""
-"Não consigo criar múltiplas formas de colisão convexas para a raiz da cena."
+"Incapaz de criar múltiplas formas de colisão convexas para a raiz da cena."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create any collision shapes."
@@ -6473,9 +6457,8 @@ msgid "No mesh to debug."
msgstr "Nenhuma malha para depurar."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "O Modelo não tem UV nesta camada"
+msgstr "Malha não tem UV na camada %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -6540,9 +6523,8 @@ msgstr ""
"Esta é a mais rápida (mas menos precisa) opção para deteção de colisão."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Criar Irmãos Únicos de Colisão Convexa"
+msgstr "Criar Irmãos de Colisão Convexa Simples"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6556,14 +6538,14 @@ msgid "Create Multiple Convex Collision Siblings"
msgstr "Criar Vários Irmãos de Colisão Convexa"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Cria uma forma de colisão baseada em polígonos.\n"
-"Esta uma opção de desempenho intermédio entre as duas opções acima."
+"Esta uma opção de desempenho intermédio entre uma colisão convexa única e "
+"uma colisão baseada em polígonos."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -6630,7 +6612,13 @@ msgid "Remove Selected Item"
msgstr "Remover item selecionado"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importar da Cena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importar da Cena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7205,24 +7193,30 @@ msgid "ResourcePreloader"
msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Inverter na Horizontal"
+msgstr "Inverter Portais"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Contagem de Pontos gerados:"
+msgstr "Quarto Gerar Pontos"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Contagem de Pontos gerados:"
+msgstr "Gerar Pontos"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Inverter na Horizontal"
+msgstr "Inverter Portal"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Limpar Transformação"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Criar Nó"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7246,7 +7240,7 @@ msgstr "Erro ao escrever TextFile:"
#: editor/plugins/script_editor_plugin.cpp
msgid "Could not load file at:"
-msgstr "Não consigo carregar ficheiro em:"
+msgstr "Incapaz de carregar ficheiro em:"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error saving file!"
@@ -7282,7 +7276,7 @@ msgstr "Guardar Ficheiro Como..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Can't obtain the script for running."
-msgstr "Não consigo obter o script para executar."
+msgstr "Incapaz de obter o script para executar."
#: editor/plugins/script_editor_plugin.cpp
msgid "Script failed reloading, check console for errors."
@@ -7540,7 +7534,7 @@ msgstr "Só podem ser largados recursos do Sistema de Ficheiros ."
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't drop nodes because script '%s' is not used in this scene."
-msgstr "Não consigo largar nós porque o script '%s' não é usado neste cena."
+msgstr "Incapaz de largar nós porque o script '%s' não é usado neste cena."
#: editor/plugins/script_text_editor.cpp
msgid "Lookup Symbol"
@@ -7724,12 +7718,14 @@ msgid "Skeleton2D"
msgstr "Esqueleto2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Criar Pose de Descanso (a partir de Ossos)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Pôr Ossos em Pose de Descanso"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Pôr Ossos em Pose de Descanso"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sobrescrever"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7756,6 +7752,71 @@ msgid "Perspective"
msgstr "Perspetiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspetiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspetiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformação abortada."
@@ -7782,20 +7843,17 @@ msgid "None"
msgstr "Nenhum"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Modo Rodar"
+msgstr "Rodar"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Translação:"
+msgstr "Translação"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Escala:"
+msgstr "Escala"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7818,52 +7876,44 @@ msgid "Animation Key Inserted."
msgstr "Chave de Animação inserida."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Inclinação"
+msgstr "Inclinação:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Rotação:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Tamanho: "
+msgstr "Tamanho:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Objetos desenhados"
+msgstr "Objetos Desenhados:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Mudanças de Material"
+msgstr "Mudanças de Material:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Alterações do Shader"
+msgstr "Mudanças do Shader:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Mudanças de superfície"
+msgstr "Mudanças da Superfície:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Chamadas de desenho"
+msgstr "Chamadas de Desenho:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Vértices"
+msgstr "Vértices:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7874,42 +7924,22 @@ msgid "Bottom View."
msgstr "Vista de fundo."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Fundo"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vista de esquerda."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Esquerda"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vista de direita."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Direita"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vista de frente."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Frente"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vista de trás."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Trás"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Alinhar Transformação com Vista"
@@ -8018,9 +8048,8 @@ msgid "Freelook Slow Modifier"
msgstr "Freelook Modificador de Lentidão"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Mudar tamanho da Câmara"
+msgstr "Alternar Pré-visualização da Câmara"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8042,9 +8071,8 @@ msgstr ""
"Não é uma indicação fiável do desempenho do jogo."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Converter em %s"
+msgstr "Converter Quartos"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8066,7 +8094,6 @@ msgstr ""
"(\"raios X\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
msgstr "Ajustar Nós ao Fundo"
@@ -8180,9 +8207,13 @@ msgid "View Grid"
msgstr "Ver grelha"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Configuração do Viewport"
+msgstr "Ver Culling do Portal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Ver Culling do Portal"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8250,8 +8281,9 @@ msgid "Post"
msgstr "Pós"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Bugiganga sem Nome"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Projeto sem nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8291,7 +8323,7 @@ msgstr "Sprite está vazia!"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Can't convert a sprite using animation frames to mesh."
-msgstr "Não consigo converter sprite com frames de animação para malha."
+msgstr "Incapaz de converter sprite com frames de animação para malha."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't replace by mesh."
@@ -8303,7 +8335,7 @@ msgstr "Converter para Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
-msgstr "Geometria inválida, não consigo criar polígono."
+msgstr "Geometria inválida, incapaz de criar polígono."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Convert to Polygon2D"
@@ -8311,7 +8343,7 @@ msgstr "Converter para Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create collision polygon."
-msgstr "Geometria inválida, não consigo criar polígono de colisão."
+msgstr "Geometria inválida, incapaz de criar polígono de colisão."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create CollisionPolygon2D Sibling"
@@ -8319,7 +8351,7 @@ msgstr "Criar Irmão de CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create light occluder."
-msgstr "Geometria inválida, não consigo criar oclusor de luz."
+msgstr "Geometria inválida, incapaz de criar oclusor de luz."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D Sibling"
@@ -8502,221 +8534,196 @@ msgid "TextureRegion"
msgstr "TextureRegion"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Cor"
+msgstr "Cores"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Letra"
+msgstr "Fontes"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Ícone"
+msgstr "Ícones"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Caixas de Estilo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} cor(es)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Sub-recurso não encontrado."
+msgstr "Cores não encontradas."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Constantes"
+msgstr "{num} constante(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Constante Cor."
+msgstr "Constantes não encontradas."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
-msgstr ""
+msgstr "{num} fonte(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Não encontrado!"
+msgstr "Fontes não encontradas."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
-msgstr ""
+msgstr "{num} ícone(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Não encontrado!"
+msgstr "Ícones não encontrados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} stylebox(es)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Sub-recurso não encontrado."
+msgstr "Styleboxes não encontradas."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} selecionado atualmente"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Nada foi selecionado para importação."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Importar tema"
+msgstr "A Importar Itens do Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
-msgstr ""
+msgstr "A importar itens {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Sair do Editor?"
+msgstr "A atualizar o editor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Finalizing"
-msgstr "A analisar"
+msgstr "A finalizar"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtros:"
+msgstr "Filtro:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Com Dados"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Selecione um Nó"
+msgstr "Selecionar por tipo de dados:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible color items."
-msgstr "Selecionar uma separação para a apagar."
+msgstr "Selecionar todos os itens de cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Selecionar todos os itens cor visíveis e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Desselecionar todos os itens cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "Selecione primeiro um item de configuração!"
+msgstr "Selecione todos os itens constantes visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Selecionar todos os itens constante visíveis e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Desselecionar todos os itens constante visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "Selecione primeiro um item de configuração!"
+msgstr "Selecione todos os itens fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Selecionar todos os itens fonte visíveis e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Desselecionar todos os itens fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "Selecione primeiro um item de configuração!"
+msgstr "Selecione todos os itens ícones visíveis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "Selecione primeiro um item de configuração!"
+msgstr "Selecione todos os itens ícones visíveis e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "Selecione primeiro um item de configuração!"
+msgstr "Desselecionar todos os itens ícone visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "Selecionar todos os itens stylebox visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "Selecionar todos os itens stylebox visíveis e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "Desselecionar todos os itens stylebox visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Aviso: Adicionar dados de ícone pode aumentar consideravelmente o tamanho do "
+"recurso Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Colapsar Tudo"
+msgstr "Colapsar tipos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Expandir Tudo"
+msgstr "Expandir tipos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Selecionar Ficheiro de Modelo"
+msgstr "Selecione todos os itens Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Selecionar Pontos"
+msgstr "Selecionar Com Dados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "Selecionar todos os itens Tema e os seus dados."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Selecionar Tudo"
+msgstr "Desselecionar Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Desselecionar todos os itens Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importar Cena"
+msgstr "Importar Selecionado"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8732,34 +8739,28 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Remover item"
+msgstr "Renomear Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens Ícone"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -8768,233 +8769,196 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Item Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Item Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Adicionar item"
+msgstr "Adicionar Item Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Adicionar item"
+msgstr "Adicionar Item Ícone"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item Ícone"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Remover item selecionado"
+msgstr "Renomear Item Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Ficheiro inválido, não é um Modelo válido de barramento de áudio."
+msgstr "Ficheiro inválido, não é um recurso de Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Ficheiro inválido, o mesmo que o recurso do Tema editado."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Gerir Modelos"
+msgstr "Gerir Itens de Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Item Editável"
+msgstr "Editar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tipo:"
+msgstr "Tipos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tipo:"
+msgstr "Adicionar Tipo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Adicionar item"
+msgstr "Adicionar Item:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Remover item"
+msgstr "Remover Itens:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Remover Itens de Classe"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Remover Itens de Classe"
+msgstr "Remover Itens Personalizados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Remover Todos os Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Itens do tema GUI"
+msgstr "Adicionar Item Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nome do Nó:"
+msgstr "Nome Antigo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importar tema"
+msgstr "Importar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Predefinição"
+msgstr "Tema Predefinido"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Editar Tema"
+msgstr "Editor de Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Apagar recurso"
+msgstr "Selecionar Outro Recurso Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Importar tema"
+msgstr "Outro Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Anim Renomear Pista"
+msgstr "Confirmar Renomear Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Renomear em Massa"
+msgstr "Cancelar Renomear Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Sobrepõe"
+msgstr "Sobrepor Item"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Desafixar este StyleBox como um estilo principal."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Fixar este StyleBox como um estilo principal. Editar as propriedades vai "
+"atualizar as mesmas em todos os StyleBoxes deste tipo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Tipo"
+msgstr "Adicionar Tipo"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Adicionar item"
+msgstr "Adicionar Tipo de Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Tipo de nó"
+msgstr "Tipos de Nó:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Carregar Predefinição"
+msgstr "Mostrar Predefinição"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Sobrepõe"
+msgstr "Sobrepor Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Gerir Modelos de Exportação..."
+msgstr "Gerir Itens..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Adicionar, remover, organizar e importar itens Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Pré-visualização"
+msgstr "Adicionar Pré-visualização"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Atualizar Pré-visualização"
+msgstr "Pré-visualização Predefinida"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Selecione uma Fonte Malha:"
+msgstr "Selecione Cena UI:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9035,9 +8999,8 @@ msgid "Checked Radio Item"
msgstr "Item Rádio Marcado"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Named Separator"
-msgstr "Sep. Nomeado"
+msgstr "Separador Nomeado"
#: editor/plugins/theme_editor_preview.cpp
msgid "Submenu"
@@ -9096,9 +9059,8 @@ msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "Ficheiro inválido, não é um Modelo válido de barramento de áudio."
+msgstr "Ficheiro inválido, não é um recurso PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
@@ -10495,9 +10457,8 @@ msgid "VisualShader"
msgstr "VIsualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Editar Propriedade Visual"
+msgstr "Editar Propriedade Visual:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10624,9 +10585,8 @@ msgid "Script"
msgstr "Script"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Modo Exportação de Script:"
+msgstr "Modo de Exportação GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -10634,21 +10594,19 @@ msgstr "Texto"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Bytecode compilado (Carregamento mais Rápido)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "Encriptado (Fornecer Chave em Baixo)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "Chave de Encriptação Inválida (tem de ter 64 caracteres)"
+msgstr "Chave de Encriptação Inválida (tem de ter 64 caracteres hexadecimais)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "Chave de Encriptação de Script (Hexadecimal 256-bits):"
+msgstr "Chave de Encriptação GDScript (hexadecimal 256-bits):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -10722,13 +10680,12 @@ msgid "Imported Project"
msgstr "Projeto importado"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "Nome do Projeto Inválido."
+msgstr "Nome do projeto inválido."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
-msgstr "Não consigo criar pasta."
+msgstr "Incapaz de criar pasta."
#: editor/project_manager.cpp
msgid "There is already a folder in this path with the specified name."
@@ -10752,11 +10709,11 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
-msgstr "Não consigo editar project.godot no caminho do projeto."
+msgstr "Incapaz de editar project.godot no caminho do projeto."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
-msgstr "Não consigo criar project.godot no caminho do projeto."
+msgstr "Incapaz de criar project.godot no caminho do projeto."
#: editor/project_manager.cpp
msgid "Error opening package file, not in ZIP format."
@@ -10870,7 +10827,7 @@ msgstr "Erro: Projeto inexistente no sistema de ficheiros."
#: editor/project_manager.cpp
msgid "Can't open project at '%s'."
-msgstr "Não consigo abrir projeto em '%s'."
+msgstr "Incapaz de abrir projeto em '%s'."
#: editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
@@ -10932,7 +10889,7 @@ msgid ""
"Please edit the project and set the main scene in the Project Settings under "
"the \"Application\" category."
msgstr ""
-"Não consigo executar o projeto: cena principal não definida.\n"
+"Incapaz de executar o projeto: cena principal não definida.\n"
"Edite o projeto e defina a cena principal em Configurações do Projeto dentro "
"da categoria \"Application\"."
@@ -10941,7 +10898,7 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
-"Não consigo executar o projeto: Ativos têm de ser importados.\n"
+"Incapaz de executar o projeto: Recursos têm de ser importados.\n"
"Edite o projeto para desencadear a importação inicial."
#: editor/project_manager.cpp
@@ -10949,14 +10906,12 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Está seguro que quer executar %d projetos em simultâneo?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Selecionar aparelho da lista"
+msgstr "Remover %d projetos da lista?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Selecionar aparelho da lista"
+msgstr "Remover este projeto da lista?"
#: editor/project_manager.cpp
msgid ""
@@ -10989,9 +10944,8 @@ msgid "Project Manager"
msgstr "Gestor de Projetos"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projetos"
+msgstr "Projetos Locais"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11002,41 +10956,36 @@ msgid "Last Modified"
msgstr "Última modificação"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Exportar Projeto"
+msgstr "Editar Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Renomear Projeto"
+msgstr "Executar Projeto"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr "Analisar"
+msgstr "Pequisar"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projetos"
+msgstr "Pesquisar Projetos"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
-msgstr "Selecione uma pasta para analisar"
+msgstr "Selecione uma Pasta para Pesquisar"
#: editor/project_manager.cpp
msgid "New Project"
msgstr "Novo Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Projeto importado"
+msgstr "Importar Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Renomear Projeto"
+msgstr "Remover Projeto"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11047,9 +10996,8 @@ msgid "About"
msgstr "Sobre"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Biblioteca de Ativos"
+msgstr "Projetos Biblioteca de Recursos"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11065,7 +11013,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Can't run project"
-msgstr "Não consigo executar o Projeto"
+msgstr "Incapaz de executar o projeto"
#: editor/project_manager.cpp
msgid ""
@@ -11073,22 +11021,20 @@ msgid ""
"Would you like to explore official example projects in the Asset Library?"
msgstr ""
"Atualmente não tem quaisquer projetos.\n"
-"Gostaria de explorar os projetos de exemplo oficiais na Biblioteca de Ativos?"
+"Gostaria de explorar os projetos de exemplo oficiais na Biblioteca de "
+"Recursos?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Propriedades do Filtro"
+msgstr "Filtrar projetos"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"A caixa de pesquisa filtra projetos por nome e último componente do "
-"caminho.\n"
+"Este campo filtra projetos por nome e última componente do caminho.\n"
"Para filtrar projetos por nome e caminho completo, a pesquisa tem de conter "
"pelo menos um caráter `/`."
@@ -11098,7 +11044,7 @@ msgstr "Tecla "
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "Chave Física"
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -11146,7 +11092,7 @@ msgstr "Aparelho"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (Físico)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11289,23 +11235,20 @@ msgid "Override for Feature"
msgstr "Sobrepor por Característica"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Adicionar tradução"
+msgstr "Adicionar %t Traduções"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
msgstr "Remover tradução"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Recurso Remap Adicionar Remap"
+msgstr "Remapear Recurso Tradução: Adicionar %d Caminho(s)"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Recurso Remap Adicionar Remap"
+msgstr "Remapear Recurso Tradução: Adicionar %d Remap(s)"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -11664,7 +11607,7 @@ msgid ""
"Cannot instance the scene '%s' because the current scene exists within one "
"of its nodes."
msgstr ""
-"Não consigo instanciar a cena '%s' porque a cena atual existe dentro de um "
+"Incapaz de instanciar a cena '%s' porque a cena atual existe dentro de um "
"dos seus nós."
#: editor/scene_tree_dock.cpp
@@ -11681,7 +11624,7 @@ msgstr "Instanciar Cena Filha"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
-msgstr "Não consigo colar o nó raiz na mesma cena."
+msgstr "Incapaz de colar o nó raiz na mesma cena."
#: editor/scene_tree_dock.cpp
msgid "Paste Node(s)"
@@ -11710,7 +11653,7 @@ msgstr "Duplicar Nó(s)"
#: editor/scene_tree_dock.cpp
msgid "Can't reparent nodes in inherited scenes, order of nodes can't change."
msgstr ""
-"Não consigo reassociar nós em cenas herdadas, a ordem dos nós não pode mudar."
+"Incapaz de reassociar nós em cenas herdadas, a ordem dos nós não pode mudar."
#: editor/scene_tree_dock.cpp
msgid "Node must belong to the edited scene to become root."
@@ -11821,11 +11764,11 @@ msgstr "Outro Nó"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr "Não consigo operar em nós de uma cena externa!"
+msgstr "Incapaz de operar em nós de uma cena externa!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr "Não consigo operar em nós herdados pela cena atual!"
+msgstr "Incapaz de operar em nós herdados pela cena atual!"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -11852,7 +11795,7 @@ msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
-"Não consigo guardar nova cena. Provavelmente dependências (instâncias) não "
+"Incapaz de guardar nova cena. Provavelmente dependências (instâncias) não "
"foram satisfeitas."
#: editor/scene_tree_dock.cpp
@@ -11885,7 +11828,7 @@ msgid ""
"This is probably because this editor was built with all language modules "
"disabled."
msgstr ""
-"Não consigo anexar um script: não há linguagens registadas.\n"
+"Incapaz de anexar um script: não há linguagens registadas.\n"
"Isto provavelmente acontece porque o editor foi compilado com todos os "
"módulos de linguagem desativados."
@@ -12101,7 +12044,7 @@ msgstr "Erro ao carregar Modelo '%s'"
#: editor/script_create_dialog.cpp
msgid "Error - Could not create script in filesystem."
-msgstr "Erro - Não consigo criar script no sistema de ficheiros."
+msgstr "Erro - Incapaz de criar script no sistema de ficheiros."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
@@ -12247,7 +12190,7 @@ msgstr "Copiar Erro"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Abrir Código C++ no GitHub"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12426,14 +12369,22 @@ msgid "Change Ray Shape Length"
msgstr "Mudar comprimento da forma raio"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Definir posição do Ponto da curva"
+msgstr "Definir Posição do Ponto do Quarto"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Definir posição do Ponto da curva"
+msgstr "Definir Posição do Ponto do Portal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Mudar Raio da Forma Cilindro"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Definir curva na posição"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12530,8 +12481,8 @@ msgstr "Formato de dicionário de instância inválido (falta @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Formato de dicionário de instância inválido (não consigo carregar o script "
-"em @path)"
+"Formato de dicionário de instância inválido (incapaz de carregar o script em "
+"@path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
@@ -12546,14 +12497,12 @@ msgid "Object can't provide a length."
msgstr "Objeto não fornece um comprimento."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Exportar Biblioteca de Malhas"
+msgstr "Exportar Malha GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Exportar..."
+msgstr "Exportar GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12596,9 +12545,8 @@ msgid "GridMap Paint"
msgstr "Pintura do GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "Seleção de Preenchimento de GridMap"
+msgstr "Seleção de GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12720,6 +12668,11 @@ msgstr "A Traçar lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr "Nome de classe não pode ser uma palavra-chave reservada"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Preencher Seleção"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fim do stack trace de exceção interna"
@@ -12850,18 +12803,16 @@ msgid "Add Output Port"
msgstr "Adicionar Porta de Saída"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Mudar tipo"
+msgstr "Mudar Tipo de Porta"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Mudar nome de porta de entrada"
+msgstr "Mudar Nome da Porta"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
-msgstr "Sobrepõe-se a função incorporada existente."
+msgstr "Sobrepõe uma função incorporada existente."
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new function."
@@ -12972,9 +12923,8 @@ msgid "Add Preload Node"
msgstr "Adicionar Nó de Pré-carregamento"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Adicionar Nó"
+msgstr "Adicionar Nó(s)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -12985,8 +12935,7 @@ msgid ""
"Can't drop properties because script '%s' is not used in this scene.\n"
"Drop holding 'Shift' to just copy the signature."
msgstr ""
-"Não consigo largar propriedades porque o script '%s' não é usado neste "
-"cena.\n"
+"Incapaz de largar propriedades porque o script '%s' não é usado neste cena.\n"
"Largue com 'Shift' para copiar apenas a assinatura."
#: modules/visual_script/visual_script_editor.cpp
@@ -13039,7 +12988,7 @@ msgstr "Redimensionar Comentário"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't copy the function node."
-msgstr "Não consigo copiar o nó função."
+msgstr "Incapaz de copiar o nó função."
#: modules/visual_script/visual_script_editor.cpp
msgid "Paste VisualScript Nodes"
@@ -13047,11 +12996,11 @@ msgstr "Colar Nós VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
-msgstr "Não consigo criar função com um nó função."
+msgstr "Incapaz de criar função com um nó função."
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function of nodes from nodes of multiple functions."
-msgstr "Não consigo criar função de nós a partir de nós de várias funções."
+msgstr "Incapaz de criar função de nós a partir de nós de várias funções."
#: modules/visual_script/visual_script_editor.cpp
msgid "Select at least one node with sequence port."
@@ -13206,75 +13155,69 @@ msgstr "Procurar VisualScript"
msgid "Get %s"
msgstr "Obter %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Falta o nome do pacote."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Os segmentos de pacote devem ser de comprimento diferente de zero."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"O carácter '%s' não é permitido em nomes de pacotes de aplicações Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Um dígito não pode ser o primeiro carácter num segmento de pacote."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"O carácter '%s' não pode ser o primeiro carácter num segmento de pacote."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "O pacote deve ter pelo menos um separador '.'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Selecionar aparelho da lista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "A executar em %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
-msgstr "A Exportar Tudo"
+msgstr "A Exportar APK..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
-msgstr "Desinstalar"
+msgstr "A desinstalar..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
-msgstr "A carregar, espere por favor..."
+msgstr "A instalar no dispositivo, espere por favor..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
-msgstr "Não consegui iniciar o subprocesso!"
+msgstr "Incapaz de instalar o dispositivo: %s"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
-msgstr "A executar Script Customizado..."
+msgstr "A executar no dispositivo..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
-msgstr "Não consegui criar pasta."
+msgstr "Incapaz de executar no dispositivo."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Incapaz de localizar a ferramenta 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13282,69 +13225,69 @@ msgstr ""
"Modelo de compilação Android não está instalado neste projeto. Instale-o no "
"menu Projeto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Keystore de depuração não configurada nas Configurações do Editor e nem na "
"predefinição."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Lançamento de keystore configurado incorretamente na predefinição exportada."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"É necessário um caminho válido para o Android SDK no Editor de Configurações."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Caminho inválido para o Android SDK no Editor de Configurações."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Diretoria 'platform-tools' em falta!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Incapaz de encontrar o comando adb das ferramentas Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Por favor confirme a pasta do Android SDK especificada no Editor de "
"Configurações."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Diretoria 'build-tools' em falta!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Incapaz de encontrar o comando apksigner das ferramentas Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Chave pública inválida para expansão APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nome de pacote inválido:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13352,39 +13295,25 @@ msgstr ""
"Módulo inválido \"GodotPaymentV3\" incluído na configuração do projeto "
"\"android/modules\" (alterado em Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"\"Usar Compilação Personalizada\" têm de estar ativa para usar os plugins."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Graus de Liberdade\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Rastreamento de Mão\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR"
"\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Consciência do Foco\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR"
-"\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Exportar AAB\" só é válido quando \"Usar Compilação Personalizada\" está "
"ativa."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13392,58 +13321,52 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "A assinar depuração %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
-msgstr ""
-"A analisar Ficheiros,\n"
-"Espere, por favor..."
+msgstr "A assinar lançamento %s..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
-msgstr "Não consigo abrir modelo para exportação:"
+msgstr "Incapaz de encontrar keystore e exportar."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' devolvido com erro #%d"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
-msgstr "A adicionar %s..."
+msgstr "A verificar %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "Falhou a verificação 'apksigner' de %s."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "A Exportar Tudo"
+msgstr "A exportar para Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Nome de ficheiro inválido! O Pacote Android App exige a extensão *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "Expansão APK não compatível com Pacote Android App."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Formato de exportação não suportado!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13451,7 +13374,7 @@ msgstr ""
"A tentar compilar a partir de um modelo personalizado, mas sem informação de "
"versão. Reinstale no menu 'Projeto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13463,26 +13386,24 @@ msgstr ""
" Versão Godot: %s\n"
"Reinstale o modelo de compilação Android no menu 'Projeto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "Impossível encontrar project.godot no Caminho do Projeto."
+msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle\n"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
-msgstr "Não consigo escrever ficheiro:"
+msgstr "Incapaz de escrever ficheiro de pacote de expansão!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "A compilar Projeto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13491,11 +13412,11 @@ msgstr ""
"Em alternativa visite docs.godotengine.org para a documentação sobre "
"compilação Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "A mover saída"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13503,24 +13424,23 @@ msgstr ""
"Incapaz de copiar e renomear ficheiro de exportação, verifique diretoria de "
"projeto gradle por resultados."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
-msgstr "Animação não encontrada: '%s'"
+msgstr "Pacote não encontrado: '%s'"
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
-msgstr "A criar contornos..."
+msgstr "A criar APK..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Não consigo abrir modelo para exportação:"
+msgstr ""
+"Incapaz de encontrar modelo APK para exportar:\n"
+"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13528,23 +13448,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
-msgstr "A adicionar %s..."
+msgstr "A adicionar ficheiros..."
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
-msgstr "Não consigo escrever ficheiro:"
+msgstr "Incapaz de exportar ficheiros do projeto"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "A alinhar APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "Incapaz de unzipar APK desalinhado temporário."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
@@ -13557,8 +13475,7 @@ msgstr "O carácter \"%s\" não é permitido no Identificador."
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
-"ID da equipa da App Store não especificado - não consigo configurar o "
-"projeto."
+"ID da equipa da App Store não especificado - incapaz de configurar o projeto."
#: platform/iphone/export/export.cpp
msgid "Invalid Identifier:"
@@ -13582,7 +13499,7 @@ msgstr "Executar HTML exportado no navegador predefinido do sistema."
#: platform/javascript/export/export.cpp
msgid "Could not open template for export:"
-msgstr "Não consigo abrir modelo para exportação:"
+msgstr "Incapaz de abrir modelo para exportação:"
#: platform/javascript/export/export.cpp
msgid "Invalid export template:"
@@ -13590,32 +13507,27 @@ msgstr "Modelo de exportação inválido:"
#: platform/javascript/export/export.cpp
msgid "Could not write file:"
-msgstr "Não consigo escrever ficheiro:"
+msgstr "Incapaz de escrever ficheiro:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Não consigo escrever ficheiro:"
+msgstr "Incapaz de ler ficheiro:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Não consigo ler shell HTML personalizado:"
+msgstr "Incapaz de ler shell HTML:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Não consegui criar pasta."
+msgstr "Incapaz de criar diretoria do servidor HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Erro ao guardar cena."
+msgstr "Erro ao iniciar servidor HTTP:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Identificador Inválido:"
+msgstr "Identificador de pacote inválido:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
@@ -14082,6 +13994,14 @@ msgstr ""
"NavigationMeshInstance tem de ser filho ou neto de um nó Navigation. Apenas "
"fornece dados de navegação."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14170,7 +14090,7 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Um Quarto não pode ter outro Quarto como filho ou neto."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
@@ -14408,6 +14328,14 @@ msgstr "Deve usar uma extensão válida."
msgid "Enable grid minimap."
msgstr "Ativar grelha do minimapa."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14460,6 +14388,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "O tamanho do viewport tem de ser maior do que 0 para renderizar."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14481,9 +14413,8 @@ msgid "Invalid comparison function for that type."
msgstr "Função de comparação inválida para este tipo."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "Variações só podem ser atribuídas na função vértice."
+msgstr "Variações não podem ser atribuídas na função '%s'."
#: servers/visual/shader_language.cpp
msgid ""
@@ -14513,6 +14444,41 @@ msgstr "Atribuição a uniforme."
msgid "Constants cannot be modified."
msgstr "Constantes não podem ser modificadas."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Criar Pose de Descanso (a partir de Ossos)"
+
+#~ msgid "Bottom"
+#~ msgstr "Fundo"
+
+#~ msgid "Left"
+#~ msgstr "Esquerda"
+
+#~ msgid "Right"
+#~ msgstr "Direita"
+
+#~ msgid "Front"
+#~ msgstr "Frente"
+
+#~ msgid "Rear"
+#~ msgstr "Trás"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Bugiganga sem Nome"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Graus de Liberdade\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR"
+#~ "\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Consciência do Foco\" só é válido quando \"Modo Xr\" é \"Oculus Mobile "
+#~ "VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Conteúdo do Pacote:"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index b7bb7ce0c4..87c8792cbf 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -120,12 +120,14 @@
# PauloFRs <paulofr1@hotmail.com>, 2021.
# Diego Bloise <diego-dev@outlook.com>, 2021.
# Alkoarism <Alkoarism@gmail.com>, 2021.
+# リーLee <kaualee304@gmail.com>, 2021.
+# William Weber Berrutti <wwberrutti@protonmail.ch>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2021-08-06 06:47+0000\n"
-"Last-Translator: Alkoarism <Alkoarism@gmail.com>\n"
+"PO-Revision-Date: 2021-09-11 20:05+0000\n"
+"Last-Translator: William Weber Berrutti <wwberrutti@protonmail.ch>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -133,7 +135,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -481,15 +483,13 @@ msgstr "Inserir Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Não é possível abrir '%s'."
+msgstr "nodo '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animação"
+msgstr "animação"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -497,9 +497,8 @@ msgstr "AnimationPlayer não pode animar a si mesmo, apenas outros jogadores."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Nenhuma propriedade '%s' existe."
+msgstr "propriedade '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1055,7 +1054,6 @@ msgid "Edit..."
msgstr "Editar..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "Ir ao Método"
@@ -1137,7 +1135,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependências"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Recurso"
@@ -1372,9 +1370,8 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)."
msgstr "Erro ao abrir o pacote \"%s\" (não está em formato ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Já existe)"
+msgstr "%s (já existe)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
@@ -1395,7 +1392,6 @@ msgid "The following files failed extraction from asset \"%s\":"
msgstr "Os seguintes arquivos falharam na extração do asset \"% s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
msgstr "(e %s mais arquivos)"
@@ -1477,9 +1473,8 @@ msgid "Bypass"
msgstr "Ignorar"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Opções da pista"
+msgstr "Opções do canal"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1645,9 +1640,8 @@ msgid "Can't add autoload:"
msgstr "Não pode adicionar autoload:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "O %s é um caminho inválido. O arquivo não existe."
+msgstr "%s é um caminho inválido. O arquivo não existe."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
@@ -1675,7 +1669,6 @@ msgid "Name"
msgstr "Nome"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
msgstr "Variável Global"
@@ -1802,13 +1795,13 @@ msgstr ""
"Habilite 'Importar Pvrtc' em Configurações do Projeto ou desabilite 'Driver "
"Reserva Ativado'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Modelo customizado de depuração não encontrado."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1851,12 +1844,10 @@ msgid "Import Dock"
msgstr "Importar Dock"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Allows to view and edit 3D scenes."
msgstr "Permite visualizar e editar cenas 3D."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Allows to edit scripts using the integrated script editor."
msgstr "Permite editar scripts usando o editor de script integrado."
@@ -1869,17 +1860,16 @@ msgid "Allows editing the node hierarchy in the Scene dock."
msgstr "Permite editar a hierarquia de nó na doca Cena."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
-msgstr "Permite trabalhar com sinais e grupos do nó selecionado na doca Cena."
+msgstr ""
+"Permite trabalhar com sinais e grupos do nó selecionado no painel Cena."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Allows to browse the local file system via a dedicated dock."
msgstr ""
-"Permite navegar pelo sistema de arquivos local através de uma doca dedicada."
+"Permite navegar pelo sistema de arquivos local através de um painel dedicado."
#: editor/editor_feature_profile.cpp
msgid ""
@@ -1890,9 +1880,8 @@ msgstr ""
"Requer a doca FileSystem para funcionar."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Atual)"
+msgstr "(atual)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
@@ -1931,14 +1920,12 @@ msgid "Enable Contextual Editor"
msgstr "Habilitar Editor Contextual"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Propriedades de Classe:"
+msgstr "Propriedades da Classe:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Características principais:"
+msgstr "Características Principais:"
#: editor/editor_feature_profile.cpp
msgid "Nodes and Classes:"
@@ -1968,12 +1955,10 @@ msgid "Current Profile:"
msgstr "Perfil Atual:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
msgstr "Criar Perfil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
msgstr "Remover Perfil"
@@ -1995,17 +1980,14 @@ msgid "Export"
msgstr "Exportação"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
msgstr "Configurar Perfil Selecionado:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
msgstr "Opções Extra:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
"Criar ou importar um perfil para editar as classes e propriedades "
@@ -2036,7 +2018,6 @@ msgid "Select Current Folder"
msgstr "Selecionar a Pasta Atual"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "O arquivo já existe. Sobrescrever?"
@@ -2199,7 +2180,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importando Assets"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Início"
@@ -2712,6 +2693,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Cena atual não salva. Abrir mesmo assim?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Desfazer"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Refazer"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Não foi possível recarregar a cena pois nunca foi salva."
@@ -3068,7 +3075,6 @@ msgid "Orphan Resource Explorer..."
msgstr "Explorador de Recursos Órfãos..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
msgstr "Recarregar o projeto atual"
@@ -3230,12 +3236,10 @@ msgid "Help"
msgstr "Ajuda"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
msgstr "Documentação Online"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Questions & Answers"
msgstr "Perguntas & Respostas"
@@ -3244,9 +3248,8 @@ msgid "Report a Bug"
msgstr "Reportar bug"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "Sugira um recurso"
+msgstr "Sugira uma funcionalidade"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3257,9 +3260,8 @@ msgid "Community"
msgstr "Comunidade"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Sobre Godot"
+msgstr "Sobre o Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3353,7 +3355,6 @@ msgid "Manage Templates"
msgstr "Gerenciar Templates"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "Instalar do arquivo"
@@ -3408,6 +3409,11 @@ msgid "Merge With Existing"
msgstr "Fundir Com Existente"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Alterar Transformação da Animação"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Abrir e Rodar um Script"
@@ -3479,7 +3485,6 @@ msgid "No sub-resources found."
msgstr "Nenhum sub-recurso encontrado."
#: editor/editor_path.cpp
-#, fuzzy
msgid "Open a list of sub-resources."
msgstr "Abra uma lista de sub-recursos."
@@ -3508,12 +3513,10 @@ msgid "Update"
msgstr "Atualizar"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
msgstr "Versão"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
msgstr "Autor"
@@ -3663,6 +3666,10 @@ msgstr ""
"O recurso selecionado (%s) não corresponde ao tipo esperado para essa "
"propriedade (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Tornar Único"
@@ -3682,9 +3689,8 @@ msgid "Paste"
msgstr "Colar"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "Converter Para %s"
+msgstr "Converter para %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3734,11 +3740,10 @@ msgid "Did you forget the '_run' method?"
msgstr "Você esqueceu o método '_run'?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Segure Ctrl para arredondar para números inteiros. Segure Shift para aplicar "
-"mudanças mais precisas."
+"Segure %s para arredondar para inteiros. Segure Shift para aplicar mudanças "
+"mais precisas."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3758,11 +3763,11 @@ msgstr "Importar a Partir do Nó:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Abrir a pasta contendo esses modelos."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Desinstalar esses modelos."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3776,7 +3781,7 @@ msgstr "Reconectando, por favor aguarde."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "Iniciando o download..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -3788,9 +3793,8 @@ msgid "Connecting to the mirror..."
msgstr "Conectando..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Não foi possível resolver o hostname:"
+msgstr "Não é possível resolver o endereço solicitado."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3808,18 +3812,16 @@ msgid "Request failed."
msgstr "A solicitação falhou."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "A solicitação falhou, muitos redirecionamentos"
+msgstr "A solicitação acabou em um loop de redirecionamento."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "A solicitação falhou."
+msgstr "Falha na solicitação:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "Download completo; extraindo modelos..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3846,7 +3848,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Best available mirror"
-msgstr ""
+msgstr "Melhor espelho disponível"
#: editor/export_template_manager.cpp
msgid ""
@@ -3899,24 +3901,24 @@ msgid "SSL Handshake Error"
msgstr "Erro SSL Handshake"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Não se pôde abrir zip dos modelos de exportação."
+msgstr "Não foi possível abrir o arquivo de modelos de exportação."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Formato do version.txt inválido dentro de templates: %s."
+msgstr ""
+"Formato de version.txt inválido dentro do arquivo de modelos de exportação: "
+"%s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Não foi encontrado um version.txt dentro dos modelos."
+msgstr ""
+"Não foi possível encontrar um version.txt dentro do arquivo de modelos de "
+"exportação."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Erro ao criar caminho para modelos:"
+msgstr "Erro ao criar caminho para extrair modelos:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3946,10 +3948,13 @@ msgstr "Versão Atual:"
#: editor/export_template_manager.cpp
msgid "Export templates are missing. Download them or install from a file."
msgstr ""
+"Os modelos de exportação estão faltando. Baixe-os ou instale a partir de um "
+"arquivo."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
msgstr ""
+"As exportações de modelos estão instaladas e prontas para serem usadas."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3958,7 +3963,7 @@ msgstr "Abrir um arquivo"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Abre a pasta contendo modelos instalados para a versão atual."
#: editor/export_template_manager.cpp
msgid "Uninstall"
@@ -3986,13 +3991,15 @@ msgstr "Copiar Erro"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "Baixar e Instalar"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Baixa e instala modelos para a versão atual a partir do melhor espelho "
+"possível."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -4043,6 +4050,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Os modelos continuarão sendo baixados.\n"
+"Você pode experienciar um pequeno congelamento no editor ao terminar."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4230,7 +4239,7 @@ msgstr "Renomear..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Focar a caixa de pesquisa"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -5598,7 +5607,7 @@ msgstr "Todos"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Pesquisar modelos, projetos e demonstrações"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
@@ -5646,7 +5655,7 @@ msgstr "Arquivo ZIP de Assets"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Tocar/Pausar Pré-visualização do Áudio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5806,6 +5815,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Mover CanvaItem \"%s\" para (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Fixar Seleção"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupo"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6755,7 +6776,13 @@ msgid "Remove Selected Item"
msgstr "Remover Item Selecionado"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importar da Cena"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importar da Cena"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7354,6 +7381,16 @@ msgstr "Gerar Contagem de Pontos:"
msgid "Flip Portal"
msgstr "Inverter Horizontalmente"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Limpar Transformação"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Criar Nó"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree não tem caminho definido para um AnimationPlayer"
@@ -7855,12 +7892,14 @@ msgid "Skeleton2D"
msgstr "Esqueleto2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Faça Resto Pose (De Ossos)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Definir os ossos para descansar Pose"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Definir os ossos para descansar Pose"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Sobrescrever Cena Existente"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7887,6 +7926,71 @@ msgid "Perspective"
msgstr "Perspectiva"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspectiva"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ortogonal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspectiva"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Transformação Abortada."
@@ -7924,9 +8028,8 @@ msgid "Translate"
msgstr "Translação:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Escala:"
+msgstr "Scale"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7958,9 +8061,8 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Tamanho: "
+msgstr "Tamanho:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8005,42 +8107,22 @@ msgid "Bottom View."
msgstr "Visão inferior."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Baixo"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Visão Esquerda."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Esquerda"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Visão Direita."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Direita"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Visão Frontal."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Frente"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Visão Traseira."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Traseira"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Alinhar Transformação com a Vista"
@@ -8316,6 +8398,11 @@ msgid "View Portal Culling"
msgstr "Configurações da Viewport"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Configurações da Viewport"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Configurações..."
@@ -8381,8 +8468,9 @@ msgid "Post"
msgstr "Pós"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Coisa sem nome"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Projeto Sem Nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12570,6 +12658,16 @@ msgstr "Definir Posição do Ponto da Curva"
msgid "Set Portal Point Position"
msgstr "Definir Posição do Ponto da Curva"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Alterar o Raio da Forma do Cilindro"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Colocar a Curva na Posição"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Alterar Raio do Cilindro"
@@ -12855,6 +12953,11 @@ msgstr "Traçando mapas de luz"
msgid "Class name can't be a reserved keyword"
msgstr "Nome da classe não pode ser uma palavra reservada"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Seleção de preenchimento"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Fim da pilha de rastreamento de exceção interna"
@@ -13342,76 +13445,76 @@ msgstr "Buscar VisualScript"
msgid "Get %s"
msgstr "Receba %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Nome do pacote está faltando."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Seguimentos de pacote necessitam ser de tamanho diferente de zero."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"O caractere '%s' não é permitido em nomes de pacotes de aplicações Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
"Um dígito não pode ser o primeiro caractere em um seguimento de pacote."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"O caractere '%s' não pode ser o primeiro caractere em um segmento de pacote."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "O pacote deve ter pelo menos um separador '.'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Selecione um dispositivo da lista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportando tudo"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Desinstalar"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Carregando, por favor aguarde."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Não foi possível instanciar cena!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Rodando Script Personalizado..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Não foi possível criar a pasta."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Não foi possível encontrar a ferramenta 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13419,7 +13522,7 @@ msgstr ""
"O modelo de compilação do Android não foi instalado no projeto. Instale "
"através do menu Projeto."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13427,13 +13530,13 @@ msgstr ""
"As configurações Debug Keystore, Debug User E Debug Password devem ser "
"configuradas OU nenhuma delas."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Porta-chaves de depuração não configurado nas Configurações do Editor e nem "
"na predefinição."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13441,54 +13544,54 @@ msgstr ""
"As configurações de Release Keystore, Release User AND Release Password "
"devem ser definidas OU nenhuma delas."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Keystore de liberação incorretamente configurada na predefinição de "
"exportação."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Um caminho Android SDK é necessário nas Configurações do Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Caminho do Android SDK está inválido para Configurações do Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Diretório 'ferramentas-da-plataforma' ausente!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"Não foi possível encontrar o comando adb nas ferramentas do Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Por favor, verifique o caminho do Android SDK especificado nas Configurações "
"do Editor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Diretório 'ferramentas-da-plataforma' está faltando !"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"Não foi possível encontrar o comando apksigner nas ferramentas de build do "
"Android SDK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Chave pública inválida para expansão do APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nome de pacote inválido:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13496,40 +13599,25 @@ msgstr ""
"Módulo \"GodotPaymentV3\" inválido incluido na configuração de projeto "
"\"android/modules\" (alterado em Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"\"Usar Compilação Customizada\" precisa estar ativo para ser possível "
"utilizar plugins."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR"
-"\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Hand Tracking\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" só é válido quando o \"Oculus Mobile VR\" está no \"Xr "
-"Mode\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Exportar AAB\" só é válido quando \"Usar Compilação Customizada\" está "
"habilitado."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13537,57 +13625,56 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Escaneando arquivos,\n"
"Por favor aguarde..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Não foi possível abrir o modelo para exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Adicionando %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
-msgstr "Exportando tudo"
+msgstr "Exportando para Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Nome de arquivo invalido! Android App Bunlde requer a extensão *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "A expansão APK não é compatível com o Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13596,7 +13683,7 @@ msgstr ""
"nenhuma informação de versão para ele existe. Por favor, reinstale pelo menu "
"'Projeto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13608,26 +13695,26 @@ msgstr ""
" Versão do Godot: %s\n"
"Por favor reinstale o modelo de compilação do Android pelo menu 'Projeto'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
-#, fuzzy
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
-msgstr "Não foi possível encontrar project.godot no caminho do projeto."
+msgstr ""
+"Não foi possível exportar os arquivos do projeto ao projeto do gradle\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Não foi possível escrever o arquivo:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Construindo Projeto Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13636,11 +13723,11 @@ msgstr ""
"Alternativamente, visite docs.godotengine.org para ver a documentação de "
"compilação do Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Movendo saída"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13648,24 +13735,24 @@ msgstr ""
"Não foi possível copiar e renomear o arquivo de exportação, verifique o "
"diretório do projeto gradle por saídas."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animação não encontrada: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Criando contornos..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Não foi possível abrir o modelo para exportar:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13673,21 +13760,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Adicionando %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Não foi possível escrever o arquivo:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14225,6 +14312,14 @@ msgstr ""
"NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele "
"apenas fornece dados de navegação."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14552,6 +14647,14 @@ msgstr "Deve usar uma extensão válida."
msgid "Enable grid minimap."
msgstr "Ativar minimapa de grade."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14606,6 +14709,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"O tamanho da Viewport deve ser maior do que 0 para renderizar qualquer coisa."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14659,6 +14766,41 @@ msgstr "Atribuição à uniforme."
msgid "Constants cannot be modified."
msgstr "Constantes não podem serem modificadas."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Faça Resto Pose (De Ossos)"
+
+#~ msgid "Bottom"
+#~ msgstr "Baixo"
+
+#~ msgid "Left"
+#~ msgstr "Esquerda"
+
+#~ msgid "Right"
+#~ msgstr "Direita"
+
+#~ msgid "Front"
+#~ msgstr "Frente"
+
+#~ msgid "Rear"
+#~ msgstr "Traseira"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Coisa sem nome"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile "
+#~ "VR\"."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" só é válido quando o \"Oculus Mobile VR\" está no "
+#~ "\"Xr Mode\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Conteúdo:"
@@ -16604,9 +16746,6 @@ msgstr "Constantes não podem serem modificadas."
#~ msgid "Images:"
#~ msgstr "Imagens:"
-#~ msgid "Group"
-#~ msgstr "Grupo"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Modo de Conversão de Amostras (arquivos .wav):"
@@ -16716,9 +16855,6 @@ msgstr "Constantes não podem serem modificadas."
#~ msgid "Deploy File Server Clients"
#~ msgstr "Instalar Clientes do Servidor de Arquivos"
-#~ msgid "Overwrite Existing Scene"
-#~ msgstr "Sobrescrever Cena Existente"
-
#~ msgid "Overwrite Existing, Keep Materials"
#~ msgstr "Sobrescrever Existente, Manter Materiais"
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 2b1626bfe2..ecf041058c 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -1036,7 +1036,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Dependențe"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resursă"
@@ -1708,13 +1708,13 @@ msgstr ""
"Activați „Import Etc” în Setările de proiect sau dezactivați „Driver "
"Fallback Enabled”."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Fișierul șablon de depanare personalizat nu a fost găsit."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2101,7 +2101,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importând Asset-uri"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Sus"
@@ -2609,6 +2609,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Scena curentă nu este salvată. Deschizi oricum?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Revenire"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Reîntoarcere"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nu pot reîncărca o scenă care nu a fost salvată niciodată."
@@ -3295,6 +3321,11 @@ msgid "Merge With Existing"
msgstr "Contopește Cu Existentul"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Schimbare transformare"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Deschide și Execută un Script"
@@ -3543,6 +3574,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5701,6 +5736,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Editează ObiectulPânză"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Selectează"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupuri"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6672,7 +6719,13 @@ msgid "Remove Selected Item"
msgstr "Elimină Obiectul Selectat"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importă din Scenă"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importă din Scenă"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7289,6 +7342,16 @@ msgstr "Număr de Puncte Generate:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Anim Schimbare transformare"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Creează Nod"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7810,12 +7873,14 @@ msgid "Skeleton2D"
msgstr "Singleton (Unicat)"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Încărcați Implicit"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "extindere:"
#: editor/plugins/skeleton_editor_plugin.cpp
#, fuzzy
@@ -7844,6 +7909,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Mod Rotație"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7960,42 +8080,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8265,6 +8365,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Editează Poligon"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Setări ..."
@@ -8330,7 +8435,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12464,6 +12569,15 @@ msgstr "Setare poziție punct de curbă"
msgid "Set Portal Point Position"
msgstr "Setare poziție punct de curbă"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Setare Curbă În Poziție"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -12759,6 +12873,11 @@ msgstr "Se Genereaza Lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Toată selecția"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13245,165 +13364,154 @@ msgstr "Curăță Scriptul"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Selectează un dispozitiv din listă"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportare"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Dezinstalează"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Se recuperează oglinzile, te rog așteaptă..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Nu s-a putut porni subprocesul!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Se Execută un Script Personalizat..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Directorul nu a putut fi creat."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Nume pachet nevalid:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13411,62 +13519,62 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Se Scanează Fișierele,\n"
"Te Rog Așteaptă..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Se adaugă %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Exportare"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13474,56 +13582,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Unelte Animație"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Crearea conturilor..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13531,21 +13639,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Se adaugă %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Nu s-a putut porni subprocesul!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14008,6 +14116,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14300,6 +14416,14 @@ msgstr "Trebuie să utilizaţi o extensie valida."
msgid "Enable grid minimap."
msgstr "Activează minimapa in format grilă."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14340,6 +14464,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 50d4484e4b..c402e80ff1 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -102,7 +102,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-10 21:40+0000\n"
+"PO-Revision-Date: 2021-08-14 19:04+0000\n"
"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
@@ -462,15 +462,13 @@ msgstr "Вставить"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Не удаётся открыть '%s'."
+msgstr "узел «%s»"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Анимация"
+msgstr "анимация"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -478,9 +476,8 @@ msgstr "AnimationPlayer не может анимировать сам себя,
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Свойство «%s» не существует."
+msgstr "свойство «%s»"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1118,7 +1115,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Зависимости"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ресурс"
@@ -1773,13 +1770,13 @@ msgstr ""
"Включите «Import Pvrtc» в Настройках проекта или отключите «Driver Fallback "
"Enabled»."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Пользовательский отладочный шаблон не найден."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2162,7 +2159,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Ре)Импортировать"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Верх"
@@ -2399,6 +2396,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Вращается при перерисовке окна редактора.\n"
+"Включена опция «Обновлять непрерывно», которая может увеличить "
+"энергопотребление. Щёлкните, чтобы отключить её."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2676,6 +2676,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Текущая сцена не сохранена. Открыть в любом случае?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Отменить"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Повторить"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Не возможно загрузить сцену, которая не была сохранена."
@@ -3361,6 +3387,11 @@ msgid "Merge With Existing"
msgstr "Объединить с существующей"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Изменить положение"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Открыть и запустить скрипт"
@@ -3617,6 +3648,10 @@ msgstr ""
"Выбранные ресурсы (%s) не соответствуют типам, ожидаемым для данного "
"свойства (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Сделать уникальным"
@@ -3909,14 +3944,12 @@ msgid "Download from:"
msgstr "Загрузить из:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Запустить в браузере"
+msgstr "Открыть в веб-браузере"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Копировать ошибку"
+msgstr "Копировать URL зеркала"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -5720,6 +5753,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Передвинуть CanvasItem «%s» в (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Заблокировать выбранное"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Группа"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6658,7 +6703,13 @@ msgid "Remove Selected Item"
msgstr "Удалить выбранный элемент"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Импортировать из сцены"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Импортировать из сцены"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7249,6 +7300,16 @@ msgstr "Генерировать точки"
msgid "Flip Portal"
msgstr "Перевернуть портал"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Очистить преобразование"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Создать узел"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree - не задан путь к AnimationPlayer"
@@ -7753,12 +7814,14 @@ msgid "Skeleton2D"
msgstr "2D скелет"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Сделать позу покоя (из костей)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Установить кости в позу покоя"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Установить кости в позу покоя"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Перезаписать существующую сцену"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7785,6 +7848,71 @@ msgid "Perspective"
msgstr "Перспективный"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Перспективный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Перспективный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Перспективный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Перспективный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ортогональный"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Перспективный"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Преобразование прервано."
@@ -7892,42 +8020,22 @@ msgid "Bottom View."
msgstr "Вид снизу."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Низ"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Вид слева."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Лево"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Вид справа."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Право"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Вид спереди."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Перед"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Вид сзади."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Зад"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Выровнять трансформации с видом"
@@ -8200,6 +8308,11 @@ msgid "View Portal Culling"
msgstr "Отображать portal culling"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Отображать portal culling"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Настройки..."
@@ -8265,8 +8378,9 @@ msgid "Post"
msgstr "После"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Безымянный гизмо"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Безымянный проект"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8725,6 +8839,9 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Выберите тип темы из списка, чтобы отредактировать его элементы.\n"
+"Вы можете добавить пользовательский тип или импортировать тип с его "
+"элементами из другой темы."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8755,6 +8872,8 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Этот тип темы пуст.\n"
+"Добавьте в него элементы вручную или импортировав из другой темы."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -12385,14 +12504,22 @@ msgid "Change Ray Shape Length"
msgstr "Изменить длину луча"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Установить положение точки кривой"
+msgstr "Задать положение точки комнаты"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Установить положение точки кривой"
+msgstr "Задать положение точки портала"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Изменить радиус цилиндра"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Установить позицию входа кривой"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12676,6 +12803,11 @@ msgstr "Построение карт освещения"
msgid "Class name can't be a reserved keyword"
msgstr "Имя класса не может быть зарезервированным ключевым словом"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Заполнить выбранное"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Конец трассировки внутреннего стека исключений"
@@ -13159,74 +13291,74 @@ msgstr "Искать VisualScript"
msgid "Get %s"
msgstr "Получить %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Отсутствует имя пакета."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Части пакета не могут быть пустыми."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Символ «%s» не разрешён в имени пакета Android-приложения."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Число не может быть первым символом в части пакета."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Символ «%s» не может стоять первым в сегменте пакета."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Пакет должен иметь хотя бы один разделитель «.»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Выберите устройство из списка"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "Выполняется на %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "Экспорт APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "Удаление..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "Установка на устройство, пожалуйста, ждите..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Не удалось установить на устройство: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "Запуск на устройстве..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "Не удалось выполнить на устройстве."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Не удалось найти инструмент «apksigner»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
"Шаблон сборки Android не установлен в проекте. Установите его в меню проекта."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13234,13 +13366,13 @@ msgstr ""
"ЛИБО должны быть заданы настройки Debug Keystore, Debug User И Debug "
"Password, ЛИБО ни одна из них."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Отладочное хранилище ключей не настроено ни в настройках редактора, ни в "
"предустановках."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13248,50 +13380,50 @@ msgstr ""
"ЛИБО должны быть заданы настройки Release Keystore, Release User И Release "
"Password, ЛИБО ни одна из них."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Хранилище ключей не настроено ни в настройках редактора, ни в предустановках."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Требуется указать действительный путь к Android SDK в Настройках редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Недействительный путь Android SDK в Настройках редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Директория «platform-tools» отсутствует!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Не удалось найти команду adb в Android SDK platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Пожалуйста, проверьте каталог Android SDK, указанный в Настройках редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Директория «build-tools» отсутствует!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Не удалось найти команду apksigner в Android SDK build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Недействительный публичный ключ для расширения APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Недопустимое имя пакета:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13299,39 +13431,24 @@ msgstr ""
"Недопустимый модуль «GodotPaymentV3», включенный в настройку проекта "
"«android/modules» (изменен в Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "«Use Custom Build» должен быть включен для использования плагинов."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"«Степени свободы» действительны только тогда, когда «Xr Mode» - это «Oculus "
-"Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"«Отслеживание рук» действует только тогда, когда «Xr Mode» - это «Oculus "
"Mobile VR»."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"«Осведомленность о фокусе» действительна только в том случае, если «Режим "
-"Xr» - это «Oculus Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"«Export AAB» действителен только при включённой опции «Использовать "
"пользовательскую сборку»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13342,51 +13459,51 @@ msgstr ""
"Пожалуйста, проверьте наличие программы в каталоге Android SDK build-tools.\n"
"Результат %s не подписан."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "Подписание отладочного %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "Подписание релиза %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "Не удалось найти хранилище ключей, невозможно экспортировать."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "«apksigner» завершился с ошибкой #%d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "Проверка %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "Проверка «apksigner» «%s» не удалась."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Экспорт для Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Неверное имя файла! Android App Bundle требует расширения *.aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion несовместимо с Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Неверное имя файла! Android APK требует расширения *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "Неподдерживаемый формат экспорта!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13394,7 +13511,7 @@ msgstr ""
"Попытка сборки из пользовательского шаблона, но информации о версии для него "
"не существует. Пожалуйста, переустановите из меню «Проект»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13406,25 +13523,25 @@ msgstr ""
" Версия Godot: %s\n"
"Пожалуйста, переустановите шаблон сборки Android из меню «Проект»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
"Невозможно перезаписать файлы res://android/build/res/*.xml с именем проекта"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "Не удалось экспортировать файлы проекта в проект gradle\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "Не удалось записать расширение файла пакета!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Сборка проекта Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13433,11 +13550,11 @@ msgstr ""
"Также посетите docs.godotengine.org для получения документации по сборке "
"Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Перемещение выходных данных"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13445,15 +13562,15 @@ msgstr ""
"Невозможно скопировать и переименовать файл экспорта, проверьте диекторию "
"проекта gradle на наличие выходных данных."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr "Пакет не найден: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Создание APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13461,7 +13578,7 @@ msgstr ""
"Не удалось найти шаблон APK для экспорта:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13472,19 +13589,19 @@ msgstr ""
"Пожалуйста, создайте шаблон со всеми необходимыми библиотеками или снимите "
"флажки с отсутствующих архитектур в пресете экспорта."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Добавление файлов..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "Не удалось экспортировать файлы проекта"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Выравнивание APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "Не удалось распаковать временный невыровненный APK."
@@ -14021,6 +14138,14 @@ msgstr ""
"NavigationMeshInstance должен быть дочерним или под-дочерним узлом "
"Navigation. Он предоставляет только навигационные данные."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14156,36 +14281,50 @@ msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Путь к RoomList недействителен.\n"
+"Пожалуйста, проверьте, назначена ли ветка RoomList в RoomManager."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList не содержит комнат, отмена."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Обнаружены неверно названные узлы, подробности смотрите в журнале вывода. "
+"Отмена."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Связанная с порталом комната не найдена, подробности смотрите в журнале "
+"вывода."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Сбой автопривязки портала, проверьте журнал вывода для получения подробной "
+"информации.\n"
+"Проверьте, что портал обращен наружу от исходной комнаты."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Обнаружено пересечение комнат, камеры могут работать некорректно в зоне "
+"перекрытия.\n"
+"Проверьте журнал вывода для получения подробной информации."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Ошибка при вычислении границ комнаты.\n"
+"Убедитесь, что все комнаты содержат геометрию или границы заданы вручную."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14351,6 +14490,14 @@ msgstr "Нужно использовать доступное расширен
msgid "Enable grid minimap."
msgstr "Включить миникарту сетки."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14405,6 +14552,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Размер окна просмотра должен быть больше 0 для рендеринга."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14461,6 +14612,41 @@ msgstr "Назначить форму."
msgid "Constants cannot be modified."
msgstr "Константы не могут быть изменены."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Сделать позу покоя (из костей)"
+
+#~ msgid "Bottom"
+#~ msgstr "Низ"
+
+#~ msgid "Left"
+#~ msgstr "Лево"
+
+#~ msgid "Right"
+#~ msgstr "Право"
+
+#~ msgid "Front"
+#~ msgstr "Перед"
+
+#~ msgid "Rear"
+#~ msgstr "Зад"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Безымянный гизмо"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "«Степени свободы» действительны только тогда, когда «Xr Mode» - это "
+#~ "«Oculus Mobile VR»."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "«Осведомленность о фокусе» действительна только в том случае, если «Режим "
+#~ "Xr» - это «Oculus Mobile VR»."
+
#~ msgid "Package Contents:"
#~ msgstr "Содержимое пакета:"
@@ -16430,9 +16616,6 @@ msgstr "Константы не могут быть изменены."
#~ msgid "Images:"
#~ msgstr "Изображения:"
-#~ msgid "Group"
-#~ msgstr "Группа"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Режим преобразования сэмплов (.wav файлы):"
@@ -16556,9 +16739,6 @@ msgstr "Константы не могут быть изменены."
#~ msgid "Deploy File Server Clients"
#~ msgstr "Развернуть файловый сервер для клиентов"
-#~ msgid "Overwrite Existing Scene"
-#~ msgstr "Перезаписать существующую сцену"
-
#~ msgid "Overwrite Existing, Keep Materials"
#~ msgstr "Перезаписать существующую сцену с сохранением материалов"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index 595e0041a9..7ff9aee6fb 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -1018,7 +1018,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1648,13 +1648,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2026,7 +2026,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2505,6 +2505,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3130,6 +3154,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim පරිවර්තනය වෙනස් කරන්න"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3371,6 +3400,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5428,6 +5461,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6339,7 +6382,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6923,6 +6970,16 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Anim පරිවර්තනය වෙනස් කරන්න"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "යතුරු මකා දමන්න"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7418,11 +7475,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7450,6 +7507,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7557,42 +7668,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7854,6 +7945,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7919,7 +8014,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11862,6 +11957,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12143,6 +12246,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12623,159 +12730,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12783,57 +12879,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12841,54 +12937,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12896,19 +12992,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13358,6 +13454,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13647,6 +13751,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13687,6 +13799,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index 54736cff85..2395e28105 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -1025,7 +1025,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Závislostí"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Prostriedok"
@@ -1691,13 +1691,13 @@ msgstr ""
"Povoľte 'Import Etc' v Nastaveniach Projektu, alebo vipnite 'Driver Fallback "
"Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Vlastná debug šablóna sa nenašla."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2081,7 +2081,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Re)Importovanie Asset-ov"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Top"
@@ -2590,6 +2590,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Aktuálna scéna sa neuložila. Chcete ju aj tak otvoriť?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Späť"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Prerobiť"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nemožno načítať scénu, ktorá nikdy nebola uložená."
@@ -3274,6 +3300,11 @@ msgid "Merge With Existing"
msgstr "Zlúčiť s existujúcim"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Zmeniť Veľkosť"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Otvoriť a vykonať skript"
@@ -3529,6 +3560,10 @@ msgid ""
msgstr ""
"Vybraný prostriedok (%s) sa nezhoduje žiadnemu typu pre túto vlastnosť (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Spraviť Jedinečným"
@@ -5659,6 +5694,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Presunúť CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Zamknúť Označené"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Skupiny"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6597,7 +6644,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7199,6 +7250,15 @@ msgstr "Generovaný Bodový Počet:"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Vytvoriť Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7716,12 +7776,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Obnoviť na východzie"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Prepísať"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7748,6 +7810,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Vľavo Dole"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7864,42 +7981,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "Všetky vybrané"
@@ -8169,6 +8266,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Signály:"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8234,7 +8336,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12355,6 +12457,15 @@ msgstr "Všetky vybrané"
msgid "Set Portal Point Position"
msgstr "Všetky vybrané"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Všetky vybrané"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12649,6 +12760,11 @@ msgstr "Generovanie Lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Všetky vybrané"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13142,166 +13258,155 @@ msgstr "Vložiť"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Export..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Odinštalovať"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Načítavanie zrkadiel, prosím čakajte..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Subprocess sa nedá spustiť!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Spustiť Vlastný Script..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Priečinok sa nepodarilo vytvoriť."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Nesprávna veľkosť písma."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13309,61 +13414,61 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Skenujem Súbory,\n"
"Počkajte Prosím..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Pridávanie %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13371,57 +13476,57 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Popis:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Balíček Obsahu:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Pripájanie..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13429,21 +13534,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Pridávanie %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Popis:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13921,6 +14026,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14212,6 +14325,14 @@ msgstr "Musíte použiť platné rozšírenie."
msgid "Enable grid minimap."
msgstr "Povoliť Prichytávanie"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14252,6 +14373,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 725f88f0ab..d505ee913c 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -1081,7 +1081,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Odvisnosti"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Viri"
@@ -1741,14 +1741,14 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom debug template not found."
msgstr "Predloge ni mogoče najti:"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2159,7 +2159,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Uvoz Dodatkov"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Vrh"
@@ -2685,6 +2685,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Trenutna scena ni shranjena. Vseeno odprem?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Razveljavi"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Ponovi"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Ni mogoče osvežiti scene, ki ni bila shranjena."
@@ -3391,6 +3417,11 @@ msgid "Merge With Existing"
msgstr "Spoji z Obstoječim"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animacija Spremeni transformacijo"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Odpri & Zaženi Skripto"
@@ -3642,6 +3673,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5878,6 +5913,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Uredi Platno Stvari"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Izbira Orodja"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Skupine"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6847,7 +6894,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7455,6 +7506,16 @@ msgstr "Ustavi Točko"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Preoblikovanje"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Izberi Gradnik"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7988,11 +8049,12 @@ msgid "Skeleton2D"
msgstr "Posameznik"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Naložite Prevzeto"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -8022,6 +8084,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Način Vrtenja"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -8137,42 +8254,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8441,6 +8538,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Uredi Poligon"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8507,7 +8609,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12700,6 +12802,15 @@ msgstr "Nastavi Položaj Krivuljne Točke"
msgid "Set Portal Point Position"
msgstr "Nastavi Položaj Krivuljne Točke"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Nastavi Krivuljo na Položaj"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -12997,6 +13108,11 @@ msgstr "Ustvarjanje Svetlobnih Kart"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Celotna izbira"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13499,166 +13615,155 @@ msgstr "Odstrani Gradnik VizualnaSkripta"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Izberite napravo s seznama"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Izvozi"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Odstrani"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Pridobivanje virov, počakajte..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Nemorem začeti podprocesa!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Izvajanje Skripte Po Meri..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Mape ni mogoče ustvariti."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Neveljavno ime."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13666,62 +13771,62 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Pregledovanje Datotek,\n"
"Prosimo, Počakajte..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Nastavitve Zaskočenja"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Izvozi"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13729,56 +13834,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animacijska Orodja"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Povezovanje..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13786,21 +13891,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Filtriraj datoteke..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Nemorem začeti podprocesa!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14283,6 +14388,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14582,6 +14695,14 @@ msgstr "Uporabiti moraš valjavno razširitev."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -14626,6 +14747,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index ded08d5532..2cc63728a3 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -1020,7 +1020,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Varësitë"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resursi"
@@ -1697,13 +1697,13 @@ msgstr ""
"Lejo 'Import Etc' in Opsionet e Projektit, ose çaktivizo 'Driver Fallback "
"Enabled'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Shablloni 'Custom debug' nuk u gjet."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2104,7 +2104,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Duke (Ri)Importuar Asetet"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Siper"
@@ -2626,6 +2626,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Skena aktuale nuk është ruajtur. Hap gjithsesi?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Zhbëj"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Ribëj"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Nuk mund të ringarkojë një skenë që nuk është ruajtur më parë."
@@ -3326,6 +3352,10 @@ msgid "Merge With Existing"
msgstr "Bashko Me Ekzistuesin"
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Hap & Fillo një Shkrim"
@@ -3582,6 +3612,10 @@ msgstr ""
"Resursi i zgjedhur (%s) nuk përputhet me ndonjë tip të pritur për këtë veti "
"(%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Bëje Unik"
@@ -5718,6 +5752,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Zgjidh"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupet"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6637,7 +6683,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7226,6 +7276,16 @@ msgstr "Fut një Pikë"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Binari i Transformimeve 3D"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Fshi Nyjen"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7734,12 +7794,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Ngarko të Parazgjedhur"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Mbishkruaj"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7766,6 +7828,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7878,42 +7994,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8179,6 +8275,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8245,7 +8345,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12301,6 +12401,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12590,6 +12698,10 @@ msgstr "Duke Gjeneruar Hartat e Dritës"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13075,165 +13187,154 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Zgjidh paisjen nga lista"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Eksporto"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Çinstalo"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Duke marrë pasqyrat, ju lutem prisni..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Nuk mund të fillojë subprocess-in!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Duke Ekzekutuar Shkrimin..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Nuk mund të krijoj folderin."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13241,61 +13342,61 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Duke Skanuar Skedarët,\n"
"Ju Lutem Prisini..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Duke u lidhur..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13303,56 +13404,56 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Instaluesi Paketave"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Duke u lidhur..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13360,21 +13461,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Filtro Skedarët..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Nuk mund të fillojë subprocess-in!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13832,6 +13933,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14121,6 +14230,14 @@ msgstr "Duhet të perdorësh një shtesë të lejuar."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14161,6 +14278,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 0a915e03bf..bb56bcbe29 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -1134,7 +1134,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Зависности"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ресурс"
@@ -1824,14 +1824,14 @@ msgstr ""
"Омогући 'Увоз Etc' у подешавањима пројекта, или онемогући 'Поваратак "
"Управљача Омогућен'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
msgid "Custom debug template not found."
msgstr "Шаблонска датотека није пронађена:\n"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -2253,7 +2253,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Поновно) Увожење средстава"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Врх"
@@ -2803,6 +2803,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Тренутна сцена није сачувана. Ипак отвори?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Опозови"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Поново уради"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Не могу поново учитати сцену која није сачувана."
@@ -3532,6 +3558,11 @@ msgid "Merge With Existing"
msgstr "Споји са постојећим"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Промени положај"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Отвори и покрени скриптицу"
@@ -3812,6 +3843,10 @@ msgstr ""
"Одабрани ресурс (%s) не одговара ни једној очекиваној врсти за ову особину "
"(%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
#, fuzzy
msgid "Make Unique"
@@ -6144,6 +6179,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Уреди CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Закључај одабрано"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Групе"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid ""
"Children of containers have their anchors and margins values overridden by "
@@ -7190,7 +7237,13 @@ msgid "Remove Selected Item"
msgstr "Обриши одабрану ствар"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Увези из сцене"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Увези из сцене"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7834,6 +7887,16 @@ msgstr "Број генерисаних тачака:"
msgid "Flip Portal"
msgstr "Обрни Хоризонтално"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Очисти Трансформацију"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Направи чвор"
+
#: editor/plugins/root_motion_editor_plugin.cpp
#, fuzzy
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -8399,13 +8462,13 @@ msgstr "Синглетон2Д"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Make Rest Pose (From Bones)"
-msgstr "Направи Одмор Позу(од Костију)"
+msgid "Reset to Rest Pose"
+msgstr "Постави Коске у Одмор Позу"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Set Bones to Rest Pose"
-msgstr "Постави Коске у Одмор Позу"
+msgid "Overwrite Rest Pose"
+msgstr "Препиши"
#: editor/plugins/skeleton_editor_plugin.cpp
#, fuzzy
@@ -8436,6 +8499,71 @@ msgid "Perspective"
msgstr "Перспективна пројекција"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Перспективна пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Перспективна пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Перспективна пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Перспективна пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ортогонална пројекција"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Перспективна пројекција"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Трансформација прекинута."
@@ -8555,42 +8683,22 @@ msgid "Bottom View."
msgstr "Поглед одоздо."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Доле"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Леви поглед."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Лево"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Десни поглед."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "десно"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Поглед спреда."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Испред"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Бочни поглед."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Бок"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "Поравнавање са погледом"
@@ -8873,6 +8981,11 @@ msgid "View Portal Culling"
msgstr "Поставке прозора"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Поставке прозора"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8941,8 +9054,8 @@ msgstr "После"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
-msgid "Nameless gizmo"
-msgstr "Безимена ручка"
+msgid "Unnamed Gizmo"
+msgstr "Неименован Пројекат"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
@@ -13809,6 +13922,16 @@ msgstr "Постави позицију тачке криве"
msgid "Set Portal Point Position"
msgstr "Постави позицију тачке криве"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Промени Опсег Цилиндар Облика"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Постави почетну позицију криве"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -14155,6 +14278,11 @@ msgstr "Скована Светла:"
msgid "Class name can't be a reserved keyword"
msgstr "Има Класе не може бити резервисана кључна реч"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Испуни одабрано"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
#, fuzzy
msgid "End of inner exception stack trace"
@@ -14685,79 +14813,79 @@ msgstr "Потражи VisualScript"
msgid "Get %s"
msgstr "Повуци %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package name is missing."
msgstr "Недостаје име паковања."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package segments must be of non-zero length."
msgstr "Одломци паковања не могу бити нулте дужине."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Карактер '%s' није дозвољен у именима паковања Android апликације."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A digit cannot be the first character in a package segment."
msgstr "Цифра не може бити први карактер у одломку паковања."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Карактер '%s' не може бити први карактер у одломку паковања."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "The package must have at least one '.' separator."
msgstr "Паковање мора имати бар један '.' раздвојник."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Одабери уређај са листе"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Извоз"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Деинсталирај"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Прихватам одредишта, молим сачекајте..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Не могу покренути подпроцес!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Обрађивање скриптице..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Неуспех при прављењу директоријума."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -14766,107 +14894,96 @@ msgstr ""
"Android нацрт изградње није инсталиран у пројекат. Инсталирај га из Пројекат "
"менија."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Сладиште кључева Разгрешеника није подешено у Подешавањима Уредника ни у "
"поставкама."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Сладиште кључева Разгрешеника није подешено у Подешавањима Уредника ни у "
"поставкама."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
"Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid public key for APK expansion."
msgstr "Неважећи јавни кључ за АПК проширење."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "Неважеће име паковања:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -14874,57 +14991,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Скенирање датотека,\n"
"Молим сачекајте..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Неуспешно отварање нацрта за извоз:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Додавање %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Извоз"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Trying to build from a custom built template, but no version info for it "
@@ -14933,7 +15050,7 @@ msgstr ""
"Покушај изградње за произвољни нацрт изградње, али не постоји инфо о "
"верзији. Молимо реинсталирај из \"Пројекат\" менија."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build version mismatch:\n"
@@ -14946,27 +15063,27 @@ msgstr ""
" Годот Верзија: %s\n"
"Молимо реинсталирајте Android нацрт изградње из \"Пројекат\" менија."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Неуспешна измена project.godot-а у путањи пројекта."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Неуспело уписивање фајла:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Building Android Project (gradle)"
msgstr "Изградња Android Пројекта (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Building of Android project failed, check output for the error.\n"
@@ -14975,34 +15092,34 @@ msgstr ""
"Изградња Android пројекта неуспешна, провери излаз за грешке.\n"
"Алтернативно посети docs.godotengine.org за Android документацију изградње."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Анимација није нађена: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Прављење контура..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Неуспешно отварање нацрта за извоз:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -15010,21 +15127,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Додавање %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Неуспело уписивање фајла:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -15625,6 +15742,14 @@ msgstr ""
"НавМрежнаИнстанца мора бити дете или прадете Навигационог чвора. Само "
"обезбећује навигационе податке."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
#, fuzzy
msgid ""
@@ -15976,6 +16101,14 @@ msgstr "Мора се користити важећа екстензија."
msgid "Enable grid minimap."
msgstr "Укључи лепљење"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -16036,6 +16169,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Величина Viewport-а мора бити већа од 0 да би се нешто исцртало."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -16094,6 +16231,29 @@ msgid "Constants cannot be modified."
msgstr "Константе није могуће мењати."
#, fuzzy
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Направи Одмор Позу(од Костију)"
+
+#~ msgid "Bottom"
+#~ msgstr "Доле"
+
+#~ msgid "Left"
+#~ msgstr "Лево"
+
+#~ msgid "Right"
+#~ msgstr "десно"
+
+#~ msgid "Front"
+#~ msgstr "Испред"
+
+#~ msgid "Rear"
+#~ msgstr "Бок"
+
+#, fuzzy
+#~ msgid "Nameless gizmo"
+#~ msgstr "Безимена ручка"
+
+#, fuzzy
#~ msgid "Package Contents:"
#~ msgstr "Садржај:"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index 76982c0b00..eee30eb977 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -1025,7 +1025,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1655,13 +1655,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2036,7 +2036,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2517,6 +2517,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3145,6 +3169,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animacija Promjeni Transformaciju"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3388,6 +3417,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5455,6 +5488,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Obriši Selekciju"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6374,7 +6418,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6967,6 +7015,16 @@ msgstr "Napravi"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Animacija Promjeni Transformaciju"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Animacija Obriši Ključeve"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7468,11 +7526,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Napravi"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7500,6 +7559,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7608,42 +7721,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7906,6 +7999,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Napravi"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7971,7 +8069,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11967,6 +12065,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12252,6 +12358,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Sve sekcije"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12734,159 +12845,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12894,57 +12994,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12952,54 +13052,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13007,19 +13107,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13469,6 +13569,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13758,6 +13866,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13798,6 +13914,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 373e3aad36..3b0b8a97dd 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -1043,7 +1043,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Beroenden"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Resurs"
@@ -1702,13 +1702,13 @@ msgstr ""
"Målplattformen kräver 'ETC' texturkomprimering för GLES2.\n"
"Aktivera 'Import Etc' i Projektinställningarna."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Mallfil hittades inte."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2102,7 +2102,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "(Om)Importerar Tillgångar"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Topp"
@@ -2636,6 +2636,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Nuvarande scen inte sparad. Öppna ändå?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Ångra"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Återställ"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Kan inte ladda om en scen som aldrig har sparats."
@@ -3310,6 +3336,11 @@ msgid "Merge With Existing"
msgstr "Sammanfoga Med Existerande"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Anim Ändra Transformation"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Öppna & Kör ett Skript"
@@ -3563,6 +3594,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Gör Unik"
@@ -5728,6 +5763,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Välj"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Grupper"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6684,7 +6731,13 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Importera från Scen"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Importera från Scen"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7285,6 +7338,16 @@ msgstr "Infoga Punkt"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Transformera"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Skapa Node"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7809,12 +7872,14 @@ msgid "Skeleton2D"
msgstr "Singleton"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Ladda Standard"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Skriv över"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7843,6 +7908,65 @@ msgid "Perspective"
msgstr "Perspektiv"
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Perspektiv"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Perspektiv"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7959,42 +8083,22 @@ msgid "Bottom View."
msgstr "Vy Underifrån."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Botten"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Vy från vänster."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Vänster"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Vy från höger."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Höger"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Vy Framifrån."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Framsida"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Vy Bakifrån."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Baksida"
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr "Vy från höger"
@@ -8264,6 +8368,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Redigera Polygon"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Inställningar..."
@@ -8329,8 +8438,9 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Namnlöst Projekt"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
@@ -12474,6 +12584,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12767,6 +12885,11 @@ msgstr "Genererar Lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Alla urval"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13249,165 +13372,154 @@ msgstr "Fäst Skript"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Select device from the list"
msgstr "Välj enhet från listan"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Exportera"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Avinstallera"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Laddar..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Kunde inte starta underprocess!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Kunde inte skapa mapp."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Ogiltigt paket namn:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13415,63 +13527,63 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Skannar Filer,\n"
"Snälla Vänta..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Kunde inte öppna mall för export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Lägger till %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Exportera"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13479,58 +13591,58 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Kunde inte skriva till filen:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animeringsverktyg"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Skapar konturer..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Kunde inte öppna mall för export:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13538,21 +13650,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Lägger till %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Kunde inte skriva till filen:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14035,6 +14147,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14330,6 +14450,14 @@ msgstr "Måste använda en giltigt filändelse."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14370,6 +14498,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14423,6 +14555,21 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Bottom"
+#~ msgstr "Botten"
+
+#~ msgid "Left"
+#~ msgstr "Vänster"
+
+#~ msgid "Right"
+#~ msgstr "Höger"
+
+#~ msgid "Front"
+#~ msgstr "Framsida"
+
+#~ msgid "Rear"
+#~ msgstr "Baksida"
+
#~ msgid "Package Contents:"
#~ msgstr "Paketets Innehåll:"
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index 2ad954b971..f0a34987a2 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -1020,7 +1020,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1650,13 +1650,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2029,7 +2029,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2508,6 +2508,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3133,6 +3157,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "உருமாற்றம் அசைவூட்டு"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3375,6 +3404,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5433,6 +5466,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "அனைத்து தேர்வுகள்"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6338,7 +6382,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6924,6 +6972,16 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "உருமாற்றம் அசைவூட்டு"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "அனைத்து தேர்வுகள்"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7419,11 +7477,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7451,6 +7509,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7558,42 +7670,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7855,6 +7947,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7920,7 +8016,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11867,6 +11963,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12152,6 +12256,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "அனைத்து தேர்வுகள்"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12627,159 +12736,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12787,57 +12885,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12845,54 +12943,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12900,19 +12998,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13362,6 +13460,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13651,6 +13757,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13691,6 +13805,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 74998009cd..a77af85920 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -994,7 +994,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1623,13 +1623,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1999,7 +1999,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2477,6 +2477,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3101,6 +3125,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3341,6 +3369,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5381,6 +5413,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6279,7 +6321,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6863,6 +6909,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7357,11 +7411,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7389,6 +7443,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7496,42 +7604,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7793,6 +7881,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7858,7 +7950,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11759,6 +11851,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12039,6 +12139,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12505,159 +12609,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12665,57 +12758,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12723,54 +12816,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12778,19 +12871,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13240,6 +13333,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13529,6 +13630,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13569,6 +13678,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 231051313a..3042188001 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -1035,7 +1035,7 @@ msgstr ""
msgid "Dependencies"
msgstr "การอ้างอิง"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "ทรัพยากร"
@@ -1695,13 +1695,13 @@ msgstr ""
"แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'PVRTC' สำหรับการกลับมาใช้ GLES2\n"
"เปิด 'Import Pvrtc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "ไม่พบเทมเพลตการดีบักแบบกำหนดเอง"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2081,7 +2081,7 @@ msgstr "มีการนำเข้าไฟล์ %s หลายอัน
msgid "(Re)Importing Assets"
msgstr "กำลังนำเข้าทรัพยากร(อีกครั้ง)"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "บนสุด"
@@ -2576,6 +2576,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "ฉากปัจจุบันยังไม่ได้บันทึก จะเปิดไฟล์หรือไม่?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "เลิกทำ"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "ทำซ้ำ"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "ฉากยังไม่ได้บันทึก ไม่สามารถโหลดใหม่ได้"
@@ -3245,6 +3271,11 @@ msgid "Merge With Existing"
msgstr "รวมกับที่มีอยู่เดิม"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "เคลื่อนย้ายแอนิเมชัน"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "เปิดและรันสคริปต์"
@@ -3497,6 +3528,10 @@ msgid ""
"property (%s)."
msgstr "ทรัพยากรที่เลือก (%s) มีประเทไม่ตรงกับค่าที่ต้องการ (%s)"
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "ไม่ใช้ร่วมกับวัตถุอื่น"
@@ -5600,6 +5635,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "เลื่อน CanvasItem \"%s\" ไปยัง (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "ล็อกที่เลือก"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "กลุ่ม"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6538,7 +6585,13 @@ msgid "Remove Selected Item"
msgstr "ลบไอเทมที่เลือก"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "นำเข้าจากฉาก"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "นำเข้าจากฉาก"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7130,6 +7183,16 @@ msgstr "จำนวนจุดที่สร้างขึ้น:"
msgid "Flip Portal"
msgstr "พลิกแนวนอน"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "เคลียร์การแปลง"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "สร้างโหนด"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree ไม่มีที่อยู่ไปยัง AnimationPlayer"
@@ -7629,12 +7692,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "สร้างท่าโพส (จากโครง)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "ตั้งโครงไปยังท่าโพส"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "ตั้งโครงไปยังท่าโพส"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "เขียนทับ"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7661,6 +7726,71 @@ msgid "Perspective"
msgstr "เพอร์สเปกทีฟ"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "เพอร์สเปกทีฟ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "เพอร์สเปกทีฟ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "เพอร์สเปกทีฟ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "เพอร์สเปกทีฟ"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "ขนาน"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "เพอร์สเปกทีฟ"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "ยกเลิกการเคลื่อนย้าย"
@@ -7779,42 +7909,22 @@ msgid "Bottom View."
msgstr "มุมล่าง"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "ล่าง"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "มุมซ้าย"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "ซ้าย"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "มุมขวา"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "ขวา"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "มุมหน้า"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "หน้า"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "มุมหลัง"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "หลัง"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "จัดการแปลงให้เข้ากับวิว"
@@ -8087,6 +8197,11 @@ msgid "View Portal Culling"
msgstr "ตั้งค่ามุมมอง"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "ตั้งค่ามุมมอง"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "ตั้งค่า..."
@@ -8152,8 +8267,9 @@ msgid "Post"
msgstr "หลัง"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "กิสโมไม่มีชื่อ"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "โปรเจกต์ไม่มีชื่อ"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12275,6 +12391,16 @@ msgstr "กำหนดพิกัดจุดเส้นโค้ง"
msgid "Set Portal Point Position"
msgstr "กำหนดพิกัดจุดเส้นโค้ง"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "ปรับรัศมีทรงแคปซูล"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "กำหนดเส้นโค้งขาเข้า"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "ปรับรัศมีทรงกระบอก"
@@ -12558,6 +12684,11 @@ msgstr "กำลังพล็อต lightmaps"
msgid "Class name can't be a reserved keyword"
msgstr "ชื่อคลาสไม่สามารถมีคีย์เวิร์ดได้"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "เติมส่วนที่เลือก"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "สิ้นสุดสแตคข้อผิดพลาดภายใน"
@@ -13030,135 +13161,135 @@ msgstr "ค้นหาโหนด VisualScript"
msgid "Get %s"
msgstr "รับ %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "ชื่อแพ็คเกจหายไป"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "ส่วนของแพ็คเกจจะต้องมีความยาวไม่เป็นศูนย์"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "ตัวอักษร '%s' ไม่อนุญาตให้ใช้ในชื่อของ Android application package"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "ไม่สามารถใช้ตัวเลขเป็นตัวแรกในส่วนของแพ็คเกจ"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "ตัวอักษร '%s' ไม่สามารถเป็นตัวอักษรตัวแรกในส่วนของแพ็คเกจ"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "แพ็คเกจจำเป็นต้องมี '.' อย่างน้อยหนึ่งตัว"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "เลือกอุปกรณ์จากรายชื่อ"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "ส่งออกทั้งหมด"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "ถอนการติดตั้ง"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "กำลังโหลด โปรดรอ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "อินสแตนซ์ฉากไม่ได้!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "กำลังรันสคริปต์..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "ไม่สามารถสร้างโฟลเดอร์"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "ไม่สามารถหาเครื่องมือ 'apksigner'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr "เทมเพลตการสร้างสำหรับแอนดรอยด์ไม่ถูกติดตั้ง สามารถติดตั้งจากเมนูโปรเจกต์"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "ดีบัก Keystore ไม่ได้ถูกตั้งไว้ในตั้งค่าของตัวแก้ไขหรือในพรีเซ็ต"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "Release keystore กำหนดค่าไว้อย่างไม่ถูกต้องในพรีเซ็ตสำหรับการส่งออก"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "ต้องการที่อยู่ของ Android SDK ที่ถูกต้อง ในการตั้งค่าตัวแก้ไข"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "ที่อยู่ Android SDK ไม่ถูกต้องในการตั้งค่าตัวแก้ไข"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "ไดเร็กทอรี 'platform-tools' หายไป!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "ไม่พบคำสั่ง adb ของ Android SDK platform-tools"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "กรุณาตรวจสอบในตำแหน่งของ Android SDK ที่ระบุไว้ในการตั้งค่าตัวแก้ไข"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "ไดเร็กทอรี 'build-tools' หายไป!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "ไม่พบคำสั่ง apksigner ของ Android SDK build-tools"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "public key ผิดพลาดสำหรับ APK expansion"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "ชื่อแพ็คเกจผิดพลาด:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13166,33 +13297,20 @@ msgstr ""
"โมดูล \"GodotPaymentV3\" ที่ไม่ถูกต้องได้รวมอยู่ในการตั้งค่าโปรเจกต์ \"android/modules"
"\" (เปลี่ยนแปลงใน Godot 3.2.2)\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Use Custom Build\" จำเป็นต้องเปิดการใช้งานหากจะใช้ปลั๊กอิน"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Degrees Of Freedom\" จะใช้ได้เฉพาะเมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr "\"Hand Tracking\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Focus Awareness\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเปิดใช้งาน \"Use Custom Build\""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13200,64 +13318,64 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"กำลังสแกนไฟล์,\n"
"กรุณารอ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "เปิดเทมเพลตเพื่อส่งออกไม่ได้:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "กำลังเพิ่ม %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "ส่งออกทั้งหมด"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์แอปบันเดิลจำเป็นต้องมีนามสกุล *.aab"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "การขยาย APK เข้ากันไม่ได้กับแอนดรอยด์แอปบันเดิล"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์ APK จำเป็นต้องมีนามสกุล *.apk"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
"พยายามสร้างจากเทมเพลตที่สร้างขึ้นเอง แต่ไม่มีข้อมูลเวอร์ชัน โปรดติดตั้งใหม่จากเมนู \"โปรเจกต์\""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13269,26 +13387,26 @@ msgstr ""
" Godot เวอร์ชัน:% s\n"
"โปรดติดตั้งเทมเพลตการสร้างสำหรับแอนดรอยด์ใหม่จากเมนู \"โปรเจกต์\""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "ไม่พบไฟล์ project.godot"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "เขียนไฟล์ไม่ได้:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "กำลังสร้างโปรเจคแอนดรอยด์ (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13296,35 +13414,35 @@ msgstr ""
"การสร้างโปรเจกต์แอนดรอยด์ล้มเหลว ตรวจสอบผลลัพธ์เพื่อหาข้อผิดพลาด\n"
"หรือไปที่ docs.godotengine.org สำหรับเอกสารประกอบการสร้างสำหรับแอนดรอยด์"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "กำลังย้ายเอาต์พุต"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
"ไม่สามารถคัดลอกและเปลี่ยนชื่อไฟล์ส่งออก ตรวจสอบไดเร็กทอรีโปรเจ็กต์ gradle สำหรับเอาต์พุต"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "ไม่พบแอนิเมชัน: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "กำลังสร้างคอนทัวร์..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "เปิดเทมเพลตเพื่อส่งออกไม่ได้:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13332,21 +13450,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "กำลังเพิ่ม %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "เขียนไฟล์ไม่ได้:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "จัดเรียง APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13843,6 +13961,14 @@ msgstr ""
"NavigationMeshInstance ต้องเป็นโหนดลูก/หลานของโหนด Navigation "
"โดยจะให้ข้อมูลการนำทางเท่านั้น"
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14156,6 +14282,14 @@ msgstr "นามสกุลไฟล์ไม่ถูกต้อง"
msgid "Enable grid minimap."
msgstr "เปิดเส้นกริดมินิแมพ"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14205,6 +14339,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "ขนาดวิวพอร์ตจะต้องมากกว่า 0 เพื่อที่จะเรนเดอร์ได้"
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14256,6 +14394,39 @@ msgstr "การกำหนดให้กับยูนิฟอร์ม"
msgid "Constants cannot be modified."
msgstr "ค่าคงที่ไม่สามารถแก้ไขได้"
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "สร้างท่าโพส (จากโครง)"
+
+#~ msgid "Bottom"
+#~ msgstr "ล่าง"
+
+#~ msgid "Left"
+#~ msgstr "ซ้าย"
+
+#~ msgid "Right"
+#~ msgstr "ขวา"
+
+#~ msgid "Front"
+#~ msgstr "หน้า"
+
+#~ msgid "Rear"
+#~ msgstr "หลัง"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "กิสโมไม่มีชื่อ"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Degrees Of Freedom\" จะใช้ได้เฉพาะเมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\""
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Focus Awareness\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\""
+
#~ msgid "Package Contents:"
#~ msgstr "เนื้อหาแพคเกจ:"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 69a7ef73a2..e5a65500d1 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -61,12 +61,13 @@
# ali aydın <alimxaydin@gmail.com>, 2021.
# Cannur Daşkıran <canndask@gmail.com>, 2021.
# kahveciderin <kahveciderin@gmail.com>, 2021.
+# Lucifer25x <umudyt2006@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-13 06:13+0000\n"
-"Last-Translator: kahveciderin <kahveciderin@gmail.com>\n"
+"PO-Revision-Date: 2021-09-15 00:46+0000\n"
+"Last-Translator: Lucifer25x <umudyt2006@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -74,7 +75,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1020,7 +1021,7 @@ msgstr "\"%s\" için sonuç yok."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "%s için açıklama yok."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1080,7 +1081,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Bağımlılıklar"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Kaynak"
@@ -1324,11 +1325,12 @@ msgstr "%s (Zaten Var)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "\"%s\" öğesinin içeriği - %d dosya(lar) projenizle çakışıyor:"
#: editor/editor_asset_installer.cpp
+#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
-msgstr ""
+msgstr "\"%s\" öğesinin içeriği - Projenizle çakışan dosya yok:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1597,8 +1599,9 @@ msgid "%s is an invalid path. File does not exist."
msgstr "Dosya yok."
#: editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s geçersiz bir yol. Kaynak yolunda değil (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1748,13 +1751,13 @@ msgstr ""
"Proje Ayarlarında 'Import Etc' seçeneğini etkinleştirin veya 'Driver "
"Fallback Enabled' seçeneğini devre dışı bırakın."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Özel hata ayıklama şablonu bulunmadı."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1798,35 +1801,45 @@ msgstr "Dock İçe Aktar"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "3D sahneleri görüntülemeye ve düzenlemeye izin verir."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
+"Entegre komut dosyası düzenleyicisini kullanarak komut dosyalarını "
+"düzenlemeye izin verir."
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid "Provides built-in access to the Asset Library."
-msgstr ""
+msgstr "Varlık Kitaplığına yerleşik erişim sağlar."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
-msgstr ""
+msgstr "Scene dock'ta düğüm hiyerarşisini düzenlemeye izin verir."
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
msgstr ""
+"Scene dock'ta seçilen düğümün sinyalleri ve gruplarıyla çalışmaya izin verir."
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid "Allows to browse the local file system via a dedicated dock."
msgstr ""
+"Özel bir dock aracılığıyla yerel dosya sistemine göz atılmasına izin verir."
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
+"Bireysel varlıklar için içe aktarma ayarlarını yapılandırmaya izin verir. "
+"Çalışması için FileSystem fonksiyonunu gerektirir."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1838,8 +1851,9 @@ msgid "(none)"
msgstr ""
#: editor/editor_feature_profile.cpp
+#, fuzzy
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Seçili olan '%s' profili kaldırılsın mı? (Geri alınamayan.)"
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1948,6 +1962,8 @@ msgstr "Doku Seçenekleri"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
msgstr ""
+"Kullanılabilir sınıfları ve özellikleri düzenlemek için bir profil oluşturun "
+"veya içe aktarın."
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
@@ -2137,7 +2153,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Varlıklar Yeniden-İçe Aktarılıyor"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Üst"
@@ -2369,11 +2385,15 @@ msgid "New Window"
msgstr "Yeni Pencere"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"Spins when the editor window redraws.\n"
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Düzenleyici penceresi yeniden çizildiğinde döner.\n"
+"Güç kullanımını artırabilecek Sürekli Güncelle etkindir. Devre dışı bırakmak "
+"için tıklayın."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2605,10 +2625,13 @@ msgid "Save changes to '%s' before closing?"
msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?"
#: editor/editor_node.cpp
+#, fuzzy
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"Geçerli sahnenin kök düğümü yok, ancak %d değiştirilmiş harici kaynak(lar) "
+"yine de kaydedildi."
#: editor/editor_node.cpp
#, fuzzy
@@ -2646,6 +2669,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Var olan sahne kaydedilmedi. Yine de açılsın mı?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Geri al"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Yeniden yap"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Hiç kaydedilmemiş bir sahne yeniden yüklenemiyor."
@@ -3167,7 +3216,7 @@ msgstr "Klavuzu Aç"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Sorular & Cevaplar"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3338,6 +3387,11 @@ msgid "Merge With Existing"
msgstr "Var Olanla Birleştir"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Animasyon Değişikliği Dönüşümü"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Aç & Bir Betik Çalıştır"
@@ -3595,6 +3649,10 @@ msgstr ""
"Seçili kaynak (%s) bu özellik (%s) için beklenen herhangi bir tip ile "
"uyuşmuyor."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Benzersiz Yap"
@@ -3689,11 +3747,11 @@ msgstr "Düğümden İçe Aktar:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
-msgstr ""
+msgstr "Bu şablonları içeren klasörü açın."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Bu şablonları kaldırın."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3707,7 +3765,7 @@ msgstr "Aynalar alınıyor, lütfen bekleyin..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
-msgstr ""
+msgstr "İndirme başlatılıyor..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -3749,8 +3807,9 @@ msgid "Request failed:"
msgstr "İstek başarısız."
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Download complete; extracting templates..."
-msgstr ""
+msgstr "İndirme tamamlandı; şablonlar ayıklanıyor..."
#: editor/export_template_manager.cpp
msgid "Cannot remove temporary file:"
@@ -3774,8 +3833,9 @@ msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr "JSON sunucuları listesini alırken hata. Lütfen bu hatayı bildirin!"
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Best available mirror"
-msgstr ""
+msgstr "Mevcut en iyi ayna"
#: editor/export_template_manager.cpp
msgid ""
@@ -3873,12 +3933,14 @@ msgid "Current Version:"
msgstr "Şu Anki Sürüm:"
#: editor/export_template_manager.cpp
+#, fuzzy
msgid "Export templates are missing. Download them or install from a file."
msgstr ""
+"Dışa aktarma şablonları eksik. Bunları indirin veya bir dosyadan yükleyin."
#: editor/export_template_manager.cpp
msgid "Export templates are installed and ready to be used."
-msgstr ""
+msgstr "Dışa aktarma şablonları yüklenir ve kullanıma hazırdır."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3887,7 +3949,7 @@ msgstr "Dosya Aç"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
-msgstr ""
+msgstr "Geçerli sürüm için yüklü şablonları içeren klasörü açın."
#: editor/export_template_manager.cpp
msgid "Uninstall"
@@ -3915,13 +3977,14 @@ msgstr "Hatayı Kopyala"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "İndir ve Yükle"
#: editor/export_template_manager.cpp
msgid ""
"Download and install templates for the current version from the best "
"possible mirror."
msgstr ""
+"Mevcut sürüm için şablonları mümkün olan en iyi aynadan indirin ve yükleyin."
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
@@ -3972,6 +4035,8 @@ msgid ""
"The templates will continue to download.\n"
"You may experience a short editor freeze when they finish."
msgstr ""
+"Şablonlar indirilmeye devam edecek.\n"
+"Bitirdiklerinde kısa bir editör donması yaşayabilirsiniz."
#: editor/filesystem_dock.cpp
msgid "Favorites"
@@ -4119,25 +4184,24 @@ msgid "Collapse All"
msgstr "Hepsini Daralt"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Dosyaları ara"
+msgstr "Dosyaları sırala"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr ""
+msgstr "Ada Göre Sırala (Artan)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr ""
+msgstr "Ada Göre Sırala (Azalan)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr ""
+msgstr "Türe Göre Sırala (Artan)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr ""
+msgstr "Türe Göre Sırala (Artan)"
#: editor/filesystem_dock.cpp
#, fuzzy
@@ -4159,7 +4223,7 @@ msgstr "Yeniden Adlandır..."
#: editor/filesystem_dock.cpp
msgid "Focus the search box"
-msgstr ""
+msgstr "Arama kutusuna odaklan"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
@@ -4508,9 +4572,8 @@ msgid "Extra resource options."
msgstr "Kaynak yolunda değil."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Kaynak Panosunu Düzenle"
+msgstr "Panodan Kaynağı Düzenle"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
@@ -4534,9 +4597,8 @@ msgid "History of recently edited objects."
msgstr "En son düzenlenen nesnelerin geçmişi."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Klavuzu Aç"
+msgstr "Bu nesne için belgeleri açın."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4547,9 +4609,8 @@ msgid "Filter properties"
msgstr "Özellikleri süz"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Nesne özellikleri."
+msgstr "Nesne özelliklerini yönetin."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
@@ -4793,9 +4854,8 @@ msgid "Blend:"
msgstr "Karışma:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Parametre Değişti"
+msgstr "Parametre Değiştirildi:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5524,11 +5584,11 @@ msgstr "Hepsi"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Şablonları, projeleri ve demoları arayın"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Varlıkları arayın (şablonlar, projeler ve demolar hariç)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5572,7 +5632,7 @@ msgstr "Varlıkların ZIP Dosyası"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Ses Önizleme Oynat/Duraklat"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5730,6 +5790,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "CanvasItem \"%s\" öğesini (%d,%d) konumuna taşı"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Seçimi Kilitle"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Öbek"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5918,9 +5990,8 @@ msgid "Drag: Rotate selected node around pivot."
msgstr "Seçilen düğüm ya da geçişi sil."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Sürükle: Taşır"
+msgstr "Alt+Sürükle: Seçili düğümü taşıyın."
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -5929,15 +6000,14 @@ msgstr "Seçilen düğüm ya da geçişi sil."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Tıklanan konumdaki tüm nesnelerin bir listesini gösterin\n"
-"(Seçme biçiminde Alt + RMB ile özdeş)."
+"Alt+RMB: Kilitli dahil olmak üzere tıklanan konumdaki tüm düğümlerin "
+"listesini göster."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "RMB: Tıklanan konuma düğüm ekleyin."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6196,16 +6266,19 @@ msgid "Pan View"
msgstr "Yatay Kaydırma Görünümü"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "%3.125'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "%6,25'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "%12,5'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6598,6 +6671,9 @@ msgid ""
"This is similar to single collision shape, but can result in a simpler "
"geometry in some cases, at the cost of accuracy."
msgstr ""
+"Basitleştirilmiş bir dışbükey çarpışma şekli oluşturur.\n"
+"Bu, tek çarpışma şekline benzer, ancak bazı durumlarda doğruluk pahasına "
+"daha basit bir geometriyle sonuçlanabilir."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
@@ -6678,7 +6754,13 @@ msgid "Remove Selected Item"
msgstr "Seçilen Öğeyi Kaldır"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Sahneden İçe Aktar"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Sahneden İçe Aktar"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7272,6 +7354,16 @@ msgstr "Üretilen Nokta Sayısı:"
msgid "Flip Portal"
msgstr "Yatay Yansıt"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Dönüşümü Temizle"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Düğüm Oluştur"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "Animasyon ağacı AnimasyonOynatıcı'ya atanmış yola sahip değil"
@@ -7774,12 +7866,14 @@ msgid "Skeleton2D"
msgstr "İskelet2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Dinlenme duruşu oluştur (kemiklerden)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Kemikleri Dinlenme Duruşuna ata"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Kemikleri Dinlenme Duruşuna ata"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Üzerine Yaz"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7806,6 +7900,71 @@ msgid "Perspective"
msgstr "Derinlik"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Derinlik"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Derinlik"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Derinlik"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Derinlik"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Dikey"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Derinlik"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Dönüşüm Durduruldu."
@@ -7832,20 +7991,17 @@ msgid "None"
msgstr "Düğüm"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Ülke"
+msgstr "Döndür"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Çevir:"
+msgstr "Çevir"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scale"
-msgstr "Ölçekle:"
+msgstr "Ölçekle"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7868,13 +8024,12 @@ msgid "Animation Key Inserted."
msgstr "Animasyon Anahtarı Eklendi."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Perde"
+msgstr "Perde:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Sapma:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -7882,24 +8037,20 @@ msgid "Size:"
msgstr "Boyut: "
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Çizilmiş Nesneler"
+msgstr "Çizilmiş Nesneler:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Materyal Değişiklikleri"
+msgstr "Materyal Değişiklikleri:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Shader Değişiklikleri"
+msgstr "Gölgelendirici Değişiklikleri:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Yüzey Değişiklikleri"
+msgstr "Yüzey Değişiklikleri:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -7907,13 +8058,13 @@ msgid "Draw Calls:"
msgstr "Çizim Çağrıları"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Köşenoktalar"
+msgstr "Köşenoktalar:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "Kare hızı: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7924,42 +8075,22 @@ msgid "Bottom View."
msgstr "Alttan Görünüm."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Alt"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Soldan Görünüm."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Sol"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Sağdan Görünüm."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Sağ"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Önden Görünüm."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Ön"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Arkadan Görünüm."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Arka"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Dönüşümü Görünümle Eşle"
@@ -8132,8 +8263,9 @@ msgid "Use Snap"
msgstr "Yapışma Kullan"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Converts rooms for portal culling."
-msgstr ""
+msgstr "Odaları portal ayıklama için dönüştürür."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8234,6 +8366,11 @@ msgid "View Portal Culling"
msgstr "Görüntükapısı Ayarları"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Görüntükapısı Ayarları"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Ayarlar..."
@@ -8299,8 +8436,9 @@ msgid "Post"
msgstr "Sonrası"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "İsimsiz Gizmo"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Adsız Proje"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8552,14 +8690,12 @@ msgid "TextureRegion"
msgstr "DokuBölgesi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Renk"
+msgstr "Renkler"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Yazı Tipi"
+msgstr "Yazı Tipleri"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8573,7 +8709,7 @@ msgstr "StilKutusu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
-msgstr ""
+msgstr "{num} renk(lar)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8595,9 +8731,8 @@ msgid "{num} font(s)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Bulunamadı!"
+msgstr "Yazı tipi bulunamadı."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
@@ -8613,9 +8748,8 @@ msgid "{num} stylebox(es)"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Alt kaynağı bulunamadı."
+msgstr "Stil kutusu bulunamadı."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
@@ -8623,7 +8757,7 @@ msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "İçe aktarma için hiçbir şey seçilmedi."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8654,9 +8788,8 @@ msgid "With Data"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Bir Düğüm Seç"
+msgstr "Veri türüne göre seçin:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8665,11 +8798,11 @@ msgstr "Önce bir ayar öğesi seçin!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Tüm görünür renk öğelerini ve verilerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Tüm görünür renk öğelerinin seçimini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8678,11 +8811,11 @@ msgstr "Önce bir ayar öğesi seçin!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Tüm görünür sabit öğeleri ve verilerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Tüm görünür sabit öğelerin seçimini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8691,11 +8824,11 @@ msgstr "Önce bir ayar öğesi seçin!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Tüm görünür yazı tipi öğelerini ve verilerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Tüm görünür yazı tipi öğelerinin seçimini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8714,36 +8847,35 @@ msgstr "Önce bir ayar öğesi seçin!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
-msgstr ""
+msgstr "Tüm görünür stil kutusu öğelerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items and their data."
-msgstr ""
+msgstr "Tüm görünür stil kutusu öğelerini ve verilerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible stylebox items."
-msgstr ""
+msgstr "Tüm görünür stil kutusu öğelerinin seçimini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Dikkat: Simge verileri eklemek, Tema kaynağınızın boyutunu önemli ölçüde "
+"artırabilir."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Hepsini Daralt"
+msgstr "Hepsini Daralt."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Hepsini Genişlet"
+msgstr "Hepsini Genişlet."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Şablon Dosyası Seç"
+msgstr "Şablon Dosyası Seç."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8752,16 +8884,15 @@ msgstr "Noktaları Seç"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
-msgstr ""
+msgstr "Öğe verileriyle tüm Tema öğelerini seçin."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Hepsini Seç"
+msgstr "Tüm seçimleri kaldır"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Tüm Tema öğelerinin seçimini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8774,287 +8905,255 @@ msgid ""
"closing this window.\n"
"Close anyway?"
msgstr ""
+"Öğeleri İçe Aktar sekmesinde bazı öğeler seçilidir. Bu pencere "
+"kapatıldığında seçim kaybolacaktır.\n"
+"Yine de kapat?"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Öğelerini düzenlemek için listeden bir tema türü seçin.\n"
+"Özel bir tür ekleyebilir veya başka bir temadan öğeleriyle birlikte bir tür "
+"içe aktarabilirsiniz."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Bütün Öğeleri Kaldır"
+msgstr "Tüm Renk Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Item"
-msgstr "Öğeyi Kaldır"
+msgstr "Öğeyi Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Bütün Öğeleri Kaldır"
+msgstr "Tüm Sabit Öğeleri Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Bütün Öğeleri Kaldır"
+msgstr "Tüm Yazı Tipi Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Bütün Öğeleri Kaldır"
+msgstr "Tüm Simge Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Bütün Öğeleri Kaldır"
+msgstr "Tüm Stil Kutusu Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Bu tema türü boş.\n"
+"El ile veya başka bir temadan içe aktararak daha fazla öğe ekleyin."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Sınıf Öğeleri Ekle"
+msgstr "Renk Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Sınıf Öğeleri Ekle"
+msgstr "Sabit Öğe Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Öğe Ekle"
+msgstr "Yazı Tipi Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Öğe Ekle"
+msgstr "Simge Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Tüm Öğeleri Ekle"
+msgstr "Stil Kutusu Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Sınıf Öğelerini Kaldır"
+msgstr "Renk Öğesini Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Sınıf Öğelerini Kaldır"
+msgstr "Sabit Öğeyi Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Düğümü Yeniden Adlandır"
+msgstr "Yazı Tipi Öğesini Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Düğümü Yeniden Adlandır"
+msgstr "Simge Öğesini Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Seçilen Öğeyi Kaldır"
+msgstr "Stil Kutusu Öğesini Yeniden Adlandır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Geçersiz dosya, bu bir audio bus yerleşim düzeni değil."
+msgstr "Geçersiz dosya, Tema kaynağı değil."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Geçersiz dosya, düzenlenen Tema kaynağıyla aynı."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Şablonlarını Yönet"
+msgstr "Tema Öğelerini Yönet"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Düzenlenebilir Öge"
+msgstr "Öğeleri Düzenle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tür:"
+msgstr "Türler:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tür:"
+msgstr "Tür Ekle:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Öğe Ekle"
+msgstr "Öğe Ekle:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Tüm Öğeleri Ekle"
+msgstr "Stil Kutusu Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Öğeyi Kaldır"
+msgstr "Öğeleri kaldır:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Sınıf Öğelerini Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Sınıf Öğelerini Kaldır"
+msgstr "Özel Öğeleri Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Bütün Öğeleri Kaldır"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Grafik Arayüzü Tema Öğeleri"
+msgstr "Tema Öğesi Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Düğüm adı:"
+msgstr "Eski ad:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Kalıbı İçe Aktar"
+msgstr "Öğeleri İçe Aktar"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Varsayılan"
+msgstr "Varsayılan tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Tema düzenle"
+msgstr "Editör Teması"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Kaynağı Sil"
+msgstr "Başka Bir Tema Kaynağı Seçin:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Kalıbı İçe Aktar"
+msgstr "Başka Bir Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Animasyon İzini Yeniden Adlandır"
+msgstr "Öğeyi Yeniden Adlandırmayı Onayla"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Tümden Yeniden Adlandır"
+msgstr "Öğe Yeniden Adlandırmayı İptal Et"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Üzerine Yaz"
+msgstr "Öğeyi Geçersiz Kıl"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Bu Stil Kutusunun ana stil olarak sabitlemesini kaldırın."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Bu Stil Kutusunu ana stil olarak sabitleyin. Özelliklerini düzenlemek, bu "
+"tipteki diğer tüm StyleBox'larda aynı özellikleri güncelleyecektir."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Tür"
+msgstr "Tür Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Öğe Ekle"
+msgstr "Öğe Türü Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Node Types:"
-msgstr "Düğüm Türü"
+msgstr "Düğüm Türleri:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Varsayılanı Yükle"
+msgstr "Varsayılanı Göster"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
-msgstr ""
+msgstr "Geçersiz kılınan öğelerin yanında varsayılan tür öğelerini göster."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Üzerine Yaz"
+msgstr "Tümünü Geçersiz Kıl"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Tüm varsayılan tür öğelerini geçersiz kıl."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Dışa Aktarım Şablonlarını Yönet..."
+msgstr "Öğeleri Yönet..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Tema öğeleri ekleyin, kaldırın, düzenleyin ve içe aktarın."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Önizleme"
+msgstr "Önizleme Ekle"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Önizlemeyi Güncelle"
+msgstr "Varsayılan Önizleme"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Bir Kaynak Örüntü Seçin:"
+msgstr "UI Sahnesi'ni seçin:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
"Toggle the control picker, allowing to visually select control types for "
"edit."
msgstr ""
+"Düzenleme için kontrol türlerini görsel olarak seçmeye izin vererek kontrol "
+"seçiciyi açın."
#: editor/plugins/theme_editor_preview.cpp
msgid "Toggle Button"
-msgstr "Değiştirme Düğmesi"
+msgstr "Geçiş Düğmesi"
#: editor/plugins/theme_editor_preview.cpp
msgid "Disabled Button"
@@ -12484,6 +12583,16 @@ msgstr "Eğri Noktası Konumu Ayarla"
msgid "Set Portal Point Position"
msgstr "Eğri Noktası Konumu Ayarla"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Silindir Şekli Yarıçapını Değiştir"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Eğriyi Konumda Ayarla"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Silindir Yarıçapını Değiştir"
@@ -12767,6 +12876,11 @@ msgstr "Işık haritalarını çizme"
msgid "Class name can't be a reserved keyword"
msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Seçimi Doldur"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "İç özel durum yığını izlemesinin sonu"
@@ -13251,80 +13365,80 @@ msgstr "Görsel Betikte Ara"
msgid "Get %s"
msgstr "Getir %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Paket ismi eksik."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Paket segmentleri sıfır olmayan uzunlukta olmalıdır."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Android uygulama paketi adlarında '% s' karakterine izin verilmiyor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Rakam, paket segmentindeki ilk karakter olamaz."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "'%s' karakteri bir paket segmentindeki ilk karakter olamaz."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Paket en azından bir tane '.' ayıracına sahip olmalıdır."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Listeden aygıt seç"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Tümünü Dışa Aktarma"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Kaldır"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Yükleniyor, lütfen bekleyin..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Sahne Örneklenemedi!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Çalışan Özel Betik..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Klasör oluşturulamadı."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "'apksigner' aracı bulunamıyor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
"Android derleme şablonu projede yüklü değil. Proje menüsünden yükleyin."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13332,13 +13446,13 @@ msgstr ""
"Hata Ayıklama Anahtar Deposu, Hata Ayıklama Kullanıcısı VE Hata Ayıklama "
"Şifresi konfigüre edilmelidir VEYA hiçbiri konfigüre edilmemelidir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Anahtar deposunda Hata Ayıklayıcı Ayarları'nda veya ön ayarda "
"yapılandırılmamış."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13346,50 +13460,50 @@ msgstr ""
"Yayınlama Anahtar Deposu, Yayınlama Kullanıcısı be Yayınlama Şifresi "
"ayarları konfigüre edilmeli VEYA hiçbiri konfigüre edilmemelidir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"Dışa aktarma ön kümesinde yanlış yapılandırılan anahtar deposunu (keystore) "
"serbest bırakın."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Editör Ayarlarında geçerli bir Android SDK yolu gerekli."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Editör Ayarlarında geçersiz Android SDK yolu."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Eksik 'platform araçları' dizini!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Android SDK platform-tools'un adb komutu bulunamıyor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Lütfen Editör Ayarlarında girilen Android SDK klasörünü kontrol ediniz."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Eksik 'inşa-araçları' dizini!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Android SDK platform-tools'un apksigner komutu bulunamıyor."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "APK genişletmesi için geçersiz ortak anahtar."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Geçersiz paket ismi:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13397,40 +13511,25 @@ msgstr ""
"Geçersiz \"GodotPaymentV3\" modülü \"android/modüller\" proje ayarına dahil "
"edildi (Godot 3.2.2'de değiştirildi).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"Eklentileri kullanabilmek için \"Özel Derleme Kullan\" seçeneği aktif olmalı."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"\"Özgürlük Derecesi (Degrees Of Freedom)\" sadece \"Xr Modu\" \"Oculus "
-"Mobile VR\" olduğunda geçerlidir."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"El Takibi(Hand Tracking)\" sadece \"Xr Modu\" \"Oculus Mobile VR\" "
"olduğunda geçerlidir."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"\"Odak Farkındalığı(Focus Awareness)\" yalnızca \"Xr Modu\" \"Oculus Mobil VR"
-"\" olduğunda geçerlidir."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"AAB Dışa Aktar\" yalnızca \"Özel Yapı Kullan\" etkinleştirildiğinde "
"geçerlidir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13438,57 +13537,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Dosyalar Taranıyor,\n"
"Lütfen Bekleyiniz..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Dışa aktarma için şablon açılamadı:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Ekliyor %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Tümünü Dışa Aktarma"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Geçersiz dosya adı! Android Uygulama Paketi *.aab uzantısı gerektirir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Genişletme, Android Uygulama Paketi ile uyumlu değildir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13496,7 +13595,7 @@ msgstr ""
"Özel olarak oluşturulmuş bir şablondan oluşturmaya çalışılıyor, ancak bunun "
"için sürüm bilgisi yok. Lütfen 'Proje' menüsünden yeniden yükleyin."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13508,26 +13607,26 @@ msgstr ""
" Godot Versiyonu: %s\n"
"Lütfen 'Proje' menüsünden Android derleme şablonunu yeniden yükleyin."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Proje yolunda proje.godot alınamadı."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Dosya yazılamadı:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Android Projesi Oluşturma (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13537,11 +13636,11 @@ msgstr ""
"Alternatif olarak, Android derleme dokümantasyonu için docs.godotengine.org "
"adresini ziyaret edin.."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Çıktı taşınıyor"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13549,24 +13648,24 @@ msgstr ""
"Dışa aktarma dosyası kopyalanamıyor ve yeniden adlandırılamıyor, çıktılar "
"için gradle proje dizinini kontrol edin."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Animasyon bulunamadı: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Konturlar oluşturuluyor..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Dışa aktarma için şablon açılamadı:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13574,21 +13673,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Ekliyor %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Dosya yazılamadı:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "APK hizalanıyor ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14125,6 +14224,14 @@ msgstr ""
"NavigationMeshInstance, bir Navigation düğümünün çocuğu ya da torunu "
"olmalıdır. O yalnızca yönlendirme verisi sağlar."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14453,6 +14560,14 @@ msgstr "Geçerli bir uzantı kullanılmalı."
msgid "Enable grid minimap."
msgstr "Izgara haritasını etkinleştir."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14506,6 +14621,10 @@ msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
"Herhangi bir şeyi işlemek için görüntükapısı boyutu 0'dan büyük olmalıdır."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14559,6 +14678,41 @@ msgstr "uniform için atama."
msgid "Constants cannot be modified."
msgstr "Sabit değerler değiştirilemez."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Dinlenme duruşu oluştur (kemiklerden)"
+
+#~ msgid "Bottom"
+#~ msgstr "Alt"
+
+#~ msgid "Left"
+#~ msgstr "Sol"
+
+#~ msgid "Right"
+#~ msgstr "Sağ"
+
+#~ msgid "Front"
+#~ msgstr "Ön"
+
+#~ msgid "Rear"
+#~ msgstr "Arka"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "İsimsiz Gizmo"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Özgürlük Derecesi (Degrees Of Freedom)\" sadece \"Xr Modu\" \"Oculus "
+#~ "Mobile VR\" olduğunda geçerlidir."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "\"Odak Farkındalığı(Focus Awareness)\" yalnızca \"Xr Modu\" \"Oculus "
+#~ "Mobil VR\" olduğunda geçerlidir."
+
#~ msgid "Package Contents:"
#~ msgstr "Paket İçerikleri:"
@@ -16496,9 +16650,6 @@ msgstr "Sabit değerler değiştirilemez."
#~ msgid "Images:"
#~ msgstr "Bedizler:"
-#~ msgid "Group"
-#~ msgstr "Öbek"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "Örnek Dönüşüm Biçimi: (.wav dizeçleri):"
diff --git a/editor/translations/tt.po b/editor/translations/tt.po
index e7b37069b7..b169cafdc7 100644
--- a/editor/translations/tt.po
+++ b/editor/translations/tt.po
@@ -994,7 +994,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1623,13 +1623,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1999,7 +1999,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2477,6 +2477,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3100,6 +3124,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3340,6 +3368,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5380,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6278,7 +6320,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6862,6 +6908,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7356,11 +7410,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7388,6 +7442,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7495,42 +7603,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7792,6 +7880,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7857,7 +7949,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11757,6 +11849,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12037,6 +12137,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12503,159 +12607,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12663,57 +12756,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12721,54 +12814,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12776,19 +12869,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13238,6 +13331,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13527,6 +13628,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13567,6 +13676,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po
index 8c7d3f272c..b0d9d05525 100644
--- a/editor/translations/tzm.po
+++ b/editor/translations/tzm.po
@@ -992,7 +992,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1621,13 +1621,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1997,7 +1997,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2475,6 +2475,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3098,6 +3122,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3338,6 +3366,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5378,6 +5410,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6276,7 +6318,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -6860,6 +6906,14 @@ msgstr ""
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7354,11 +7408,11 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
+msgid "Reset to Rest Pose"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7386,6 +7440,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7493,42 +7601,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -7790,6 +7878,10 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -7855,7 +7947,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11755,6 +11847,14 @@ msgstr ""
msgid "Set Portal Point Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12035,6 +12135,10 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12501,159 +12605,148 @@ msgstr ""
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -12661,57 +12754,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -12719,54 +12812,54 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -12774,19 +12867,19 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13236,6 +13329,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13525,6 +13626,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13565,6 +13674,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index a889e83e19..fd9f2a1b8a 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-04 12:10+0000\n"
+"PO-Revision-Date: 2021-08-12 21:32+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
@@ -383,15 +383,13 @@ msgstr "Вставити анімацію"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Неможливо відкрити '%s'."
+msgstr "вузол «%s»"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Анімація"
+msgstr "анімація"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -399,9 +397,8 @@ msgstr "AnimationPlayer не може анімувати себе, лише ін
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Властивості «%s» не існує."
+msgstr "властивість «%s»"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1042,7 +1039,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Залежності"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Ресурс"
@@ -1700,13 +1697,13 @@ msgstr ""
"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту або вимкніть пункт "
"«Увімкнено резервні драйвери»."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Нетипового шаблону діагностики не знайдено."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2092,7 +2089,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Імпортування ресурсів"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Верхівка"
@@ -2329,6 +2326,9 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"Обертається під час перемальовування вікна редактора.\n"
+"Увімкнено неперервне оновлення, яке може призвести до збільшення споживання "
+"енергії. Клацніть, щоб вимкнути його."
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2604,6 +2604,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Поточна сцена не збережена. Відкрити в будь-якому випадку?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Скасувати"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Повернути"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Неможливо перезавантажити сцену, яку ніколи не зберігали."
@@ -3293,6 +3319,11 @@ msgid "Merge With Existing"
msgstr "Об'єднати з існуючим"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Змінити перетворення"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Відкрити і запустити скрипт"
@@ -3550,6 +3581,10 @@ msgstr ""
"Тип вибраного ресурсу (%s) не відповідає типу, який є очікуваним для цієї "
"властивості (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Зробити унікальним"
@@ -3845,14 +3880,12 @@ msgid "Download from:"
msgstr "Джерело отримання:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Запустити в браузері"
+msgstr "Відкрити у браузері"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Помилка копіювання"
+msgstr "Копіювати адресу дзеркала"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -5662,6 +5695,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Пересунути CanvasItem «%s» до (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Заблокувати позначене"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Групи"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6602,7 +6647,13 @@ msgid "Remove Selected Item"
msgstr "Вилучити вибраний елемент"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Імпортувати зі сцени"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Імпортувати зі сцени"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7194,6 +7245,16 @@ msgstr "Створити точки"
msgid "Flip Portal"
msgstr "Віддзеркалити портал"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Зняти перетворення"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Створити вузол"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree не містить встановлено шляху до AnimationPlayer"
@@ -7700,12 +7761,14 @@ msgid "Skeleton2D"
msgstr "Плоский каркас"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Створити вільну позу (з кісток)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Встановити кістки для вільної пози"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Встановити кістки для вільної пози"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Перезаписати"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7732,6 +7795,71 @@ msgid "Perspective"
msgstr "Перспектива"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Перспектива"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Перспектива"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Перспектива"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Перспектива"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Ортогонально"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Перспектива"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Перетворення перервано."
@@ -7839,42 +7967,22 @@ msgid "Bottom View."
msgstr "Вигляд знизу."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Знизу"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "Вигляд зліва."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Зліва"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "Вигляд справа."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Справа"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "Вигляд спереду."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Спереду"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "Вигляд ззаду."
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "Ззаду"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "Вирівняти перетворення з переглядом"
@@ -8146,6 +8254,11 @@ msgid "View Portal Culling"
msgstr "Переглянути відбраковування Portal"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Переглянути відбраковування Portal"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Параметри…"
@@ -8211,8 +8324,9 @@ msgid "Post"
msgstr "Після"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "Штука без назви"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Проєкт без назви"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8671,6 +8785,9 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Виберіть тип теми зі списку, щоб редагувати його записи.\n"
+"Ви можете додати нетиповий тип або імпортувати тип із його записами з іншої "
+"теми."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8701,6 +8818,8 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"Цей тип теми є порожнім.\n"
+"Додайте до нього записи вручну або імпортуванням з іншої теми."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -12338,14 +12457,22 @@ msgid "Change Ray Shape Length"
msgstr "Змінити довжину форми променя"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Задати положення точки кривої"
+msgstr "Задати положення точки кімнати"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Задати положення точки кривої"
+msgstr "Задати положення точки порталу"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Змінити радіус форми циліндра"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Встановити криву в позиції"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12630,6 +12757,11 @@ msgstr "Креслення карт освітлення"
msgid "Class name can't be a reserved keyword"
msgstr "Назвою класу не може бути зарезервоване ключове слово"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Заповнити позначене"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "Кінець трасування стека для внутрішнього виключення"
@@ -13113,69 +13245,69 @@ msgstr "Шукати VisualScript"
msgid "Get %s"
msgstr "Отримати %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Не вказано назви пакунка."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Сегменти пакунка повинні мати ненульову довжину."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
"Не можна використовувати у назві пакунка програми на Android символи «%s»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Цифра не може бути першим символом у сегменті пакунка."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
"Не можна використовувати символ «%s» як перший символ назви сегмента пакунка."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "У назві пакунка має бути принаймні один роздільник «.»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Вибрати пристрій зі списку"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "Запущено на %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "Експортування APK…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "Вилучення…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "Встановлення на пристрій. Будь ласка, зачекайте..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Не вдалося встановити на пристрій: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "Запуск на пристрої…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "Не вдалося виконати на пристрої."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Не вдалося знайти програму apksigner."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -13183,7 +13315,7 @@ msgstr ""
"У проєкті не встановлено шаблон збирання Android. Встановіть його за "
"допомогою меню «Проєкт»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
@@ -13191,13 +13323,13 @@ msgstr ""
"Має бути налаштовано діагностику сховища ключів, діагностику користувача АБО "
"діагностику пароля АБО не налаштовано діагностику жодного з цих компонентів."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
"Ні у параметрах редактора, ні у шаблоні не налаштовано діагностичне сховище "
"ключів."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
@@ -13205,53 +13337,53 @@ msgstr ""
"Має бути налаштовано параметри сховища ключів випуску, користувача випуску і "
"пароля випуску або не налаштовано жоден з цих параметрів."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
"У шаблоні експортування неправильно налаштовано сховище ключів випуску."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
"У параметрах редактора має бути вказано коректний шлях до SDK для Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Некоректний шлях до SDK для Android у параметрах редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Не знайдено каталогу «platform-tools»!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
"Не вдалося знайти програми adb із інструментів платформи SDK для Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Будь ласка, перевірте, чи правильно вказано каталог SDK для Android у "
"параметрах редактора."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Не знайдено каталогу «build-tools»!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
"Не вдалося знайти програми apksigner з інструментів збирання SDK для Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Некоректний відкритий ключ для розгортання APK."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Некоректна назва пакунка:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13259,41 +13391,26 @@ msgstr ""
"Некоректний модуль «GodotPaymentV3» включено до параметрів проєкту «android/"
"modules» (змінено у Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
"Щоб можна було користуватися додатками, слід позначити пункт "
"«Використовувати нетипову збірку»."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"«.Степені свободи» працюють, лише якщо «Режим Xr» має значення «Oculus "
-"Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"«Стеженням за руками» можна скористатися, лише якщо «Режим Xr» дорівнює "
"«Oculus Mobile VR»."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"«Врахуванням фокуса» можна скористатися, лише якщо «Режим Xr» дорівнює "
-"«Oculus Mobile VR»."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"Пункт «Експортувати AAB» є чинним, лише якщо увімкнено «Використовувати "
"нетипове збирання»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13305,54 +13422,54 @@ msgstr ""
"засобів для розробки Android.\n"
"Отриманий у результаті %s не підписано."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "Підписування діагностики %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "Підписування випуску %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "Не вдалося знайти сховище ключів. Неможливо виконати експортування."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "«apksigner» повернуто повідомлення про помилку із номером %d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "Перевіряємо %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "%s не пройдено перевірку за допомогою «apksigner»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "Експорт на Android"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
"Некоректна назва файла! Пакет програми Android повинен мати суфікс назви *."
"aab."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "Розширення APK є несумісним із Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
"Некоректна назва файла! Пакунок Android APK повинен мати суфікс назви *.apk."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "Непідтримуваний формат експортування!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -13361,7 +13478,7 @@ msgstr ""
"виявлено даних щодо версії. Будь ласка, повторно встановіть шаблон за "
"допомогою меню «Проєкт»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13374,25 +13491,25 @@ msgstr ""
"Будь ласка, повторно встановіть шаблон для збирання для Android за допомогою "
"меню «Проєкт»."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
"Не вдалося перезаписати файли res://android/build/res/*.xml із назвою проєкту"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "Не вдалося експортувати файли проєкту до проєкту gradle\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "Не вдалося записати файл пакунка розширення!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Збирання проєкту Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13402,11 +13519,11 @@ msgstr ""
"Крім того, можете відвідати docs.godotengine.org і ознайомитися із "
"документацією щодо збирання для Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "Пересування виведених даних"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13414,15 +13531,15 @@ msgstr ""
"Не вдалося скопіювати і перейменувати файл експортованих даних. Виведені "
"дані можна знайти у каталозі проєкту gradle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr "Пакунок не знайдено: %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Створення APK…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13430,7 +13547,7 @@ msgstr ""
"Не вдалося знайти шаблон APK для експортування:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13441,19 +13558,19 @@ msgstr ""
"Будь ласка, створіть шаблон з усіма необхідними бібліотеками або зніміть "
"позначку з архітектур із пропущеними бібліотеками у стилі експортування."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Додавання файлів…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "Не вдалося експортувати файли проєкту"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "Вирівнюємо APK..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "Не вдалося розпакувати тимчасовий невирівняний APK."
@@ -14000,6 +14117,14 @@ msgstr ""
"NavigationMeshInstance має бути дочірнім елементом вузла Navigation або "
"елементом ще нижчої підпорядкованості. Він надає лише навігаційні дані."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14144,36 +14269,50 @@ msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Шлях RoomList є некоректним.\n"
+"Будь ласка, перевірте, що у RoomManager вказано значення гілки RoomList."
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList не містить записів кімнат, перериваємо обробку."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Виявлено вузли із помилковими назвами. Ознайомтеся із записами журналу, щоб "
+"дізнатися більше. Перериваємо обробку."
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Не виявлено кімнати посилання на портал. Ознайомтеся із журналом, щоб "
+"дізнатися більше."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Помилка під час спроби автоматично пов'язати портал. Ознайомтеся із "
+"журналом, щоб дізнатися більше.\n"
+"Перевірте, чи веде портал назовні щодо початкової кімнати."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Виявлено перекриття кімнат. У області перекриття камери можуть працювати із "
+"помилками.\n"
+"Ознайомтеся із журналом, щоб дізнатися більше."
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Помилка під час спроби обчислити межі кімнат.\n"
+"Переконайтеся, що для усіх кімнат вказано межі вручну або геометричні межі."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -14340,6 +14479,14 @@ msgstr "Необхідно використовувати допустиме р
msgid "Enable grid minimap."
msgstr "Увімкнути мінікарту ґратки."
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14395,6 +14542,10 @@ msgstr ""
"Щоб програма могла хоч щось показати, розмір поля перегляду має бути більшим "
"за 0."
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14453,6 +14604,41 @@ msgstr "Призначення однорідного."
msgid "Constants cannot be modified."
msgstr "Сталі не можна змінювати."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Створити вільну позу (з кісток)"
+
+#~ msgid "Bottom"
+#~ msgstr "Знизу"
+
+#~ msgid "Left"
+#~ msgstr "Зліва"
+
+#~ msgid "Right"
+#~ msgstr "Справа"
+
+#~ msgid "Front"
+#~ msgstr "Спереду"
+
+#~ msgid "Rear"
+#~ msgstr "Ззаду"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "Штука без назви"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "«.Степені свободи» працюють, лише якщо «Режим Xr» має значення «Oculus "
+#~ "Mobile VR»."
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "«Врахуванням фокуса» можна скористатися, лише якщо «Режим Xr» дорівнює "
+#~ "«Oculus Mobile VR»."
+
#~ msgid "Package Contents:"
#~ msgstr "Вміст пакунка:"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index fb70bc5703..332f5bd681 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -1014,7 +1014,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr ""
@@ -1649,13 +1649,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2042,7 +2042,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr ""
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr ""
@@ -2528,6 +2528,30 @@ msgid "Current scene not saved. Open anyway?"
msgstr ""
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
@@ -3162,6 +3186,10 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr ""
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3406,6 +3434,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5510,6 +5542,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr ".تمام کا انتخاب"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr ".تمام کا انتخاب"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6435,7 +6479,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7035,6 +7083,15 @@ msgstr ".تمام کا انتخاب"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr ".اینیمیشن کی کیز کو ڈیلیٹ کرو"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7541,11 +7598,12 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "سب سکریپشن بنائیں"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
+msgid "Overwrite Rest Pose"
msgstr ""
#: editor/plugins/skeleton_editor_plugin.cpp
@@ -7574,6 +7632,60 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -7684,42 +7796,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Align Transform with View"
msgstr ".تمام کا انتخاب"
@@ -7986,6 +8078,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr ""
@@ -8051,7 +8148,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12100,6 +12197,15 @@ msgstr ".تمام کا انتخاب"
msgid "Set Portal Point Position"
msgstr ".تمام کا انتخاب"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr ".تمام کا انتخاب"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12392,6 +12498,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr ".تمام کا انتخاب"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -12880,162 +12991,151 @@ msgstr "سب سکریپشن بنائیں"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr ".سپورٹ"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "سب سکریپشن بنائیں"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "سب سکریپشن بنائیں"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13043,57 +13143,57 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13101,55 +13201,55 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "سب سکریپشن بنائیں"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13157,21 +13257,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr ".تمام کا انتخاب"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "سب سکریپشن بنائیں"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13624,6 +13724,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13913,6 +14021,14 @@ msgstr ""
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -13953,6 +14069,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index d50d622215..518c301ca6 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -24,8 +24,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-08-02 02:00+0000\n"
-"Last-Translator: Rev <revolnoom7801@gmail.com>\n"
+"PO-Revision-Date: 2021-09-15 00:46+0000\n"
+"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/"
"godot/vi/>\n"
"Language: vi\n"
@@ -33,7 +33,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -383,7 +383,7 @@ msgstr "Chèn Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr ""
+msgstr "nút '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -605,9 +605,8 @@ msgid "Go to Previous Step"
msgstr "Đến Bước trước đó"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Đặt lại phóng"
+msgstr "Áp dụng đặt lại"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -803,8 +802,8 @@ msgid ""
"Target method not found. Specify a valid method or attach a script to the "
"target node."
msgstr ""
-"Phương thức không tìm thấy. Chỉ định phương thức hợp lệ hoặc đính kèm tệp "
-"lệnh vào nút."
+"Phương thức không được tìm thấy. Chỉ định phương thức hợp lệ hoặc đính kèm "
+"tệp lệnh vào nút."
#: editor/connections_dialog.cpp
msgid "Connect to Node:"
@@ -921,7 +920,7 @@ msgstr "Hủy kết nối"
#: editor/connections_dialog.cpp
msgid "Connect a Signal to a Method"
-msgstr "Kết nối tín hiệu vào hàm"
+msgstr "Kết nối tín hiệu vào một hàm"
#: editor/connections_dialog.cpp
msgid "Edit Connection:"
@@ -952,9 +951,8 @@ msgid "Edit..."
msgstr "Chỉnh sửa..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
-msgstr "Đến Method"
+msgstr "Đi đến phương thức"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1034,7 +1032,7 @@ msgstr ""
msgid "Dependencies"
msgstr "Các phụ thuộc"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "Tài nguyên"
@@ -1166,7 +1164,7 @@ msgstr "Cảm ơn từ cộng đồng Godot!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Nháy để sao chép."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1291,9 +1289,8 @@ msgid "The following files failed extraction from asset \"%s\":"
msgstr "Không thể lấy các tệp sau khỏi gói:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Và %s tệp nữa."
+msgstr "(và %s tệp nữa)"
#: editor/editor_asset_installer.cpp
#, fuzzy
@@ -1573,9 +1570,8 @@ msgid "Name"
msgstr "Tên"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Global Variable"
-msgstr "Đổi tên Biến"
+msgstr "Biến toàn cục"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1697,13 +1693,13 @@ msgstr ""
"Chọn kích hoạt 'Nhập PVRTC' trong Cài đặt Dự án, hoặc tắt 'Kích hoạt Driver "
"Tương thích Ngược'."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "Không tìm thấy mẫu gỡ lỗi tuỳ chỉnh."
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -1784,7 +1780,7 @@ msgstr "(Hiện tại)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(không có)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
@@ -1819,19 +1815,16 @@ msgid "Enable Contextual Editor"
msgstr "Bật trình chỉnh sửa ngữ cảnh"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Thuộc tính:"
+msgstr "Thuộc tính lớp:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Tính năng"
+msgstr "Tính năng chính:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Lớp đã bật:"
+msgstr "Các nút và lớp:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1857,14 +1850,12 @@ msgid "Current Profile:"
msgstr "Hồ sơ hiện tại:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Xoá hồ sơ"
+msgstr "Tạo hồ sơ"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Xóa Ô"
+msgstr "Xóa hồ sơ"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1884,14 +1875,12 @@ msgid "Export"
msgstr "Xuất ra"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Hồ sơ hiện tại:"
+msgstr "Cấu hình hồ sơ được chọn:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Tuỳ chọn Lớp:"
+msgstr "Tuỳ chọn bổ sung:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1922,9 +1911,8 @@ msgid "Select Current Folder"
msgstr "Chọn thư mục hiện tại"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "Tệp tin tồn tại, ghi đè?"
+msgstr "Tệp đã tồn tại, ghi đè chứ?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2085,7 +2073,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "Nhập lại tài nguyên"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "Trên đầu"
@@ -2124,7 +2112,7 @@ msgstr "mặc định:"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr "Hàm"
+msgstr "Phương thức"
#: editor/editor_help.cpp
msgid "Theme Properties"
@@ -2156,7 +2144,7 @@ msgstr ""
#: editor/editor_help.cpp
msgid "Method Descriptions"
-msgstr "Nội dung Hàm"
+msgstr "Mô tả phương thức"
#: editor/editor_help.cpp
msgid ""
@@ -2189,7 +2177,7 @@ msgstr "Chỉ tìm Lớp"
#: editor/editor_help_search.cpp
msgid "Methods Only"
-msgstr "Chỉ tìm Hàm"
+msgstr "Chỉ tìm phương thức"
#: editor/editor_help_search.cpp
msgid "Signals Only"
@@ -2217,7 +2205,7 @@ msgstr "Lớp"
#: editor/editor_help_search.cpp
msgid "Method"
-msgstr "Hàm"
+msgstr "Phương thức"
#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp
msgid "Signal"
@@ -2590,6 +2578,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "Cảnh hiện tại chưa lưu. Kệ mở luôn?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "Hoàn tác"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "Làm lại"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "Không thể nạp một cảnh chưa lưu bao giờ."
@@ -2938,9 +2952,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Tìm kiếm tài nguyên mất gốc..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Đổi tên Dự án"
+msgstr "Tải lại dự án hiện tại"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -2998,7 +3011,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr ""
+msgstr "Điều hướng nhìn thấy được"
#: editor/editor_node.cpp
msgid ""
@@ -3096,7 +3109,7 @@ msgstr "Mở Hướng dẫn"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Hỏi đáp"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3115,9 +3128,8 @@ msgid "Community"
msgstr "Cộng đồng"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Về chúng tôi"
+msgstr "Về Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3211,9 +3223,8 @@ msgid "Manage Templates"
msgstr "Quản lý Mẫu xuất bản"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Cài đặt từ File"
+msgstr "Cài đặt từ tệp"
#: editor/editor_node.cpp
#, fuzzy
@@ -3265,6 +3276,11 @@ msgid "Merge With Existing"
msgstr "Hợp nhất với Hiện có"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "Đổi Transform Animation"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "Mở & Chạy mã lệnh"
@@ -3365,9 +3381,8 @@ msgid "Update"
msgstr "Cập nhật"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Phiên bản:"
+msgstr "Phiên bản"
#: editor/editor_plugin_settings.cpp
#, fuzzy
@@ -3385,14 +3400,12 @@ msgid "Measure:"
msgstr "Đo đạc:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Thời gian khung hình (giây)"
+msgstr "Thời gian khung hình (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "Thời gian trung bình (giây)"
+msgstr "Thời gian trung bình (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3516,6 +3529,10 @@ msgid ""
msgstr ""
"Kiểu của tài nguyên đã chọn (%s) không dùng được cho thuộc tính này (%s)."
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "Duy nhất"
@@ -4211,7 +4228,7 @@ msgstr "Xoá Nhóm"
#: editor/groups_editor.cpp editor/node_dock.cpp
msgid "Groups"
-msgstr "Nhóm (Groups)"
+msgstr "Nhóm"
#: editor/groups_editor.cpp
msgid "Nodes Not in Group"
@@ -5623,6 +5640,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "Di chuyển CanvasItem \"%s\" tới (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "Khoá lựa chọn"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Nhóm"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6564,7 +6593,13 @@ msgid "Remove Selected Item"
msgstr "Xóa mục đã chọn"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "Nhập từ Cảnh"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "Nhập từ Cảnh"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7161,6 +7196,16 @@ msgstr "Xóa Point"
msgid "Flip Portal"
msgstr "Lật Ngang"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "Xóa biến đổi"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "Tạo Nút"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree chưa đặt đường dẫn đến AnimationPlayer nào"
@@ -7468,7 +7513,7 @@ msgstr "Dòng"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Function"
-msgstr "Đi tới Hàm"
+msgstr "Đi tới hàm"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
@@ -7611,7 +7656,7 @@ msgstr "Xóa hết mọi dấu trang"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Function..."
-msgstr "Đi tới Hàm..."
+msgstr "Đi tới hàm..."
#: editor/plugins/script_text_editor.cpp
msgid "Go to Line..."
@@ -7663,12 +7708,14 @@ msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "Tạo tư thế nghỉ (Từ Xương)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "Đặt Xương thành Tư thế Nghỉ"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "Đặt Xương thành Tư thế Nghỉ"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "Ghi đè"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7695,6 +7742,71 @@ msgid "Perspective"
msgstr "Phối cảnh"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "Phối cảnh"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "Phối cảnh"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "Phối cảnh"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "Phối cảnh"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "Vuông góc"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "Phối cảnh"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "Hủy Biến đổi."
@@ -7811,42 +7923,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "Dưới"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "Trái"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "Phải"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "Trước"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8116,6 +8208,11 @@ msgid "View Portal Culling"
msgstr "Cài đặt Cổng xem"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "Cài đặt Cổng xem"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "Cài đặt..."
@@ -8181,8 +8278,9 @@ msgid "Post"
msgstr "Sau"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr ""
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "Dự án không tên"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8974,7 +9072,7 @@ msgstr ""
#: editor/plugins/theme_editor_preview.cpp
msgid "Submenu"
-msgstr "Menu phụ"
+msgstr "Bảng chọn phụ"
#: editor/plugins/theme_editor_preview.cpp
msgid "Subitem 1"
@@ -9678,18 +9776,16 @@ msgid "Create Shader Node"
msgstr "Tạo nút Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Color function."
-msgstr "Thêm Hàm"
+msgstr "hàm màu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color operator."
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Grayscale function."
-msgstr "Tạo Function"
+msgstr "hàm đen trắng"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Converts HSV vector to RGB equivalent."
@@ -12339,6 +12435,16 @@ msgstr "Đặt vị trí điểm uốn"
msgid "Set Portal Point Position"
msgstr "Đặt vị trí điểm uốn"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "Chỉnh bán kính hình trụ"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "Đặt vị trí điểm uốn"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Thay Đổi Bán Kính Hình Trụ"
@@ -12630,6 +12736,11 @@ msgstr ""
msgid "Class name can't be a reserved keyword"
msgstr "Tên Lớp không được trùng với từ khóa"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "Chọn tất cả"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13109,138 +13220,138 @@ msgstr "Tìm VisualScript"
msgid "Get %s"
msgstr "Lấy %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "Thiếu tên gói."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "Các phân đoạn của gói phải có độ dài khác không."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Không được phép cho kí tự '%s' vào tên gói phần mềm Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "Không thể có chữ số làm kí tự đầu tiên trong một phần của gói."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "Kí tự '%s' không thể ở đầu trong một phân đoạn của gói."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "Kí tự phân cách '.' phải xuất hiện ít nhất một lần trong tên gói."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "Chọn thiết bị trong danh sách"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "Xuất tất cả"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "Gỡ cài đặt"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "Đang tải, đợi xíu..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "Không thể bắt đầu quá trình phụ!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "Chạy Tệp lệnh Tự chọn ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "Không thể tạo folder."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "Không tìm thấy công cụ 'apksigner'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-"Mẫu xuất bản cho Android chưa được cài đặt trong dự án. Cài đặt nó từ menu "
-"Dự Án."
+"Bản mẫu dựng cho Android chưa được cài đặt trong dự án. Cài đặt nó từ bảng "
+"chọn Dự Án."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "Cài đặt Trình biên tập yêu cầu một đường dẫn Android SDK hợp lệ."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "Đường dẫn Android SDK không hợp lệ trong Cài đặt Trình biên tập."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "Thiếu thư mục 'platform-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "Không tìm thấy lệnh adb trong bộ Android SDK platform-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
"Hãy kiểm tra thư mục Android SDK được cung cấp ở Cài đặt Trình biên tập."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "Thiếu thư mục 'build-tools'!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "Không tìm thấy lệnh apksigner của bộ Android SDK build-tools."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "Khóa công khai của bộ APK mở rộng không hợp lệ."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "Tên gói không hợp lệ:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13248,34 +13359,23 @@ msgstr ""
"Cài đặt dự án chứa module không hợp lệ \"GodotPaymentV3\" ở mục \"android/"
"modules\" (đã thay đổi từ Godot 3.2.2).\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "\"Sử dụng Bản dựng tùy chỉnh\" phải được bật để sử dụng các tiện ích."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr "\"Bậc tự do\" chỉ dùng được khi \"Xr Mode\" là \"Oculus Mobile VR\"."
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"\"Theo dõi chuyển động tay\" chỉ dùng được khi \"Xr Mode\" là \"Oculus "
"Mobile VR\"."
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
"\"Xuất AAB\" chỉ dùng được khi \"Sử dụng Bản dựng tùy chỉnh\" được bật."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13283,97 +13383,97 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"Đang quét các tệp tin,\n"
"Chờ một chút ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "Không thể mở bản mẫu để xuất:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "Đang thêm %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "Xuất tất cả"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "Tên tệp không hợp lệ! Android App Bundle cần đuôi *.aab ở cuối."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "Đuôi APK không tương thích với Android App Bundle."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Tên tệp không hợp lệ! Android APK cần đuôi *.apk ở cuối."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-"Cố gắng xây dựng từ một mẫu xuất bản tùy chỉnh, nhưng không có thông tin "
-"phiên bản nào tồn tại. Vui lòng cài đặt lại từ menu 'Dự án'."
+"Cố gắng dựng từ một bản mẫu được dựng tùy chỉnh, nhưng không có thông tin "
+"phiên bản nào tồn tại. Vui lòng cài đặt lại từ bảng chọn'Dự án'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
" Godot Version: %s\n"
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Phiên bản xây dựng Android không khớp:\n"
-" Mẫu xuất bản được cài đặt: %s\n"
-" Phiên bản Godot sử dụng: %s\n"
-"Vui lòng cài đặt lại mẫu xuất bản Android từ menu 'Dự Án'."
+"Phiên bản dựng Android không khớp:\n"
+" Bản mẫu được cài đặt: %s\n"
+" Phiên bản Godot: %s\n"
+"Vui lòng cài đặt lại bản mẫu Android từ bảng chọn 'Dự Án'."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "Không thể chỉnh sửa 'project.godot' trong đường dẫn dự án."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "Không viết được file:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "Đang dựng dự án Android (gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13381,11 +13481,11 @@ msgstr ""
"Xây dựng dự án Android thất bại, hãy kiểm tra đầu ra để biết lỗi.\n"
"Hoặc truy cập 'docs.godotengine.org' để xem cách xây dựng Android."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
@@ -13393,24 +13493,24 @@ msgstr ""
"Không thể sao chép và đổi tên tệp xuất, hãy kiểm tra thư mục Gradle của dự "
"án để xem kết quả."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "Không tìm thấy Animation: '%s'"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "Tạo đường viền ..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "Không thể mở bản mẫu để xuất:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13418,21 +13518,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "Đang thêm %s..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "Không viết được file:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13941,6 +14041,14 @@ msgstr ""
"NavigationMeshInstance phải là nút con hoặc cháu một nút Navigation. Nó chỉ "
"cung cấp dữ liệu điều hướng."
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14237,6 +14345,14 @@ msgstr "Sử dụng phần mở rộng hợp lệ."
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
#, fuzzy
msgid ""
@@ -14283,6 +14399,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr ""
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14334,6 +14454,27 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Không thể chỉnh sửa hằng số."
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "Tạo tư thế nghỉ (Từ Xương)"
+
+#~ msgid "Bottom"
+#~ msgstr "Dưới"
+
+#~ msgid "Left"
+#~ msgstr "Trái"
+
+#~ msgid "Right"
+#~ msgstr "Phải"
+
+#~ msgid "Front"
+#~ msgstr "Trước"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "\"Bậc tự do\" chỉ dùng được khi \"Xr Mode\" là \"Oculus Mobile VR\"."
+
#~ msgid "Package Contents:"
#~ msgstr "Trong Gói có:"
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 8284ac605e..e8084b8856 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -83,7 +83,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2021-08-12 14:48+0000\n"
+"PO-Revision-Date: 2021-09-06 16:32+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hans/>\n"
@@ -92,7 +92,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.8.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -440,13 +440,11 @@ msgstr "插入动画"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "无法打开 \"%s\"。"
+msgstr "节点“%s”"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "动画"
@@ -456,9 +454,8 @@ msgstr "AnimationPlayer 不能动画化自己,只可动画化其它 Player。"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "不存在属性“%s”。"
+msgstr "属性“%s”"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -1086,7 +1083,7 @@ msgstr ""
msgid "Dependencies"
msgstr "依赖"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "资源"
@@ -1730,13 +1727,13 @@ msgstr ""
"目标平台需要 “PVRTC” 纹理压缩,以便驱动程序回退到 GLES2。\n"
"在项目设置中启用 “Import Pvrtc”,或禁用 “Driver Fallback Enabled”。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "找不到自定义调试模板。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2086,11 +2083,11 @@ msgstr "目录与文件:"
#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp
#: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp
msgid "Preview:"
-msgstr "预览:"
+msgstr "预览:"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File:"
-msgstr "文件:"
+msgstr "文件:"
#: editor/editor_file_system.cpp
msgid "ScanSources"
@@ -2106,13 +2103,13 @@ msgstr "文件 %s 有不同类型的多个导入器,已中止导入"
msgid "(Re)Importing Assets"
msgstr "正在导入或重新导入素材"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "顶部"
#: editor/editor_help.cpp
msgid "Class:"
-msgstr "类:"
+msgstr "类:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
@@ -2258,7 +2255,7 @@ msgstr "主题属性"
#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
msgid "Property:"
-msgstr "属性:"
+msgstr "属性:"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_property_selector.cpp
@@ -2343,6 +2340,8 @@ msgid ""
"Update Continuously is enabled, which can increase power usage. Click to "
"disable it."
msgstr ""
+"编辑器窗口重绘时旋转。\n"
+"已启用连续更新,会提升耗电量。点击禁用。"
#: editor/editor_node.cpp
msgid "Spins when the editor window redraws."
@@ -2603,6 +2602,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "当前场景尚未保存。是否仍要打开?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "撤销"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "重做"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "无法重新加载从未保存过的场景。"
@@ -2716,7 +2741,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr "场景 “%s” 的依赖已被破坏:"
+msgstr "场景 “%s” 的依赖已被破坏:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
@@ -3260,6 +3285,11 @@ msgid "Merge With Existing"
msgstr "与现有合并"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "修改动画变换"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "打开并运行脚本"
@@ -3511,6 +3541,10 @@ msgid ""
"property (%s)."
msgstr "所选资源(%s)与该属性(%s)所需的类型都不匹配。"
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "唯一化"
@@ -3796,14 +3830,12 @@ msgid "Download from:"
msgstr "下载:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "在浏览器中运行"
+msgstr "在浏览器中打开"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "复制错误信息"
+msgstr "复制镜像 URL"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -4266,7 +4298,7 @@ msgstr "执行自定义脚本..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
-msgstr "无法载入后导入脚本:"
+msgstr "无法载入后导入脚本:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
@@ -4764,7 +4796,7 @@ msgstr "打开/关闭自动播放"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr "新动画名称:"
+msgstr "新动画名称:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
@@ -4772,7 +4804,7 @@ msgstr "新建动画"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr "重命名动画:"
+msgstr "重命名动画:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -4948,7 +4980,7 @@ msgstr "创建新动画"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
-msgstr "动画名称:"
+msgstr "动画名称:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
@@ -4963,7 +4995,7 @@ msgstr "混合时间:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr "接下来(自动队列):"
+msgstr "接下来(自动队列):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
@@ -5071,7 +5103,7 @@ msgstr "动画树"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "New name:"
-msgstr "新名称:"
+msgstr "新名称:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
@@ -5096,15 +5128,15 @@ msgstr "混合 (Mix)"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr "自动重新开始:"
+msgstr "自动重新开始:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Restart (s):"
-msgstr "重新开始(秒):"
+msgstr "重新开始(秒):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr "随机开始(秒):"
+msgstr "随机开始(秒):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
@@ -5113,7 +5145,7 @@ msgstr "开始!"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr "数量:"
+msgstr "数量:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 0:"
@@ -5207,7 +5239,7 @@ msgstr "筛选..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
-msgstr "内容:"
+msgstr "内容:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
@@ -5283,11 +5315,11 @@ msgstr "文件哈希值错误,该文件可能被篡改。"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr "预计:"
+msgstr "预期:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr "获得:"
+msgstr "获得:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
@@ -5579,6 +5611,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "移动 CanvasItem “%s” 至 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "锁定所选项"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "分组"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -5735,7 +5779,7 @@ msgstr "添加 IK 链"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr "清除IK链"
+msgstr "清除 IK 链"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6146,7 +6190,7 @@ msgstr "粒子"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
-msgstr "生成顶点计数:"
+msgstr "生成顶点计数:"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6502,7 +6546,13 @@ msgid "Remove Selected Item"
msgstr "移除选中项目"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "从场景中导入"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "从场景中导入"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7074,7 +7124,7 @@ msgstr "预加载资源"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Flip Portals"
-msgstr "翻转门户"
+msgstr "翻转入口"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Room Generate Points"
@@ -7086,7 +7136,17 @@ msgstr "生成点"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Flip Portal"
-msgstr "翻转门户"
+msgstr "翻转入口"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "清除变换"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "创建节点"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7179,12 +7239,12 @@ msgstr "主题另存为..."
#: editor/plugins/script_editor_plugin.cpp
msgid "%s Class Reference"
-msgstr "%s 类引用"
+msgstr "%s 类参考手册"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
msgid "Find Next"
-msgstr "查找下一项"
+msgstr "查找下一个"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -7430,7 +7490,7 @@ msgstr "首字母大写"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Syntax Highlighter"
-msgstr "语法高亮显示"
+msgstr "语法高亮器"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
@@ -7486,7 +7546,7 @@ msgstr "展开所有行"
#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
-msgstr "符号自动补全"
+msgstr "补全符号"
#: editor/plugins/script_text_editor.cpp
msgid "Evaluate Selection"
@@ -7586,12 +7646,14 @@ msgid "Skeleton2D"
msgstr "2D 骨骼节点"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "制作放松姿势(从骨骼)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "将骨骼重置为放松姿势"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "将骨骼重置为放松姿势"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "覆盖"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7618,6 +7680,71 @@ msgid "Perspective"
msgstr "透视"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "透视"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "透视"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "透视"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "透视"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "透视"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "已忽略变换。"
@@ -7725,42 +7852,22 @@ msgid "Bottom View."
msgstr "底视图。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "底部"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "左视图。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "左方"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "右视图。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "右方"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "前视图。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "前面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "后视图。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "后方"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "将变换与视图对齐"
@@ -7929,7 +8036,7 @@ msgstr "使用吸附"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
-msgstr "为门户剔除转换房间。"
+msgstr "为入口剔除转换房间。"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -8026,7 +8133,12 @@ msgstr "显示网格"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Portal Culling"
-msgstr "显示门户剔除"
+msgstr "显示入口剔除"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "显示入口剔除"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8043,7 +8155,7 @@ msgstr "平移吸附:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
-msgstr "旋转吸附(度):"
+msgstr "旋转吸附(角度):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
@@ -8059,11 +8171,11 @@ msgstr "透视视角(角度):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr "查看 Z-Near:"
+msgstr "视图 Z-Near:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr "查看 Z-Far:"
+msgstr "视图 Z-Far:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
@@ -8094,8 +8206,9 @@ msgid "Post"
msgstr "后置"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "无名控制器"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "未命名项目"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8135,7 +8248,7 @@ msgstr "Sprite 是空的!"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Can't convert a sprite using animation frames to mesh."
-msgstr "无法将使用动画帧将精灵转换为网格。"
+msgstr "无法将使用动画帧的精灵转换为网格。"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't replace by mesh."
@@ -8549,6 +8662,8 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"从列表中选择一个主题类型以编辑其项目。\n"
+"你可以添加一个自定义类型,或者从其它主题中导入一个类型及其项目。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Color Items"
@@ -8579,6 +8694,8 @@ msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
+"该主题类型为空。\n"
+"请手动添加或者从其它主题导入更多项目。"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Color Item"
@@ -9458,7 +9575,7 @@ msgstr "调整 VisualShader 节点大小"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
-msgstr "设置统一名称"
+msgstr "设置 Uniform 名称"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Input Default Port"
@@ -9579,7 +9696,7 @@ msgstr "颜色常量。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color uniform."
-msgstr "颜色统一。"
+msgstr "颜色 Uniform。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the boolean result of the %s comparison between two parameters."
@@ -9653,7 +9770,7 @@ msgstr "布尔常量。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Boolean uniform."
-msgstr "布尔统一。"
+msgstr "布尔 Uniform。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for all shader modes."
@@ -9930,7 +10047,7 @@ msgstr "标量常数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Scalar uniform."
-msgstr "标量一致。"
+msgstr "标量 Uniform。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Perform the cubic texture lookup."
@@ -9942,15 +10059,15 @@ msgstr "执行纹理查找。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Cubic texture uniform lookup."
-msgstr "立方纹理均匀查找。"
+msgstr "立方纹理 Uniform 查找。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "2D texture uniform lookup."
-msgstr "2D 纹理均匀查找。"
+msgstr "2D 纹理 Uniform 查找。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "2D texture uniform lookup with triplanar."
-msgstr "2D 纹理均匀查找与三平面。"
+msgstr "2D 纹理 Uniform 查找与三平面。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Transform function."
@@ -10006,7 +10123,7 @@ msgstr "变换常数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Transform uniform."
-msgstr "变换统一。"
+msgstr "变换 Uniform。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector function."
@@ -10152,7 +10269,7 @@ msgstr "向量常数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector uniform."
-msgstr "向量一致。"
+msgstr "向量 Uniform。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10181,7 +10298,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr "至现有一致的引用。"
+msgstr "对现有 Uniform 的引用。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -10261,7 +10378,7 @@ msgid ""
"This might be due to a configuration issue in the export preset or your "
"export settings."
msgstr ""
-"无法为平台 “%s” 导出项目。\n"
+"无法为平台 “%s” 导出项目。\n"
"原因可能是导出预设或导出设置内的配置有问题。"
#: editor/project_export.cpp
@@ -12114,14 +12231,22 @@ msgid "Change Ray Shape Length"
msgstr "修改射线形状长度"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "设置曲线的顶点坐标"
+msgstr "设置房间点位置"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "设置曲线的顶点坐标"
+msgstr "设置入口点位置"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "修改圆柱体半径"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "设置曲线内控点位置"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12241,11 +12366,11 @@ msgstr "导出 GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
-msgstr "下一个平面"
+msgstr "下一平面"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Plane"
-msgstr "上一个平面"
+msgstr "上一平面"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Plane:"
@@ -12257,7 +12382,7 @@ msgstr "下一层"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Floor"
-msgstr "上一个层"
+msgstr "上一层"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Floor:"
@@ -12369,7 +12494,7 @@ msgstr "筛选网格"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
-msgstr "向此 GridMap 提供网格库资源以使用其网格。"
+msgstr "向此 GridMap 提供 MeshLibrary 资源以使用其网格。"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Begin Bake"
@@ -12403,6 +12528,11 @@ msgstr "绘制光照图"
msgid "Class name can't be a reserved keyword"
msgstr "类名不能是保留关键字"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "填充选中项"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "内部异常堆栈追朔结束"
@@ -12873,130 +13003,130 @@ msgstr "搜索可视化脚本节点"
msgid "Get %s"
msgstr "获取 %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "包名缺失。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "包段的长度必须为非零。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Android 应用程序包名称中不允许使用字符 “%s”。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "包段中的第一个字符不能是数字。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "包段中的第一个字符不能是 “%s”。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "包必须至少有一个 “.” 分隔符。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "从列表中选择设备"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr "正运行于 %d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
msgstr "正在导出 APK……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Uninstalling..."
msgstr "正在卸载……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Installing to device, please wait..."
msgstr "正在安装到设备,请稍候……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "无法安装到设备:%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
msgstr "正在设备上运行……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
msgstr "无法在设备上运行。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "找不到“apksigner”工具。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr "未在项目中安装 Android 构建模板。从项目菜单安装它。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr "Debug Keystore、Debug User、Debug Password 必须全部填写或者全部留空。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "未在编辑器设置或预设中配置调试密钥库。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
"Release Keystore、Release User、Release Password 必须全部填写或者全部留空。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "用于发布的密钥存储在导出预设中未被正确设置。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "编辑器设置中需要有效的Android SDK路径。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "编辑器设置中的Android SDK路径无效。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "缺失“platform-tools”目录!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "找不到Android SDK平台工具的adb命令。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "请签入编辑器设置中指定的Android SDK目录。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "缺失“build-tools”目录!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "找不到Android SDK生成工具的apksigner命令。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "APK 扩展的公钥无效。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "无效的包名称:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13004,32 +13134,20 @@ msgstr ""
"“android/modules” 项目设置(变更于Godot 3.2.2)中包含了无效模组 "
"“GodotPaymentV3”。\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "必须启用 “使用自定义构建” 才能使用插件。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr "“Hand Tracking” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr "“Export AAB” 只有在当启用 “Use Custom Build” 时才有效。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13040,58 +13158,58 @@ msgstr ""
"请检查 Android SDK 的 build-tools 目录中是否有此命令。\n"
"生成的 %s 未签名。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr "正在签名调试 %s……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
msgstr "正在签名发布 %s……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
msgstr "找不到密钥库,无法导出。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "“apksigner”返回错误 #%d"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
msgstr "正在校验 %s……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "“apksigner”校验 %s 失败。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
msgstr "正在为 Android 导出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "无效文件名!Android App Bundle 必须有 *.aab 扩展。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion 与 Android App Bundle 不兼容。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "无效文件名!Android APK 必须有 *.apk 扩展。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr "不支持的导出格式!\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
"尝试从自定义构建的模板构建,但是不存在其版本信息。请从“项目”菜单中重新安装。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13103,24 +13221,24 @@ msgstr ""
" Godot 版本:%s\n"
"请从“项目”菜单中重新安装 Android 构建模板。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr "无法使用项目名称覆盖 res://android/build/res/*.xml 文件"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr "无法将项目文件导出至 gradle 项目\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
msgstr "无法写入扩展包文件!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "构建 Android 项目 (Gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13128,25 +13246,25 @@ msgstr ""
"Android 项目构建失败,请检查输出中显示的错误。\n"
"也可以访问 docs.godotengine.org 查看 Android 构建文档。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "移动输出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr "无法复制与更名导出文件,请在 Gradle 项目文件夹内确认输出。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
msgstr "包不存在:%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "正在创建 APK……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Could not find template APK to export:\n"
"%s"
@@ -13154,7 +13272,7 @@ msgstr ""
"找不到导出模板 APK:\n"
"%s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13164,19 +13282,19 @@ msgstr ""
"导出模板缺失所选架构的库:%s。\n"
"请使用全部所需的库构建模板,或者在导出预设中取消对缺失架构的选择。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "正在添加文件……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files"
msgstr "无法导出项目文件"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "正在对齐 APK……"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr "无法解压未对齐的临时 APK。"
@@ -13670,6 +13788,14 @@ msgstr ""
"NavigationMeshInstance 类型节点必须作为 Navigation 节点的子节点或子孙节点才能"
"提供导航数据。"
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -13802,36 +13928,44 @@ msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"RoomList 路径无效。\n"
+"请检查 RoomList 分支是否已被指定给 RoomManager。"
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList 中不包含 Room,正在中止。"
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
-msgstr ""
+msgstr "检测到错误命名的节点,详情请检查日志输出。正在中止。"
#: scene/3d/room_manager.cpp
msgid "Portal link room not found, check output log for details."
-msgstr ""
+msgstr "未找到入口所连接的房间,详情请检查日志输出。"
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"入口自动连接失败,详情请检查输出日志。\n"
+"请检查该入口是否朝向其所在房间的外部。"
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"检测到重叠的房间,摄像机在重叠区域可能无法正常工作。\n"
+"详情请检查日志输出。"
#: scene/3d/room_manager.cpp
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"计算房间边界时出错。\n"
+"请确保所有房间都包含几何结构,或者包含手动边界。"
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -13990,6 +14124,14 @@ msgstr "必须使用有效的扩展名。"
msgid "Enable grid minimap."
msgstr "启用网格小地图。"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14040,6 +14182,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Viewport 大小大于 0 时才能进行渲染。"
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14084,12 +14230,45 @@ msgstr "对函数的赋值。"
#: servers/visual/shader_language.cpp
msgid "Assignment to uniform."
-msgstr "对统一的赋值。"
+msgstr "对 Uniform 的赋值。"
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
msgstr "不允许修改常量。"
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "制作放松姿势(从骨骼)"
+
+#~ msgid "Bottom"
+#~ msgstr "底部"
+
+#~ msgid "Left"
+#~ msgstr "左方"
+
+#~ msgid "Right"
+#~ msgstr "右方"
+
+#~ msgid "Front"
+#~ msgstr "前面"
+
+#~ msgid "Rear"
+#~ msgstr "后方"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "无名控制器"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。"
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。"
+
#~ msgid "Package Contents:"
#~ msgstr "包内容:"
@@ -16047,9 +16226,6 @@ msgstr "不允许修改常量。"
#~ msgid "Images:"
#~ msgstr "图片:"
-#~ msgid "Group"
-#~ msgstr "分组"
-
#~ msgid "Sample Conversion Mode: (.wav files):"
#~ msgstr "音效转换方式(.wav文件):"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index e5327f79d9..b9461bffd0 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -1067,7 +1067,7 @@ msgstr ""
msgid "Dependencies"
msgstr ""
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "資源"
@@ -1731,13 +1731,13 @@ msgid ""
"Enabled'."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr ""
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2143,7 +2143,7 @@ msgstr ""
msgid "(Re)Importing Assets"
msgstr "導入中:"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
#, fuzzy
msgid "Top"
msgstr "最頂"
@@ -2646,6 +2646,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "未儲存當前場景。仍要開啟?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "復原"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "重製"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "不能重新載入從未儲存的場景。"
@@ -3328,6 +3354,11 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "動畫變化過渡"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr ""
@@ -3584,6 +3615,10 @@ msgid ""
"property (%s)."
msgstr ""
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr ""
@@ -5809,6 +5844,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "所有選項"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "Groups"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6762,7 +6809,11 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7367,6 +7418,15 @@ msgstr "刪除"
msgid "Flip Portal"
msgstr ""
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "不選"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr ""
@@ -7910,12 +7970,14 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr ""
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "預設"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr ""
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "覆蓋"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7944,6 +8006,61 @@ msgid "Perspective"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "右𨫡"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr ""
@@ -8058,42 +8175,22 @@ msgid "Bottom View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr ""
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr ""
@@ -8367,6 +8464,11 @@ msgid "View Portal Culling"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "插件"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Settings..."
@@ -8433,7 +8535,7 @@ msgid "Post"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
+msgid "Unnamed Gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12639,6 +12741,15 @@ msgstr "只限選中"
msgid "Set Portal Point Position"
msgstr "只限選中"
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "只限選中"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12940,6 +13051,11 @@ msgstr "光照圖生成中"
msgid "Class name can't be a reserved keyword"
msgstr ""
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "所有選項"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr ""
@@ -13442,166 +13558,155 @@ msgstr "貼上"
msgid "Get %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "從列表選取設備"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "匯出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "解除安裝"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "接收 mirrors中, 請稍侯..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "正在運行自定義腳本..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Invalid package name:"
msgstr "無效名稱"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13609,61 +13714,61 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr "正在掃描檔案, 請稍候..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "設定"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "匯出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13671,58 +13776,58 @@ msgid ""
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "時長(秒)。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "連接中..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13730,21 +13835,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "篩選檔案..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "無法新增資料夾"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -14212,6 +14317,14 @@ msgid ""
"It only provides navigation data."
msgstr ""
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14505,6 +14618,14 @@ msgstr "請用有效的副檔名。"
msgid "Enable grid minimap."
msgstr ""
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14546,6 +14667,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "viewport大小必須大於0以渲染任何東西。"
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 4fc48abd03..db1603cc9b 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -1036,7 +1036,7 @@ msgstr ""
msgid "Dependencies"
msgstr "相依性"
-#: editor/dependency_editor.cpp
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
msgstr "資源"
@@ -1695,13 +1695,13 @@ msgstr ""
"目標平台上的 GLES2 回退驅動器功能必須使用「PVRTC」紋理壓縮。\n"
"請在專案設定中啟用「Import Pvrtc」或是禁用「Driver Fallback Enabled」。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom debug template not found."
msgstr "找不到自定義偵錯樣板。"
-#: editor/editor_export.cpp platform/android/export/export.cpp
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
@@ -2081,7 +2081,7 @@ msgstr "由於有多個匯入器對檔案 %s 提供了不同的型別,已中
msgid "(Re)Importing Assets"
msgstr "(重新)匯入素材"
-#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
+#: editor/editor_help.cpp
msgid "Top"
msgstr "頂端"
@@ -2577,6 +2577,32 @@ msgid "Current scene not saved. Open anyway?"
msgstr "尚未保存目前場景。仍然要開啟嗎?"
#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Undo: %s"
+msgstr "復原"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Redo: %s"
+msgstr "取消復原"
+
+#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr "無法重新載入從未保存過的場景。"
@@ -3238,6 +3264,11 @@ msgid "Merge With Existing"
msgstr "與現有的合併"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Apply MeshInstance Transforms"
+msgstr "更改動畫變換"
+
+#: editor/editor_node.cpp
msgid "Open & Run a Script"
msgstr "開啟並執行腳本"
@@ -3490,6 +3521,10 @@ msgid ""
"property (%s)."
msgstr "所選資源(%s)不符合任該屬性(%s)的任何型別。"
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
msgstr "獨立化"
@@ -5592,6 +5627,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)"
msgstr "移動 CanvasItem「%s」至 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Locked"
+msgstr "鎖定所選"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Grouped"
+msgstr "群組"
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
@@ -6530,7 +6577,13 @@ msgid "Remove Selected Item"
msgstr "移除所選項目"
#: editor/plugins/mesh_library_editor_plugin.cpp
-msgid "Import from Scene"
+#, fuzzy
+msgid "Import from Scene (Ignore Transforms)"
+msgstr "自場景匯入"
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+#, fuzzy
+msgid "Import from Scene (Apply Transforms)"
msgstr "自場景匯入"
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7120,6 +7173,16 @@ msgstr "已產生的頂點數量:"
msgid "Flip Portal"
msgstr "水平翻轉"
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Occluder Set Transform"
+msgstr "清除變換"
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+#, fuzzy
+msgid "Center Node"
+msgstr "建立節點"
+
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
msgstr "AnimationTree 未設定至 AnimationPlayer 的路徑"
@@ -7618,12 +7681,14 @@ msgid "Skeleton2D"
msgstr "Sekeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Make Rest Pose (From Bones)"
-msgstr "製作靜止姿勢(自骨骼)"
+#, fuzzy
+msgid "Reset to Rest Pose"
+msgstr "設定骨骼為靜止姿勢"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Bones to Rest Pose"
-msgstr "設定骨骼為靜止姿勢"
+#, fuzzy
+msgid "Overwrite Rest Pose"
+msgstr "複寫"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7650,6 +7715,71 @@ msgid "Perspective"
msgstr "透視"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Top Perspective"
+msgstr "透視"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Bottom Perspective"
+msgstr "透視"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Left Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Perspective"
+msgstr "透視"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Right Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Front Perspective"
+msgstr "透視"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Orthogonal"
+msgstr "正交"
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "Rear Perspective"
+msgstr "透視"
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
msgstr "已中止變換。"
@@ -7768,42 +7898,22 @@ msgid "Bottom View."
msgstr "仰視圖。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Bottom"
-msgstr "底部"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
msgstr "左視圖。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Left"
-msgstr "左"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
msgstr "右視圖。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Right"
-msgstr "右"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
msgstr "前視圖。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Front"
-msgstr "正面"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
msgstr "後視圖。"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Rear"
-msgstr "後"
-
-#: editor/plugins/spatial_editor_plugin.cpp
msgid "Align Transform with View"
msgstr "將變換與視圖對齊"
@@ -8076,6 +8186,11 @@ msgid "View Portal Culling"
msgstr "檢視區設定"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
+msgid "View Occlusion Culling"
+msgstr "檢視區設定"
+
+#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Settings..."
msgstr "設定..."
@@ -8141,8 +8256,9 @@ msgid "Post"
msgstr "後置"
#: editor/plugins/spatial_editor_plugin.cpp
-msgid "Nameless gizmo"
-msgstr "未命名的 Gizmo"
+#, fuzzy
+msgid "Unnamed Gizmo"
+msgstr "未命名專案"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -12252,6 +12368,16 @@ msgstr "設定曲線控制點位置"
msgid "Set Portal Point Position"
msgstr "設定曲線控制點位置"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Radius"
+msgstr "更改圓柱形半徑"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Sphere Position"
+msgstr "設定曲線內控制點位置"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "更改圓柱體半徑"
@@ -12535,6 +12661,11 @@ msgstr "正在繪製光照"
msgid "Class name can't be a reserved keyword"
msgstr "類別名稱不能為保留關鍵字"
+#: modules/mono/csharp_script.cpp
+#, fuzzy
+msgid "Build Solution"
+msgstr "填充所選"
+
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
msgstr "內部異常堆疊回溯結束"
@@ -13007,135 +13138,135 @@ msgstr "搜尋視覺腳本 (VisualScript)"
msgid "Get %s"
msgstr "取得 %s"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
msgstr "缺少套件名稱。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
msgstr "套件片段 (Segment) 的長度不可為 0。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr "Android 應用程式套件名稱不可使用字元「%s」。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
msgstr "套件片段 (Segment) 的第一個字元不可為數字。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
msgstr "套件片段 (Segment) 的第一個字元不可為「%s」。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
msgstr "套件必須至少有一個「.」分隔字元。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
msgstr "自清單中選擇裝置"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
msgstr "全部匯出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Uninstalling..."
msgstr "取消安裝"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Installing to device, please wait..."
msgstr "載入中,請稍後..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
msgstr "無法啟動子處理程序!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Running on device..."
msgstr "正在執行自定腳本..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not execute on device."
msgstr "無法新增資料夾。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
msgstr "找不到「apksigner」工具。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr "尚未於專案中安裝 Android 建置樣板。請先於專案目錄中進行安裝。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr "尚未於編輯器設定或預設設定中設定金鑰儲存區 (Keystore)。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr "發行金鑰儲存區中不正確之組態設定至匯出預設設定。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "A valid Android SDK path is required in Editor Settings."
msgstr "必須於 [編輯器設定] 中提供一個有效的 Android SDK 路徑。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
msgstr "[編輯器設定] 中所指定的 Android SDK 路徑無效。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
msgstr "缺少「platform-tools」資料夾!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK platform-tools' adb command."
msgstr "找不到 Android SDK platform-tools 的 adb 指令。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Please check in the Android SDK directory specified in Editor Settings."
msgstr "請檢查 [編輯器設定] 中所指定的 Android SDK 資料夾。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
msgstr "缺少「build-tools」資料夾!"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
msgstr "找不到 Android SDK build-tools 的 apksigner 指令。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid public key for APK expansion."
msgstr "無效的 APK Expansion 公鑰。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid package name:"
msgstr "無效的套件名稱:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
@@ -13143,37 +13274,22 @@ msgstr ""
"「andoird/modules」專案設定中包含了無效的「GodotPaymentV3」模組(更改於 "
"Godot 3.2.2)。\n"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr "「使用自定建置」必須啟用以使用本外掛。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
-"\"."
-msgstr ""
-"「Degrees Of Freedom」(自由角度)僅可在「Xr Mode」(XR 模式)設為「Oculus "
-"Mobile VR」時可用。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
"「Hand Tracking」(手部追蹤)僅可在「Xr Mode」(XR 模式)設為「Oculus Mobile "
"VR」時可用。"
-#: platform/android/export/export.cpp
-msgid ""
-"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr ""
-"「Focus Awareness」(提高關注度)僅可在「Xr Mode」(XR 模式)設為「Oculus "
-"Mobile VR」時可用。"
-
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr "「Export AAB」僅於「Use Custom Build」啟用時可用。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"'apksigner' could not be found.\n"
"Please check the command is available in the Android SDK build-tools "
@@ -13181,64 +13297,64 @@ msgid ""
"The resulting %s is unsigned."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Signing release %s..."
msgstr ""
"正在掃描檔案,\n"
"請稍後..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
msgstr "無法開啟樣板以輸出:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
msgstr "正在新增 %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting for Android"
msgstr "全部匯出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr "無效的檔案名稱!Android App Bundle 必須要有 *.aab 副檔名。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr "APK Expansion 與 Android App Bundle 不相容。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "無效的檔案名稱!Android APK 必須要有 *.apk 副檔名。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
"嘗試自自定建置樣板進行建置,但無版本資訊可用。請自「專案」選單中重新安裝。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Android build version mismatch:\n"
" Template installed: %s\n"
@@ -13250,26 +13366,26 @@ msgstr ""
" Godot 版本:%s\n"
"請自「專案」目錄中重新安裝 Android 建置樣板。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files to gradle project\n"
msgstr "無法在專案路徑中編輯 project.godot。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
msgstr "無法寫入檔案:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
msgstr "建置 Android 專案(Gradle)"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
@@ -13277,34 +13393,34 @@ msgstr ""
"建置 Android 專案失敗,請檢查輸出以確認錯誤。\n"
"也可以瀏覽 docs.godotengine.org 以瀏覽 Android 建置說明文件。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Moving output"
msgstr "移動輸出"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr "無法複製並更名匯出的檔案,請於 Gradle 專案資料夾內確認輸出。"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Package not found: %s"
msgstr "未找到動畫:「%s」"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Creating APK..."
msgstr "正在建立輪廓..."
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
msgstr "無法開啟樣板以輸出:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid ""
"Missing libraries in the export template for the selected architectures: "
"%s.\n"
@@ -13312,21 +13428,21 @@ msgid ""
"architectures in the export preset."
msgstr ""
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Adding files..."
msgstr "正在新增 %s…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
msgstr "無法寫入檔案:"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
msgstr "正在對齊 APK…"
-#: platform/android/export/export.cpp
+#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
msgstr ""
@@ -13822,6 +13938,14 @@ msgstr ""
"NavigationMeshInstance 必須為 Navigation 節點的子節點或次級子節點。其僅提供導"
"航資料。"
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
@@ -14139,6 +14263,14 @@ msgstr "必須使用有效的副檔名。"
msgid "Enable grid minimap."
msgstr "啟用網格迷你地圖。"
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
#: scene/gui/popup.cpp
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
@@ -14189,6 +14321,10 @@ msgstr ""
msgid "Viewport size must be greater than 0 to render anything."
msgstr "Viewport 大小必須大於 0 才可進行算繪。"
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
@@ -14240,6 +14376,41 @@ msgstr "指派至均勻。"
msgid "Constants cannot be modified."
msgstr "不可修改常數。"
+#~ msgid "Make Rest Pose (From Bones)"
+#~ msgstr "製作靜止姿勢(自骨骼)"
+
+#~ msgid "Bottom"
+#~ msgstr "底部"
+
+#~ msgid "Left"
+#~ msgstr "左"
+
+#~ msgid "Right"
+#~ msgstr "右"
+
+#~ msgid "Front"
+#~ msgstr "正面"
+
+#~ msgid "Rear"
+#~ msgstr "後"
+
+#~ msgid "Nameless gizmo"
+#~ msgstr "未命名的 Gizmo"
+
+#~ msgid ""
+#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile "
+#~ "VR\"."
+#~ msgstr ""
+#~ "「Degrees Of Freedom」(自由角度)僅可在「Xr Mode」(XR 模式)設為"
+#~ "「Oculus Mobile VR」時可用。"
+
+#~ msgid ""
+#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
+#~ "\"."
+#~ msgstr ""
+#~ "「Focus Awareness」(提高關注度)僅可在「Xr Mode」(XR 模式)設為「Oculus "
+#~ "Mobile VR」時可用。"
+
#~ msgid "Package Contents:"
#~ msgstr "套件內容:"
diff --git a/main/main.cpp b/main/main.cpp
index 5513e571d6..fc24010e7b 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -455,10 +455,10 @@ void Main::test_cleanup() {
ResourceLoader::remove_custom_loaders();
ResourceSaver::remove_custom_savers();
+ unregister_driver_types();
#ifdef TOOLS_ENABLED
EditorNode::unregister_editor_types();
#endif
- unregister_driver_types();
unregister_module_types();
unregister_platform_apis();
unregister_scene_types();
@@ -1090,7 +1090,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
editor = false;
#else
const String error_msg = "Error: Couldn't load project data at path \"" + project_path + "\". Is the .pck file missing?\nIf you've renamed the executable, the associated .pck file should also be renamed to match the executable's name (without the extension).\n";
- OS::get_singleton()->print("%s", error_msg.ascii().get_data());
+ OS::get_singleton()->print("%s", error_msg.utf8().get_data());
OS::get_singleton()->alert(error_msg);
goto error;
@@ -1184,7 +1184,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
#ifdef TOOLS_ENABLED
if (!editor && !project_manager) {
#endif
- OS::get_singleton()->print("Error: Can't run project: no main scene defined.\n");
+ const String error_msg = "Error: Can't run project: no main scene defined in the project.\n";
+ OS::get_singleton()->print("%s", error_msg.utf8().get_data());
+ OS::get_singleton()->alert(error_msg);
goto error;
#ifdef TOOLS_ENABLED
}
diff --git a/misc/dist/document_icons/shader.svg b/misc/dist/document_icons/shader.svg
new file mode 100644
index 0000000000..30515cde3d
--- /dev/null
+++ b/misc/dist/document_icons/shader.svg
@@ -0,0 +1 @@
+<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16px;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="249.582" y="878.644"><tspan font-size="112" x="249.582" y="878.644">SHADER</tspan></text><path d="M640.44 348.066c-10.54 0-21.102 4.097-29.145 12.276l-35.64 36.254-47.725 48.529h-.004l-47.676 48.53-33.98 34.546 13.744 13.98h89.002l47.675-48.529 47.723-48.527h.006l25.12-25.543c6.375-6.486 10.147-14.571 11.468-22.986h-.002c2.01-12.81-1.762-26.38-11.469-36.254-8.042-8.18-18.558-12.276-29.098-12.276zM460.013 542.184l44.502 45.257 44.5-45.257h-89.002zm-46.848 13.834c-9.932.124-18.509 4.228-24.668 11.236-5.21 5.927-8.55 14.024-9.668 23.459-.254 2.153-.52 4.295-.52 6.588 0 33.842-55.28 6.971-28.53 41.94h117.626c6.64-15.57 5.836-33.447-2.13-48.528h-.003c-2.48-4.695-5.392-9.213-9.289-13.176-13.348-13.578-26.713-20.143-38.48-21.326h-.002a38.536 38.536 0 0 0-4.336-.193zm-63.387 83.224c4.467 5.84 10.605 12.952 20.33 22.844 21.446 21.814 64.428 16.264 85.875-5.547 5.035-5.12 8.751-11.034 11.422-17.297H349.78z" style="fill:#478cbf;fill-opacity:1"/></svg>
diff --git a/misc/dist/document_icons/shader_extra_small.svg b/misc/dist/document_icons/shader_extra_small.svg
new file mode 100644
index 0000000000..b9c9cd4811
--- /dev/null
+++ b/misc/dist/document_icons/shader_extra_small.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M10.77 5.465a.88.88 0 0 0-.627.264l-.77.78-1.03 1.048-1.027 1.047-.734.744.299.3h1.918l1.027-1.044 1.03-1.047.54-.551a.902.902 0 0 0 .249-.496.91.91 0 0 0-.249-.781.877.877 0 0 0-.626-.264zM8.799 9.648 6.88 9.65l.959.975.959-.977zm-2.975.301a.715.715 0 0 0-.486.24.922.922 0 0 0-.21.506h.003c-.006.046-.014.093-.014.143 0 .73-1.19.15-.613.904.096.126.227.28.437.492.462.47 1.39.351 1.852-.119a1.21 1.21 0 0 0 .246-.373 1.22 1.22 0 0 0-.047-1.047 1.19 1.19 0 0 0-.199-.283c-.288-.293-.576-.436-.83-.46a.715.715 0 0 0-.139-.003z" style="fill:#478cbf;fill-opacity:1"/></svg>
diff --git a/misc/dist/document_icons/shader_small.svg b/misc/dist/document_icons/shader_small.svg
new file mode 100644
index 0000000000..e20bca9fdf
--- /dev/null
+++ b/misc/dist/document_icons/shader_small.svg
@@ -0,0 +1 @@
+<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M21.295 11.242c-.434 0-.871.17-1.201.506l-1.471 1.494-1.965 2h-.002l-1.963 2-1.4 1.426.566.574 1.834 1.867 1.834-1.867 1.963-2 1.967-2 1.037-1.05a1.73 1.73 0 0 0 .473-.95 1.74 1.74 0 0 0-.475-1.494 1.676 1.676 0 0 0-1.197-.506zm-9.453 8.572a1.367 1.367 0 0 0-.932.463c-.215.244-.35.577-.396.965-.01.09-.024.179-.024.274 0 1.395-2.277.285-1.174 1.726.184.241.436.536.836.944.884.899 2.657.668 3.541-.23.207-.21.36-.455.47-.714a2.33 2.33 0 0 0-.089-2 2.273 2.273 0 0 0-.383-.543c-.55-.56-1.099-.829-1.584-.877a1.367 1.367 0 0 0-.265-.008z" style="fill:#478cbf;fill-opacity:1"/></svg>
diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist
index 8e70d4c203..923bc7312a 100644
--- a/misc/dist/osx_tools.app/Contents/Info.plist
+++ b/misc/dist/osx_tools.app/Contents/Info.plist
@@ -84,7 +84,7 @@
<key>UTTypeReferenceURL</key>
<string></string>
<key>UTTypeDescription</key>
- <string>Godot Scene</string>
+ <string>Godot Engine scene</string>
<key>UTTypeIconFile</key>
<string>Scene.icns</string>
<key>UTTypeConformsTo</key>
@@ -97,6 +97,7 @@
<array>
<string>scn</string>
<string>tscn</string>
+ <string>escn</string>
</array>
<key>public.mime-type</key>
<string>application/x-godot-scene</string>
@@ -108,7 +109,7 @@
<key>UTTypeReferenceURL</key>
<string></string>
<key>UTTypeDescription</key>
- <string>Godot Script</string>
+ <string>GDScript script</string>
<key>UTTypeIconFile</key>
<string>GDScript.icns</string>
<key>UTTypeConformsTo</key>
@@ -122,7 +123,7 @@
<string>gd</string>
</array>
<key>public.mime-type</key>
- <string>text/x-gdscript</string>
+ <string>application/x-gdscript</string>
</dict>
</dict>
<dict>
@@ -131,7 +132,7 @@
<key>UTTypeReferenceURL</key>
<string></string>
<key>UTTypeDescription</key>
- <string>Godot Resource</string>
+ <string>Godot Engine resource</string>
<key>UTTypeIconFile</key>
<string>Resource.icns</string>
<key>UTTypeConformsTo</key>
@@ -151,11 +152,34 @@
</dict>
<dict>
<key>UTTypeIdentifier</key>
+ <string>public.gdshader</string>
+ <key>UTTypeReferenceURL</key>
+ <string></string>
+ <key>UTTypeDescription</key>
+ <string>Godot Engine shader</string>
+ <key>UTTypeIconFile</key>
+ <string>Shader.icns</string>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.script</string>
+ </array>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>public.filename-extension</key>
+ <array>
+ <string>gdshader</string>
+ </array>
+ <key>public.mime-type</key>
+ <string>application/x-godot-shader</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>UTTypeIdentifier</key>
<string>public.godot</string>
<key>UTTypeReferenceURL</key>
<string></string>
<key>UTTypeDescription</key>
- <string>Godot Project</string>
+ <string>Godot Engine project</string>
<key>UTTypeIconFile</key>
<string>Project.icns</string>
<key>UTTypeConformsTo</key>
@@ -169,7 +193,7 @@
<string>godot</string>
</array>
<key>public.mime-type</key>
- <string>text/x-godot-project</string>
+ <string>application/x-godot-project</string>
</dict>
</dict>
</array>
diff --git a/misc/dist/osx_tools.app/Contents/Resources/Shader.icns b/misc/dist/osx_tools.app/Contents/Resources/Shader.icns
new file mode 100644
index 0000000000..a76e648a1a
--- /dev/null
+++ b/misc/dist/osx_tools.app/Contents/Resources/Shader.icns
Binary files differ
diff --git a/modules/csg/doc_classes/CSGBox3D.xml b/modules/csg/doc_classes/CSGBox3D.xml
index 5bb1c4e75b..d64e58ae4d 100644
--- a/modules/csg/doc_classes/CSGBox3D.xml
+++ b/modules/csg/doc_classes/CSGBox3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="material" type="Material" setter="set_material" getter="get_material">
The material used to render the box.
@@ -18,6 +16,4 @@
The box's width, height and depth.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGCombiner3D.xml b/modules/csg/doc_classes/CSGCombiner3D.xml
index b55111eee4..422c5d35b7 100644
--- a/modules/csg/doc_classes/CSGCombiner3D.xml
+++ b/modules/csg/doc_classes/CSGCombiner3D.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGCylinder3D.xml b/modules/csg/doc_classes/CSGCylinder3D.xml
index bfd2a5d5f2..40e989bfb3 100644
--- a/modules/csg/doc_classes/CSGCylinder3D.xml
+++ b/modules/csg/doc_classes/CSGCylinder3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="cone" type="bool" setter="set_cone" getter="is_cone" default="false">
If [code]true[/code] a cone is created, the [member radius] will only apply to one side.
@@ -30,6 +28,4 @@
If [code]true[/code] the normals of the cylinder are set to give a smooth effect making the cylinder seem rounded. If [code]false[/code] the cylinder will have a flat shaded look.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGMesh3D.xml b/modules/csg/doc_classes/CSGMesh3D.xml
index 5fa8427843..2810343139 100644
--- a/modules/csg/doc_classes/CSGMesh3D.xml
+++ b/modules/csg/doc_classes/CSGMesh3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="material" type="Material" setter="set_material" getter="get_material">
The [Material] used in drawing the CSG shape.
@@ -19,6 +17,4 @@
[b]Note:[/b] When using an [ArrayMesh], avoid meshes with vertex normals unless a flat shader is required. By default, CSGMesh will ignore the mesh's vertex normals and use a smooth shader calculated using the faces' normals. If a flat shader is required, ensure that all faces' vertex normals are parallel.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGPolygon3D.xml b/modules/csg/doc_classes/CSGPolygon3D.xml
index 5309cde956..5d56e56de9 100644
--- a/modules/csg/doc_classes/CSGPolygon3D.xml
+++ b/modules/csg/doc_classes/CSGPolygon3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0">
When [member mode] is [constant MODE_DEPTH], the depth of the extrusion.
diff --git a/modules/csg/doc_classes/CSGPrimitive3D.xml b/modules/csg/doc_classes/CSGPrimitive3D.xml
index 31b7360fac..8f4c8b9451 100644
--- a/modules/csg/doc_classes/CSGPrimitive3D.xml
+++ b/modules/csg/doc_classes/CSGPrimitive3D.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="invert_faces" type="bool" setter="set_invert_faces" getter="is_inverting_faces" default="false">
Invert the faces of the mesh.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGSphere3D.xml b/modules/csg/doc_classes/CSGSphere3D.xml
index 4d5b3be099..b8dfb4cf5f 100644
--- a/modules/csg/doc_classes/CSGSphere3D.xml
+++ b/modules/csg/doc_classes/CSGSphere3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="material" type="Material" setter="set_material" getter="get_material">
The material used to render the sphere.
@@ -27,6 +25,4 @@
If [code]true[/code] the normals of the sphere are set to give a smooth effect making the sphere seem rounded. If [code]false[/code] the sphere will have a flat shaded look.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/csg/doc_classes/CSGTorus3D.xml b/modules/csg/doc_classes/CSGTorus3D.xml
index abe3eab913..91ee63a4c9 100644
--- a/modules/csg/doc_classes/CSGTorus3D.xml
+++ b/modules/csg/doc_classes/CSGTorus3D.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="inner_radius" type="float" setter="set_inner_radius" getter="get_inner_radius" default="2.0">
The inner radius of the torus.
@@ -30,6 +28,4 @@
If [code]true[/code] the normals of the torus are set to give a smooth effect making the torus seem rounded. If [code]false[/code] the torus will have a flat shaded look.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/enet/doc_classes/ENetMultiplayerPeer.xml b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
index 43e1d40e47..456b390dbb 100644
--- a/modules/enet/doc_classes/ENetMultiplayerPeer.xml
+++ b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
@@ -83,6 +83,4 @@
</member>
<member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="TransferMode" default="2" />
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/fbx/doc_classes/EditorSceneImporterFBX.xml b/modules/fbx/doc_classes/EditorSceneImporterFBX.xml
index da1a68c27c..6f83871772 100644
--- a/modules/fbx/doc_classes/EditorSceneImporterFBX.xml
+++ b/modules/fbx/doc_classes/EditorSceneImporterFBX.xml
@@ -29,8 +29,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/GDNative.xml b/modules/gdnative/doc_classes/GDNative.xml
index e4c5d34a2c..4bc149b119 100644
--- a/modules/gdnative/doc_classes/GDNative.xml
+++ b/modules/gdnative/doc_classes/GDNative.xml
@@ -30,6 +30,4 @@
<member name="library" type="GDNativeLibrary" setter="set_library" getter="get_library">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml
index 94eae3cd06..3654870b09 100644
--- a/modules/gdnative/doc_classes/GDNativeLibrary.xml
+++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml
@@ -45,6 +45,4 @@
On platforms that require statically linking libraries (currently only iOS), each library must have a different [code]symbol_prefix[/code].
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml b/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml
index b88f5e7e1e..40f3121525 100644
--- a/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml
+++ b/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/NativeScript.xml b/modules/gdnative/doc_classes/NativeScript.xml
index 397d12a3a9..9d34e89f02 100644
--- a/modules/gdnative/doc_classes/NativeScript.xml
+++ b/modules/gdnative/doc_classes/NativeScript.xml
@@ -52,6 +52,4 @@
<member name="script_class_name" type="String" setter="set_script_class_name" getter="get_script_class_name" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/PacketPeerGDNative.xml b/modules/gdnative/doc_classes/PacketPeerGDNative.xml
index ea9869cc58..32863f8422 100644
--- a/modules/gdnative/doc_classes/PacketPeerGDNative.xml
+++ b/modules/gdnative/doc_classes/PacketPeerGDNative.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/PluginScript.xml b/modules/gdnative/doc_classes/PluginScript.xml
index 8e28187482..ec80ade394 100644
--- a/modules/gdnative/doc_classes/PluginScript.xml
+++ b/modules/gdnative/doc_classes/PluginScript.xml
@@ -14,6 +14,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/StreamPeerGDNative.xml b/modules/gdnative/doc_classes/StreamPeerGDNative.xml
index de76277fff..a505de2106 100644
--- a/modules/gdnative/doc_classes/StreamPeerGDNative.xml
+++ b/modules/gdnative/doc_classes/StreamPeerGDNative.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/VideoStreamGDNative.xml b/modules/gdnative/doc_classes/VideoStreamGDNative.xml
index 8b1a3210df..dc64e8fc18 100644
--- a/modules/gdnative/doc_classes/VideoStreamGDNative.xml
+++ b/modules/gdnative/doc_classes/VideoStreamGDNative.xml
@@ -24,6 +24,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml b/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml
index f32a4f0a23..ddf354763c 100644
--- a/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml
+++ b/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml b/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml
index 82f8633bb6..821779a0ff 100644
--- a/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml
+++ b/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml
index 72738f027a..d45202bd40 100644
--- a/modules/gdscript/doc_classes/GDScript.xml
+++ b/modules/gdscript/doc_classes/GDScript.xml
@@ -30,6 +30,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp
index ab441d194a..6529154e5c 100644
--- a/modules/gdscript/editor/gdscript_highlighter.cpp
+++ b/modules/gdscript/editor/gdscript_highlighter.cpp
@@ -467,7 +467,7 @@ void GDScriptSyntaxHighlighter::_update_cache() {
List<StringName> global_classes;
ScriptServer::get_global_class_list(&global_classes);
for (const StringName &E : global_classes) {
- keywords[String(E)] = usertype_color;
+ keywords[E] = usertype_color;
}
/* Autoloads. */
@@ -486,7 +486,7 @@ void GDScriptSyntaxHighlighter::_update_cache() {
List<String> core_types;
gdscript->get_core_type_words(&core_types);
for (const String &E : core_types) {
- keywords[E] = basetype_color;
+ keywords[StringName(E)] = basetype_color;
}
/* Reserved words. */
@@ -496,9 +496,9 @@ void GDScriptSyntaxHighlighter::_update_cache() {
gdscript->get_reserved_words(&keyword_list);
for (const String &E : keyword_list) {
if (gdscript->is_control_flow_keyword(E)) {
- keywords[E] = control_flow_keyword_color;
+ keywords[StringName(E)] = control_flow_keyword_color;
} else {
- keywords[E] = keyword_color;
+ keywords[StringName(E)] = keyword_color;
}
}
diff --git a/modules/gdscript/editor/gdscript_highlighter.h b/modules/gdscript/editor/gdscript_highlighter.h
index fabd64dab8..07f21b34ae 100644
--- a/modules/gdscript/editor/gdscript_highlighter.h
+++ b/modules/gdscript/editor/gdscript_highlighter.h
@@ -47,8 +47,8 @@ private:
Vector<ColorRegion> color_regions;
Map<int, int> color_region_cache;
- Dictionary keywords;
- Dictionary member_keywords;
+ HashMap<StringName, Color> keywords;
+ HashMap<StringName, Color> member_keywords;
enum Type {
NONE,
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index ceb6d5a5f0..23e88ae059 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -1754,7 +1754,6 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig
} else {
// TODO: Warning in this case.
mark_node_unsafe(p_assignment);
- p_assignment->use_conversion_assign = true;
}
}
} else {
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index f79e5726ce..2f8a054b2a 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -781,6 +781,9 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class,
if (p_only_functions) {
continue;
}
+ if (r_result.has(member.constant->identifier->name)) {
+ continue;
+ }
option = ScriptCodeCompletionOption(member.constant->identifier->name, ScriptCodeCompletionOption::KIND_CONSTANT);
if (member.constant->initializer) {
option.default_value = member.constant->initializer->reduced_value;
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index c901d9f68f..025accf4ba 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -579,7 +579,7 @@ void GDScriptParser::parse_program() {
}
}
- parse_class_body();
+ parse_class_body(true);
#ifdef TOOLS_ENABLED
for (Map<int, GDScriptTokenizer::CommentData>::Element *E = tokenizer.get_comments().front(); E; E = E->next()) {
@@ -615,9 +615,10 @@ GDScriptParser::ClassNode *GDScriptParser::parse_class() {
}
consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after class declaration.)");
- consume(GDScriptTokenizer::Token::NEWLINE, R"(Expected newline after class declaration.)");
- if (!consume(GDScriptTokenizer::Token::INDENT, R"(Expected indented block after class declaration.)")) {
+ bool multiline = match(GDScriptTokenizer::Token::NEWLINE);
+
+ if (multiline && !consume(GDScriptTokenizer::Token::INDENT, R"(Expected indented block after class declaration.)")) {
current_class = previous_class;
return n_class;
}
@@ -630,9 +631,11 @@ GDScriptParser::ClassNode *GDScriptParser::parse_class() {
end_statement("superclass");
}
- parse_class_body();
+ parse_class_body(multiline);
- consume(GDScriptTokenizer::Token::DEDENT, R"(Missing unindent at the end of the class body.)");
+ if (multiline) {
+ consume(GDScriptTokenizer::Token::DEDENT, R"(Missing unindent at the end of the class body.)");
+ }
current_class = previous_class;
return n_class;
@@ -747,7 +750,7 @@ void GDScriptParser::parse_class_member(T *(GDScriptParser::*p_parse_function)()
}
}
-void GDScriptParser::parse_class_body() {
+void GDScriptParser::parse_class_body(bool p_is_multiline) {
bool class_end = false;
while (!class_end && !is_at_end()) {
switch (current.type) {
@@ -793,6 +796,9 @@ void GDScriptParser::parse_class_body() {
if (panic_mode) {
synchronize();
}
+ if (!p_is_multiline) {
+ class_end = true;
+ }
}
}
@@ -1053,7 +1059,9 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() {
SignalNode *signal = alloc_node<SignalNode>();
signal->identifier = parse_identifier();
- if (match(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
+ if (check(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
+ push_multiline(true);
+ advance();
do {
if (check(GDScriptTokenizer::Token::PARENTHESIS_CLOSE)) {
// Allow for trailing comma.
@@ -1076,6 +1084,7 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() {
}
} while (match(GDScriptTokenizer::Token::COMMA) && !is_at_end());
+ pop_multiline();
consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected closing ")" after signal parameters.)*");
}
@@ -1358,6 +1367,9 @@ GDScriptParser::SuiteNode *GDScriptParser::parse_suite(const String &p_context,
int error_count = 0;
do {
+ if (!multiline && previous.type == GDScriptTokenizer::Token::SEMICOLON && check(GDScriptTokenizer::Token::NEWLINE)) {
+ break;
+ }
Node *statement = parse_statement();
if (statement == nullptr) {
if (error_count++ > 100) {
@@ -1398,7 +1410,7 @@ GDScriptParser::SuiteNode *GDScriptParser::parse_suite(const String &p_context,
break;
}
- } while (multiline && !check(GDScriptTokenizer::Token::DEDENT) && !lambda_ended && !is_at_end());
+ } while ((multiline || previous.type == GDScriptTokenizer::Token::SEMICOLON) && !check(GDScriptTokenizer::Token::DEDENT) && !lambda_ended && !is_at_end());
if (multiline) {
if (!lambda_ended) {
@@ -2810,6 +2822,11 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_lambda(ExpressionNode *p_p
return lambda;
}
+GDScriptParser::ExpressionNode *GDScriptParser::parse_yield(ExpressionNode *p_previous_operand, bool p_can_assign) {
+ push_error(R"("yield" was removed in Godot 4.0. Use "await" instead.)");
+ return nullptr;
+}
+
GDScriptParser::ExpressionNode *GDScriptParser::parse_invalid_token(ExpressionNode *p_previous_operand, bool p_can_assign) {
// Just for better error messages.
GDScriptTokenizer::Token::Type invalid = previous.type;
@@ -3166,7 +3183,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty
{ nullptr, nullptr, PREC_NONE }, // TRAIT,
{ nullptr, nullptr, PREC_NONE }, // VAR,
{ nullptr, nullptr, PREC_NONE }, // VOID,
- { nullptr, nullptr, PREC_NONE }, // YIELD,
+ { &GDScriptParser::parse_yield, nullptr, PREC_NONE }, // YIELD,
// Punctuation
{ &GDScriptParser::parse_array, &GDScriptParser::parse_subscript, PREC_SUBSCRIPT }, // BRACKET_OPEN,
{ nullptr, nullptr, PREC_NONE }, // BRACKET_CLOSE,
diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h
index a641c1052d..593fb0cc5e 100644
--- a/modules/gdscript/gdscript_parser.h
+++ b/modules/gdscript/gdscript_parser.h
@@ -1324,7 +1324,7 @@ private:
ClassNode *parse_class();
void parse_class_name();
void parse_extends();
- void parse_class_body();
+ void parse_class_body(bool p_is_multiline);
template <class T>
void parse_class_member(T *(GDScriptParser::*p_parse_function)(), AnnotationInfo::TargetKind p_target, const String &p_member_kind);
SignalNode *parse_signal();
@@ -1388,6 +1388,7 @@ private:
ExpressionNode *parse_attribute(ExpressionNode *p_previous_operand, bool p_can_assign);
ExpressionNode *parse_subscript(ExpressionNode *p_previous_operand, bool p_can_assign);
ExpressionNode *parse_lambda(ExpressionNode *p_previous_operand, bool p_can_assign);
+ ExpressionNode *parse_yield(ExpressionNode *p_previous_operand, bool p_can_assign);
ExpressionNode *parse_invalid_token(ExpressionNode *p_previous_operand, bool p_can_assign);
TypeNode *parse_type(bool p_allow_void = false);
#ifdef TOOLS_ENABLED
diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp
index c47164d95b..41a2f9e4ad 100644
--- a/modules/gdscript/language_server/gdscript_language_server.cpp
+++ b/modules/gdscript/language_server/gdscript_language_server.cpp
@@ -36,6 +36,7 @@
#include "editor/editor_node.h"
GDScriptLanguageServer::GDScriptLanguageServer() {
+ _EDITOR_DEF("network/language_server/remote_host", host);
_EDITOR_DEF("network/language_server/remote_port", port);
_EDITOR_DEF("network/language_server/enable_smart_resolve", true);
_EDITOR_DEF("network/language_server/show_native_symbols_in_editor", false);
@@ -56,9 +57,10 @@ void GDScriptLanguageServer::_notification(int p_what) {
}
} break;
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ String host = String(_EDITOR_GET("network/language_server/remote_host"));
int port = (int)_EDITOR_GET("network/language_server/remote_port");
bool use_thread = (bool)_EDITOR_GET("network/language_server/use_thread");
- if (port != this->port || use_thread != this->use_thread) {
+ if (host != this->host || port != this->port || use_thread != this->use_thread) {
this->stop();
this->start();
}
@@ -76,9 +78,10 @@ void GDScriptLanguageServer::thread_main(void *p_userdata) {
}
void GDScriptLanguageServer::start() {
+ host = String(_EDITOR_GET("network/language_server/remote_host"));
port = (int)_EDITOR_GET("network/language_server/remote_port");
use_thread = (bool)_EDITOR_GET("network/language_server/use_thread");
- if (protocol.start(port, IPAddress("127.0.0.1")) == OK) {
+ if (protocol.start(port, IPAddress(host)) == OK) {
EditorNode::get_log()->add_message("--- GDScript language server started ---", EditorLog::MSG_TYPE_EDITOR);
if (use_thread) {
thread_running = true;
diff --git a/modules/gdscript/language_server/gdscript_language_server.h b/modules/gdscript/language_server/gdscript_language_server.h
index 29c5ddd70e..85a44a8cc1 100644
--- a/modules/gdscript/language_server/gdscript_language_server.h
+++ b/modules/gdscript/language_server/gdscript_language_server.h
@@ -44,6 +44,7 @@ class GDScriptLanguageServer : public EditorPlugin {
bool thread_running = false;
bool started = false;
bool use_thread = false;
+ String host = "127.0.0.1";
int port = 6008;
static void thread_main(void *p_userdata);
diff --git a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd
index 4502960105..0a4f647f57 100644
--- a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd
+++ b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd
@@ -1,3 +1,3 @@
func test():
# Error here.
- print(2 << 4.4)
+ print(2 >> 4.4)
diff --git a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out
index 1879fc1adf..1edbf47ec0 100644
--- a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out
+++ b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out
@@ -1,2 +1,2 @@
GDTEST_ANALYZER_ERROR
-Invalid operands to operator <<, int and float.
+Invalid operands to operator >>, int and float.
diff --git a/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd
new file mode 100644
index 0000000000..569f95850f
--- /dev/null
+++ b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd
@@ -0,0 +1,2 @@
+func test():
+ print(Color.html_is_valid("00ffff"))
diff --git a/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out
new file mode 100644
index 0000000000..55482c2b52
--- /dev/null
+++ b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+true
diff --git a/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd
new file mode 100644
index 0000000000..ab66537c93
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd
@@ -0,0 +1,3 @@
+func test() {
+ print("Hello world!");
+}
diff --git a/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out
new file mode 100644
index 0000000000..2f37a740ab
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out
@@ -0,0 +1,2 @@
+GDTEST_PARSER_ERROR
+Expected ":" after function declaration.
diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd
new file mode 100644
index 0000000000..3b52f6e324
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd
@@ -0,0 +1,2 @@
+func test():
+ var escape = "invalid escape \h <- here"
diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out
new file mode 100644
index 0000000000..32b4d004db
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out
@@ -0,0 +1,2 @@
+GDTEST_PARSER_ERROR
+Invalid escape in string.
diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd
new file mode 100644
index 0000000000..c835ce15e1
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd
@@ -0,0 +1,5 @@
+func test():
+ var amount = 50
+ # C-style ternary operator is invalid in GDScript.
+ # The valid syntax is `"yes" if amount < 60 else "no"`, like in Python.
+ var ternary = amount < 60 ? "yes" : "no"
diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out
new file mode 100644
index 0000000000..ac82d691b7
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out
@@ -0,0 +1,2 @@
+GDTEST_PARSER_ERROR
+Unexpected "?" in source. If you want a ternary operator, use "truthy_value if true_condition else falsy_value".
diff --git a/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd
new file mode 100644
index 0000000000..8850892f2d
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd
@@ -0,0 +1,13 @@
+# The VCS conflict marker has only 6 `=` signs instead of 7 to prevent editors like
+# Visual Studio Code from recognizing it as an actual VCS conflict marker.
+# Nonetheless, the GDScript parser is still expected to find and report the VCS
+# conflict marker error correctly.
+
+<<<<<<< HEAD
+Hello world
+======
+Goodbye
+>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086
+
+func test():
+ pass
diff --git a/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out
new file mode 100644
index 0000000000..df9dab2223
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out
@@ -0,0 +1,2 @@
+GDTEST_PARSER_ERROR
+Unexpected "VCS conflict marker" in class body.
diff --git a/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd
new file mode 100644
index 0000000000..7862eff6ec
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd
@@ -0,0 +1,6 @@
+#GDTEST_PARSER_ERROR
+
+signal event
+
+func test():
+ yield("event")
diff --git a/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out
new file mode 100644
index 0000000000..36cb699e92
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out
@@ -0,0 +1,2 @@
+GDTEST_PARSER_ERROR
+"yield" was removed in Godot 4.0. Use "await" instead.
diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.gd b/modules/gdscript/tests/scripts/parser/features/export_variable.gd
index 51e7d4a8ed..1e072728fc 100644
--- a/modules/gdscript/tests/scripts/parser/features/export_variable.gd
+++ b/modules/gdscript/tests/scripts/parser/features/export_variable.gd
@@ -3,9 +3,16 @@
@export_range(0, 100, 1) var example_range_step = 101
@export_range(0, 100, 1, "or_greater") var example_range_step_or_greater = 102
+@export var color: Color
+@export_color_no_alpha var color_no_alpha: Color
+@export_node_path(Sprite2D, Sprite3D, Control, Node) var nodepath := ^"hello"
+
func test():
print(example)
print(example_range)
print(example_range_step)
print(example_range_step_or_greater)
+ print(color)
+ print(color_no_alpha)
+ print(nodepath)
diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.out b/modules/gdscript/tests/scripts/parser/features/export_variable.out
index b455196359..bae35e75c6 100644
--- a/modules/gdscript/tests/scripts/parser/features/export_variable.out
+++ b/modules/gdscript/tests/scripts/parser/features/export_variable.out
@@ -3,3 +3,6 @@ GDTEST_OK
100
101
102
+(0, 0, 0, 1)
+(0, 0, 0, 1)
+hello
diff --git a/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd
new file mode 100644
index 0000000000..f5098b00ae
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd
@@ -0,0 +1,5 @@
+func example(_number: int, _number2: int = 5, number3 := 10):
+ return number3
+
+func test():
+ print(example(3))
diff --git a/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out
new file mode 100644
index 0000000000..404cd41fe5
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+10
diff --git a/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd
new file mode 100644
index 0000000000..01edb37cec
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd
@@ -0,0 +1,5 @@
+func example(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48 = false, arg49 = true, arg50 = null):
+ print(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48, arg49, arg50)
+
+func test():
+ example(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47)
diff --git a/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out
new file mode 100644
index 0000000000..3a979227d4
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+123456789101112131415161718192212223242526272829303132333435363738394041424344454647falsetruenull
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd
new file mode 100644
index 0000000000..c3b2506156
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd
@@ -0,0 +1,4 @@
+func test():
+ var my_lambda = func(x):
+ print(x)
+ my_lambda.call("hello")
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_callable.out
new file mode 100644
index 0000000000..58774d2d3f
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_callable.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+hello
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd
new file mode 100644
index 0000000000..f081a0b6a7
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd
@@ -0,0 +1,4 @@
+func test():
+ var x = 42
+ var my_lambda = func(): print(x)
+ my_lambda.call() # Prints "42".
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out
new file mode 100644
index 0000000000..0982f3718c
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+42
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd
new file mode 100644
index 0000000000..7971ca72a6
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd
@@ -0,0 +1,10 @@
+func i_take_lambda(lambda: Callable, param: String):
+ lambda.call(param)
+
+
+func test():
+ var my_lambda := func this_is_lambda(x):
+ print("Hello")
+ print("This is %s" % x)
+
+ i_take_lambda(my_lambda, "a lambda")
diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out
new file mode 100644
index 0000000000..c627187d82
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out
@@ -0,0 +1,3 @@
+GDTEST_OK
+Hello
+This is a lambda
diff --git a/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd
new file mode 100644
index 0000000000..59cdc7d6c2
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd
@@ -0,0 +1,5 @@
+func foo(x):
+ return x + 1
+
+func test():
+ print(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(0)))))))))))))))))))))))))
diff --git a/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out
new file mode 100644
index 0000000000..28a6636a7b
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+24
diff --git a/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd
new file mode 100644
index 0000000000..0f4aebb459
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd
@@ -0,0 +1,22 @@
+#GDTEST_OK
+
+func test():
+ a();
+ b();
+ c();
+ d();
+ e();
+
+func a(): print("a");
+
+func b(): print("b1"); print("b2")
+
+func c(): print("c1"); print("c2");
+
+func d():
+ print("d1");
+ print("d2")
+
+func e():
+ print("e1");
+ print("e2");
diff --git a/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out
new file mode 100644
index 0000000000..387cbd8fc2
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out
@@ -0,0 +1,10 @@
+GDTEST_OK
+a
+b1
+b2
+c1
+c2
+d1
+d2
+e1
+e2
diff --git a/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd b/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd
new file mode 100644
index 0000000000..9ad98b78a8
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd
@@ -0,0 +1,20 @@
+#GDTEST_OK
+
+# No parentheses.
+signal a
+
+# No parameters.
+signal b()
+
+# With paramters.
+signal c(a, b, c)
+
+# With parameters multiline.
+signal d(
+ a,
+ b,
+ c,
+)
+
+func test():
+ print("Ok")
diff --git a/modules/gdscript/tests/scripts/parser/features/signal_declaration.out b/modules/gdscript/tests/scripts/parser/features/signal_declaration.out
new file mode 100644
index 0000000000..0e9f482af4
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/signal_declaration.out
@@ -0,0 +1,2 @@
+GDTEST_OK
+Ok
diff --git a/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd
new file mode 100644
index 0000000000..650500663b
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd
@@ -0,0 +1,11 @@
+#GDTEST_OK
+
+func test(): C.new().test("Ok"); test2()
+
+func test2(): print("Ok 2")
+
+class A: pass
+
+class B extends RefCounted: pass
+
+class C extends RefCounted: func test(x): print(x)
diff --git a/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out
new file mode 100644
index 0000000000..e021923dc2
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out
@@ -0,0 +1,3 @@
+GDTEST_OK
+Ok
+Ok 2
diff --git a/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd b/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd
new file mode 100644
index 0000000000..21bf3fdfcf
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd
@@ -0,0 +1,5 @@
+func test():
+ var my_array: Array[int] = [1, 2, 3]
+ var inferred_array := [1, 2, 3] # This is Array[int].
+ print(my_array)
+ print(inferred_array)
diff --git a/modules/gdscript/tests/scripts/parser/features/typed_arrays.out b/modules/gdscript/tests/scripts/parser/features/typed_arrays.out
new file mode 100644
index 0000000000..953d54d5e0
--- /dev/null
+++ b/modules/gdscript/tests/scripts/parser/features/typed_arrays.out
@@ -0,0 +1,3 @@
+GDTEST_OK
+[1, 2, 3]
+[1, 2, 3]
diff --git a/modules/gdscript/tests/scripts/runtime/features/recursion.gd b/modules/gdscript/tests/scripts/runtime/features/recursion.gd
new file mode 100644
index 0000000000..a35485022e
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/recursion.gd
@@ -0,0 +1,19 @@
+func is_prime(number: int, divisor: int = 2) -> bool:
+ print(divisor)
+ if number <= 2:
+ return (number == 2)
+ elif number % divisor == 0:
+ return false
+ elif divisor * divisor > number:
+ return true
+
+ return is_prime(number, divisor + 1)
+
+func test():
+ # Not a prime number.
+ print(is_prime(989))
+
+ print()
+
+ # Largest prime number below 10000.
+ print(is_prime(9973))
diff --git a/modules/gdscript/tests/scripts/runtime/features/recursion.out b/modules/gdscript/tests/scripts/runtime/features/recursion.out
new file mode 100644
index 0000000000..2bd8f24988
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/recursion.out
@@ -0,0 +1,125 @@
+GDTEST_OK
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+false
+
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+true
diff --git a/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml b/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml
index e717b30f73..c85fce7b9d 100644
--- a/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml
+++ b/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFAccessor.xml b/modules/gltf/doc_classes/GLTFAccessor.xml
index 41a318ce19..ae81cae81a 100644
--- a/modules/gltf/doc_classes/GLTFAccessor.xml
+++ b/modules/gltf/doc_classes/GLTFAccessor.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="buffer_view" type="int" setter="set_buffer_view" getter="get_buffer_view" default="0">
</member>
@@ -38,6 +36,4 @@
<member name="type" type="int" setter="set_type" getter="get_type" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFAnimation.xml b/modules/gltf/doc_classes/GLTFAnimation.xml
index 5c1fa02f11..70480c2b38 100644
--- a/modules/gltf/doc_classes/GLTFAnimation.xml
+++ b/modules/gltf/doc_classes/GLTFAnimation.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="loop" type="bool" setter="set_loop" getter="get_loop" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFBufferView.xml b/modules/gltf/doc_classes/GLTFBufferView.xml
index edaad85e0a..f58aa46508 100644
--- a/modules/gltf/doc_classes/GLTFBufferView.xml
+++ b/modules/gltf/doc_classes/GLTFBufferView.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="buffer" type="int" setter="set_buffer" getter="get_buffer" default="-1">
</member>
@@ -20,6 +18,4 @@
<member name="indices" type="bool" setter="set_indices" getter="get_indices" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFCamera.xml b/modules/gltf/doc_classes/GLTFCamera.xml
index ec25d84756..3682df5951 100644
--- a/modules/gltf/doc_classes/GLTFCamera.xml
+++ b/modules/gltf/doc_classes/GLTFCamera.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="depth_far" type="float" setter="set_depth_far" getter="get_depth_far" default="4000.0">
</member>
@@ -18,6 +16,4 @@
<member name="perspective" type="bool" setter="set_perspective" getter="get_perspective" default="true">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFDocument.xml b/modules/gltf/doc_classes/GLTFDocument.xml
index f8e0007684..16e649f390 100644
--- a/modules/gltf/doc_classes/GLTFDocument.xml
+++ b/modules/gltf/doc_classes/GLTFDocument.xml
@@ -30,6 +30,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFLight.xml b/modules/gltf/doc_classes/GLTFLight.xml
index 2eb5ee9070..91df7d8014 100644
--- a/modules/gltf/doc_classes/GLTFLight.xml
+++ b/modules/gltf/doc_classes/GLTFLight.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)">
</member>
@@ -22,6 +20,4 @@
<member name="range" type="float" setter="set_range" getter="get_range" default="0.0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFMesh.xml b/modules/gltf/doc_classes/GLTFMesh.xml
index fd7e4a169e..51e9fc032a 100644
--- a/modules/gltf/doc_classes/GLTFMesh.xml
+++ b/modules/gltf/doc_classes/GLTFMesh.xml
@@ -6,14 +6,10 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="blend_weights" type="PackedFloat32Array" setter="set_blend_weights" getter="get_blend_weights" default="PackedFloat32Array()">
</member>
<member name="mesh" type="EditorSceneImporterMesh" setter="set_mesh" getter="get_mesh">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFNode.xml b/modules/gltf/doc_classes/GLTFNode.xml
index 95d7283398..f27965ea07 100644
--- a/modules/gltf/doc_classes/GLTFNode.xml
+++ b/modules/gltf/doc_classes/GLTFNode.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="camera" type="int" setter="set_camera" getter="get_camera" default="-1">
</member>
@@ -36,6 +34,4 @@
<member name="xform" type="Transform3D" setter="set_xform" getter="get_xform" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFSkeleton.xml b/modules/gltf/doc_classes/GLTFSkeleton.xml
index 6e83cec252..037c3545a6 100644
--- a/modules/gltf/doc_classes/GLTFSkeleton.xml
+++ b/modules/gltf/doc_classes/GLTFSkeleton.xml
@@ -52,6 +52,4 @@
<member name="roots" type="PackedInt32Array" setter="set_roots" getter="get_roots" default="PackedInt32Array()">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFSkin.xml b/modules/gltf/doc_classes/GLTFSkin.xml
index 107ca960cd..ad4f017584 100644
--- a/modules/gltf/doc_classes/GLTFSkin.xml
+++ b/modules/gltf/doc_classes/GLTFSkin.xml
@@ -57,6 +57,4 @@
<member name="skin_root" type="int" setter="set_skin_root" getter="get_skin_root" default="-1">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFSpecGloss.xml b/modules/gltf/doc_classes/GLTFSpecGloss.xml
index 6e9c419649..6b8f86ed1c 100644
--- a/modules/gltf/doc_classes/GLTFSpecGloss.xml
+++ b/modules/gltf/doc_classes/GLTFSpecGloss.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="diffuse_factor" type="Color" setter="set_diffuse_factor" getter="get_diffuse_factor" default="Color(1, 1, 1, 1)">
</member>
@@ -20,6 +18,4 @@
<member name="specular_factor" type="Color" setter="set_specular_factor" getter="get_specular_factor" default="Color(1, 1, 1, 1)">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFState.xml b/modules/gltf/doc_classes/GLTFState.xml
index ae976fc04c..6d03d0ecf8 100644
--- a/modules/gltf/doc_classes/GLTFState.xml
+++ b/modules/gltf/doc_classes/GLTFState.xml
@@ -209,6 +209,4 @@
<member name="use_named_skin_binds" type="bool" setter="set_use_named_skin_binds" getter="get_use_named_skin_binds" default="false">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/doc_classes/GLTFTexture.xml b/modules/gltf/doc_classes/GLTFTexture.xml
index 33bd8fddeb..7c88d2318e 100644
--- a/modules/gltf/doc_classes/GLTFTexture.xml
+++ b/modules/gltf/doc_classes/GLTFTexture.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="src_image" type="int" setter="set_src_image" getter="get_src_image" default="0">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp
index d4f4221663..df2856ec7c 100644
--- a/modules/gltf/gltf_document.cpp
+++ b/modules/gltf/gltf_document.cpp
@@ -6744,6 +6744,8 @@ Error GLTFDocument::_serialize_file(Ref<GLTFState> state, const String p_path) {
Error GLTFDocument::save_scene(Node *p_node, const String &p_path,
const String &p_src_path, uint32_t p_flags,
float p_bake_fps, Ref<GLTFState> r_state) {
+ ERR_FAIL_NULL_V(p_node, ERR_INVALID_PARAMETER);
+
Ref<GLTFDocument> gltf_document;
gltf_document.instantiate();
if (r_state == Ref<GLTFState>()) {
diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl
index a71652d5c4..25b334c5eb 100644
--- a/modules/lightmapper_rd/lm_compute.glsl
+++ b/modules/lightmapper_rd/lm_compute.glsl
@@ -115,7 +115,12 @@ bool ray_hits_triangle(vec3 from, vec3 dir, float max_dist, vec3 p0, vec3 p1, ve
return (r_distance > params.bias) && (r_distance < max_dist) && all(greaterThanEqual(r_barycentric, vec3(0.0)));
}
-bool trace_ray(vec3 p_from, vec3 p_to
+const uint RAY_MISS = 0;
+const uint RAY_FRONT = 1;
+const uint RAY_BACK = 2;
+const uint RAY_ANY = 3;
+
+uint trace_ray(vec3 p_from, vec3 p_to
#if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
,
out uint r_triangle, out vec3 r_barycentric
@@ -125,6 +130,7 @@ bool trace_ray(vec3 p_from, vec3 p_to
out float r_distance, out vec3 r_normal
#endif
) {
+
/* world coords */
vec3 rel = p_to - p_from;
@@ -150,10 +156,7 @@ bool trace_ray(vec3 p_from, vec3 p_to
while (all(greaterThanEqual(icell, ivec3(0))) && all(lessThan(icell, ivec3(params.grid_size))) && iters < 1000) {
uvec2 cell_data = texelFetch(usampler3D(grid, linear_sampler), icell, 0).xy;
if (cell_data.x > 0) { //triangles here
- bool hit = false;
-#if defined(MODE_UNOCCLUDE)
- bool hit_backface = false;
-#endif
+ uint hit = RAY_MISS;
float best_distance = 1e20;
for (uint i = 0; i < cell_data.x; i++) {
@@ -173,57 +176,46 @@ bool trace_ray(vec3 p_from, vec3 p_to
vec3 vtx0 = vertices.data[triangle.indices.x].position;
vec3 vtx1 = vertices.data[triangle.indices.y].position;
vec3 vtx2 = vertices.data[triangle.indices.z].position;
-#if defined(MODE_UNOCCLUDE)
+#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
vec3 normal = -normalize(cross((vtx0 - vtx1), (vtx0 - vtx2)));
bool backface = dot(normal, dir) >= 0.0;
#endif
+
float distance;
vec3 barycentric;
if (ray_hits_triangle(p_from, dir, rel_len, vtx0, vtx1, vtx2, distance, barycentric)) {
#ifdef MODE_DIRECT_LIGHT
- return true; //any hit good
+ return RAY_ANY; //any hit good
#endif
-#if defined(MODE_UNOCCLUDE)
+#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
if (!backface) {
// the case of meshes having both a front and back face in the same plane is more common than
// expected, so if this is a front-face, bias it closer to the ray origin, so it always wins over the back-face
distance = max(params.bias, distance - params.bias);
}
- hit = true;
-
if (distance < best_distance) {
- hit_backface = backface;
+ hit = backface ? RAY_BACK : RAY_FRONT;
best_distance = distance;
+#if defined(MODE_UNOCCLUDE)
r_distance = distance;
r_normal = normal;
- }
-
#endif
-
#if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
-
- hit = true;
- if (distance < best_distance) {
- best_distance = distance;
r_triangle = tidx;
r_barycentric = barycentric;
+#endif
}
#endif
}
}
-#if defined(MODE_UNOCCLUDE)
+#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
- if (hit) {
- return hit_backface;
- }
-#endif
-#if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES)
- if (hit) {
- return true;
+ if (hit != RAY_MISS) {
+ return hit;
}
#endif
}
@@ -239,7 +231,7 @@ bool trace_ray(vec3 p_from, vec3 p_to
iters++;
}
- return false;
+ return RAY_MISS;
}
const float PI = 3.14159265f;
@@ -339,7 +331,7 @@ void main() {
continue; //no need to do anything
}
- if (!trace_ray(position + light_dir * params.bias, light_pos)) {
+ if (trace_ray(position + light_dir * params.bias, light_pos) == RAY_MISS) {
vec3 light = lights.data[i].color * lights.data[i].energy * attenuation;
if (lights.data[i].static_bake) {
static_light += light;
@@ -410,6 +402,7 @@ void main() {
vec4(0.0, 0.0, 0.0, 1.0));
#endif
vec3 light_average = vec3(0.0);
+ float active_rays = 0.0;
for (uint i = params.ray_from; i < params.ray_to; i++) {
vec3 ray_dir = normal_mat * vogel_hemisphere(i, params.ray_count, quick_hash(vec2(atlas_pos)));
@@ -417,7 +410,8 @@ void main() {
vec3 barycentric;
vec3 light = vec3(0.0);
- if (trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric)) {
+ uint trace_result = trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric);
+ if (trace_result == RAY_FRONT) {
//hit a triangle
vec2 uv0 = vertices.data[triangles.data[tidx].indices.x].uv;
vec2 uv1 = vertices.data[triangles.data[tidx].indices.y].uv;
@@ -425,7 +419,8 @@ void main() {
vec3 uvw = vec3(barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2, float(triangles.data[tidx].slice));
light = textureLod(sampler2DArray(source_light, linear_sampler), uvw, 0.0).rgb;
- } else if (params.env_transform[0][3] == 0.0) { // Use env_transform[0][3] to indicate when we are computing the first bounce
+ active_rays += 1.0;
+ } else if (trace_result == RAY_MISS && params.env_transform[0][3] == 0.0) { // Use env_transform[0][3] to indicate when we are computing the first bounce
// Did not hit a triangle, reach out for the sky
vec3 sky_dir = normalize(mat3(params.env_transform) * ray_dir);
@@ -439,6 +434,7 @@ void main() {
st /= vec2(PI * 2.0, PI);
light = textureLod(sampler2D(environment, linear_sampler), st, 0.0).rgb;
+ active_rays += 1.0;
}
light_average += light;
@@ -462,7 +458,9 @@ void main() {
if (params.ray_from == 0) {
light_total = vec3(0.0);
} else {
- light_total = imageLoad(bounce_accum, ivec3(atlas_pos, params.atlas_slice)).rgb;
+ vec4 accum = imageLoad(bounce_accum, ivec3(atlas_pos, params.atlas_slice));
+ light_total = accum.rgb;
+ active_rays += accum.a;
}
light_total += light_average;
@@ -477,7 +475,9 @@ void main() {
#endif
if (params.ray_to == params.ray_count) {
- light_total /= float(params.ray_count);
+ if (active_rays > 0) {
+ light_total /= active_rays;
+ }
imageStore(dest_light, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, 1.0));
#ifndef USE_SH_LIGHTMAPS
vec4 accum = imageLoad(accum_light, ivec3(atlas_pos, params.atlas_slice));
@@ -485,7 +485,7 @@ void main() {
imageStore(accum_light, ivec3(atlas_pos, params.atlas_slice), accum);
#endif
} else {
- imageStore(bounce_accum, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, 1.0));
+ imageStore(bounce_accum, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, active_rays));
}
#endif
@@ -518,7 +518,7 @@ void main() {
float d;
vec3 norm;
- if (trace_ray(base_pos, ray_to, d, norm)) {
+ if (trace_ray(base_pos, ray_to, d, norm) == RAY_BACK) {
if (d < min_d) {
vertex_pos = base_pos + rays[i] * d + norm * params.bias * 10.0; //this bias needs to be greater than the regular bias, because otherwise later, rays will go the other side when pointing back.
min_d = d;
@@ -558,7 +558,8 @@ void main() {
vec3 barycentric;
vec3 light;
- if (trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric)) {
+ uint trace_result = trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric);
+ if (trace_result == RAY_FRONT) {
vec2 uv0 = vertices.data[triangles.data[tidx].indices.x].uv;
vec2 uv1 = vertices.data[triangles.data[tidx].indices.y].uv;
vec2 uv2 = vertices.data[triangles.data[tidx].indices.z].uv;
@@ -566,7 +567,7 @@ void main() {
light = textureLod(sampler2DArray(source_light, linear_sampler), uvw, 0.0).rgb;
light += textureLod(sampler2DArray(source_direct_light, linear_sampler), uvw, 0.0).rgb;
- } else {
+ } else if (trace_result == RAY_MISS) {
//did not hit a triangle, reach out for the sky
vec3 sky_dir = normalize(mat3(params.env_transform) * ray_dir);
diff --git a/modules/minimp3/doc_classes/AudioStreamMP3.xml b/modules/minimp3/doc_classes/AudioStreamMP3.xml
index 5507329a18..e4f56614ee 100644
--- a/modules/minimp3/doc_classes/AudioStreamMP3.xml
+++ b/modules/minimp3/doc_classes/AudioStreamMP3.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="data" type="PackedByteArray" setter="set_data" getter="get_data" default="PackedByteArray()">
Contains the audio data in bytes.
@@ -21,6 +19,4 @@
Time in seconds at which the stream starts after being looped.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/mobile_vr/doc_classes/MobileVRInterface.xml b/modules/mobile_vr/doc_classes/MobileVRInterface.xml
index 120535bd41..04ba82ef51 100644
--- a/modules/mobile_vr/doc_classes/MobileVRInterface.xml
+++ b/modules/mobile_vr/doc_classes/MobileVRInterface.xml
@@ -15,8 +15,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="display_to_lens" type="float" setter="set_display_to_lens" getter="get_display_to_lens" default="4.0">
The distance between the display and the lenses inside of the device in centimeters.
@@ -40,6 +38,4 @@
The oversample setting. Because of the lens distortion we have to render our buffers at a higher resolution then the screen can natively handle. A value between 1.5 and 2.0 often provides good results but at the cost of performance.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp
index bbf1db689d..fc1a118e4f 100644
--- a/modules/mobile_vr/mobile_vr_interface.cpp
+++ b/modules/mobile_vr/mobile_vr_interface.cpp
@@ -244,59 +244,59 @@ void MobileVRInterface::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "k2", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k2", "get_k2");
}
-void MobileVRInterface::set_eye_height(const real_t p_eye_height) {
+void MobileVRInterface::set_eye_height(const double p_eye_height) {
eye_height = p_eye_height;
}
-real_t MobileVRInterface::get_eye_height() const {
+double MobileVRInterface::get_eye_height() const {
return eye_height;
}
-void MobileVRInterface::set_iod(const real_t p_iod) {
+void MobileVRInterface::set_iod(const double p_iod) {
intraocular_dist = p_iod;
};
-real_t MobileVRInterface::get_iod() const {
+double MobileVRInterface::get_iod() const {
return intraocular_dist;
};
-void MobileVRInterface::set_display_width(const real_t p_display_width) {
+void MobileVRInterface::set_display_width(const double p_display_width) {
display_width = p_display_width;
};
-real_t MobileVRInterface::get_display_width() const {
+double MobileVRInterface::get_display_width() const {
return display_width;
};
-void MobileVRInterface::set_display_to_lens(const real_t p_display_to_lens) {
+void MobileVRInterface::set_display_to_lens(const double p_display_to_lens) {
display_to_lens = p_display_to_lens;
};
-real_t MobileVRInterface::get_display_to_lens() const {
+double MobileVRInterface::get_display_to_lens() const {
return display_to_lens;
};
-void MobileVRInterface::set_oversample(const real_t p_oversample) {
+void MobileVRInterface::set_oversample(const double p_oversample) {
oversample = p_oversample;
};
-real_t MobileVRInterface::get_oversample() const {
+double MobileVRInterface::get_oversample() const {
return oversample;
};
-void MobileVRInterface::set_k1(const real_t p_k1) {
+void MobileVRInterface::set_k1(const double p_k1) {
k1 = p_k1;
};
-real_t MobileVRInterface::get_k1() const {
+double MobileVRInterface::get_k1() const {
return k1;
};
-void MobileVRInterface::set_k2(const real_t p_k2) {
+void MobileVRInterface::set_k2(const double p_k2) {
k2 = p_k2;
};
-real_t MobileVRInterface::get_k2() const {
+double MobileVRInterface::get_k2() const {
return k2;
};
@@ -422,7 +422,7 @@ Transform3D MobileVRInterface::get_transform_for_view(uint32_t p_view, const Tra
return transform_for_eye;
};
-CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
+CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
_THREAD_SAFE_METHOD_
CameraMatrix eye;
diff --git a/modules/mobile_vr/mobile_vr_interface.h b/modules/mobile_vr/mobile_vr_interface.h
index 48b76ec187..a843e1188b 100644
--- a/modules/mobile_vr/mobile_vr_interface.h
+++ b/modules/mobile_vr/mobile_vr_interface.h
@@ -56,17 +56,17 @@ private:
Basis orientation;
// Just set some defaults for these. At some point we need to look at adding a lookup table for common device + headset combos and/or support reading cardboard QR codes
- float eye_height = 1.85;
+ double eye_height = 1.85;
uint64_t last_ticks = 0;
- real_t intraocular_dist = 6.0;
- real_t display_width = 14.5;
- real_t display_to_lens = 4.0;
- real_t oversample = 1.5;
+ double intraocular_dist = 6.0;
+ double display_width = 14.5;
+ double display_to_lens = 4.0;
+ double oversample = 1.5;
- real_t k1 = 0.215;
- real_t k2 = 0.215;
- real_t aspect = 1.0;
+ double k1 = 0.215;
+ double k2 = 0.215;
+ double aspect = 1.0;
/*
logic for processing our sensor data, this was originally in our positional tracker logic but I think
@@ -110,26 +110,26 @@ protected:
static void _bind_methods();
public:
- void set_eye_height(const real_t p_eye_height);
- real_t get_eye_height() const;
+ void set_eye_height(const double p_eye_height);
+ double get_eye_height() const;
- void set_iod(const real_t p_iod);
- real_t get_iod() const;
+ void set_iod(const double p_iod);
+ double get_iod() const;
- void set_display_width(const real_t p_display_width);
- real_t get_display_width() const;
+ void set_display_width(const double p_display_width);
+ double get_display_width() const;
- void set_display_to_lens(const real_t p_display_to_lens);
- real_t get_display_to_lens() const;
+ void set_display_to_lens(const double p_display_to_lens);
+ double get_display_to_lens() const;
- void set_oversample(const real_t p_oversample);
- real_t get_oversample() const;
+ void set_oversample(const double p_oversample);
+ double get_oversample() const;
- void set_k1(const real_t p_k1);
- real_t get_k1() const;
+ void set_k1(const double p_k1);
+ double get_k1() const;
- void set_k2(const real_t p_k2);
- real_t get_k2() const;
+ void set_k2(const double p_k2);
+ double get_k2() const;
virtual StringName get_name() const override;
virtual uint32_t get_capabilities() const override;
@@ -144,7 +144,7 @@ public:
virtual uint32_t get_view_count() override;
virtual Transform3D get_camera_transform() override;
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
- virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
+ virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
virtual void process() override;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs
index 658582960f..1dc21b6303 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs
@@ -78,7 +78,8 @@ namespace Godot
/// </example>
/// <seealso cref="GetNode{T}(NodePath)"/>
/// <param name="path">The path to the node to fetch.</param>
- /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>/// ///////// <returns>
+ /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>
+ /// <returns>
/// The <see cref="Node"/> at the given <paramref name="path"/>, or <see langword="null"/> if not found.
/// </returns>
public T GetNodeOrNull<T>(NodePath path) where T : class
@@ -97,7 +98,8 @@ namespace Godot
/// <exception cref="InvalidCastException">
/// Thrown when the given the fetched node can't be casted to the given type <typeparamref name="T"/>.
/// </exception>
- /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>/// ///////// <returns>
+ /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>
+ /// <returns>
/// The child <see cref="Node"/> at the given index <paramref name="idx"/>.
/// </returns>
public T GetChild<T>(int idx) where T : class
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
index daea09ba72..c82c5f4588 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
@@ -361,6 +361,7 @@ namespace Godot
/// <seealso cref="XformInv(Vector2)"/>
/// <param name="v">A vector to transform.</param>
/// <returns>The transformed vector.</returns>
+ [Obsolete("Xform is deprecated. Use the multiplication operator (Transform2D * Vector2) instead.")]
public Vector2 Xform(Vector2 v)
{
return new Vector2(Tdotx(v), Tdoty(v)) + origin;
@@ -372,6 +373,7 @@ namespace Godot
/// <seealso cref="Xform(Vector2)"/>
/// <param name="v">A vector to inversely transform.</param>
/// <returns>The inversely transformed vector.</returns>
+ [Obsolete("XformInv is deprecated. Use the multiplication operator (Vector2 * Transform2D) instead.")]
public Vector2 XformInv(Vector2 v)
{
Vector2 vInv = v - origin;
@@ -447,7 +449,7 @@ namespace Godot
public static Transform2D operator *(Transform2D left, Transform2D right)
{
- left.origin = left.Xform(right.origin);
+ left.origin = left * right.origin;
real_t x0 = left.Tdotx(right.x);
real_t x1 = left.Tdoty(right.x);
@@ -462,6 +464,96 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns a Vector2 transformed (multiplied) by transformation matrix.
+ /// </summary>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <param name="vector">A Vector2 to transform.</param>
+ /// <returns>The transformed Vector2.</returns>
+ public static Vector2 operator *(Transform2D transform, Vector2 vector)
+ {
+ return new Vector2(transform.Tdotx(vector), transform.Tdoty(vector)) + transform.origin;
+ }
+
+ /// <summary>
+ /// Returns a Vector2 transformed (multiplied) by the inverse transformation matrix.
+ /// </summary>
+ /// <param name="vector">A Vector2 to inversely transform.</param>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <returns>The inversely transformed Vector2.</returns>
+ public static Vector2 operator *(Vector2 vector, Transform2D transform)
+ {
+ Vector2 vInv = vector - transform.origin;
+ return new Vector2(transform.x.Dot(vInv), transform.y.Dot(vInv));
+ }
+
+ /// <summary>
+ /// Returns a Rect2 transformed (multiplied) by transformation matrix.
+ /// </summary>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <param name="rect">A Rect2 to transform.</param>
+ /// <returns>The transformed Rect2.</returns>
+ public static Rect2 operator *(Transform2D transform, Rect2 rect)
+ {
+ Vector2 pos = transform * rect.Position;
+ Vector2 toX = transform.x * rect.Size.x;
+ Vector2 toY = transform.y * rect.Size.y;
+
+ return new Rect2(pos, rect.Size).Expand(pos + toX).Expand(pos + toY).Expand(pos + toX + toY);
+ }
+
+ /// <summary>
+ /// Returns a Rect2 transformed (multiplied) by the inverse transformation matrix.
+ /// </summary>
+ /// <param name="rect">A Rect2 to inversely transform.</param>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <returns>The inversely transformed Rect2.</returns>
+ public static Rect2 operator *(Rect2 rect, Transform2D transform)
+ {
+ Vector2 pos = rect.Position * transform;
+ Vector2 to1 = new Vector2(rect.Position.x, rect.Position.y + rect.Size.y) * transform;
+ Vector2 to2 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y + rect.Size.y) * transform;
+ Vector2 to3 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y) * transform;
+
+ return new Rect2(pos, rect.Size).Expand(to1).Expand(to2).Expand(to3);
+ }
+
+ /// <summary>
+ /// Returns a copy of the given Vector2[] transformed (multiplied) by transformation matrix.
+ /// </summary>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <param name="array">A Vector2[] to transform.</param>
+ /// <returns>The transformed copy of the Vector2[].</returns>
+ public static Vector2[] operator *(Transform2D transform, Vector2[] array)
+ {
+ Vector2[] newArray = new Vector2[array.Length];
+
+ for (int i = 0; i < array.Length; i++)
+ {
+ newArray[i] = transform * array[i];
+ }
+
+ return newArray;
+ }
+
+ /// <summary>
+ /// Returns a copy of the given Vector2[] transformed (multiplied) by the inverse transformation matrix.
+ /// </summary>
+ /// <param name="array">A Vector2[] to inversely transform.</param>
+ /// <param name="transform">The transformation to apply.</param>
+ /// <returns>The inversely transformed copy of the Vector2[].</returns>
+ public static Vector2[] operator *(Vector2[] array, Transform2D transform)
+ {
+ Vector2[] newArray = new Vector2[array.Length];
+
+ for (int i = 0; i < array.Length; i++)
+ {
+ newArray[i] = array[i] * transform;
+ }
+
+ return newArray;
+ }
+
public static bool operator ==(Transform2D left, Transform2D right)
{
return left.Equals(right);
diff --git a/modules/ogg/doc_classes/OGGPacketSequence.xml b/modules/ogg/doc_classes/OGGPacketSequence.xml
index 9d3789cb07..deac5b67e2 100644
--- a/modules/ogg/doc_classes/OGGPacketSequence.xml
+++ b/modules/ogg/doc_classes/OGGPacketSequence.xml
@@ -27,6 +27,4 @@
Holds sample rate information about this sequence. Must be set by another class that actually understands the codec.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml b/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml
index 49e32f0d6e..86dee15567 100644
--- a/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml
+++ b/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/opensimplex/doc_classes/NoiseTexture.xml b/modules/opensimplex/doc_classes/NoiseTexture.xml
index 2ae7f8cad9..8a10411cf6 100644
--- a/modules/opensimplex/doc_classes/NoiseTexture.xml
+++ b/modules/opensimplex/doc_classes/NoiseTexture.xml
@@ -16,8 +16,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="as_normal_map" type="bool" setter="set_as_normal_map" getter="is_normal_map" default="false">
If [code]true[/code], the resulting texture contains a normal map created from the original noise interpreted as a bump map.
@@ -42,6 +40,4 @@
Width of the generated texture.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/opensimplex/doc_classes/OpenSimplexNoise.xml b/modules/opensimplex/doc_classes/OpenSimplexNoise.xml
index c470f3e1ab..604b07b645 100644
--- a/modules/opensimplex/doc_classes/OpenSimplexNoise.xml
+++ b/modules/opensimplex/doc_classes/OpenSimplexNoise.xml
@@ -109,6 +109,4 @@
Seed used to generate random values, different seeds will generate different noise maps.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/raycast/raycast_occlusion_cull.cpp b/modules/raycast/raycast_occlusion_cull.cpp
index 88c0145ebc..a55b81c05d 100644
--- a/modules/raycast/raycast_occlusion_cull.cpp
+++ b/modules/raycast/raycast_occlusion_cull.cpp
@@ -66,28 +66,45 @@ void RaycastOcclusionCull::RaycastHZBuffer::resize(const Size2i &p_size) {
void RaycastOcclusionCull::RaycastHZBuffer::update_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, ThreadWorkPool &p_thread_work_pool) {
CameraRayThreadData td;
- td.camera_matrix = p_cam_projection;
- td.camera_transform = p_cam_transform;
- td.camera_orthogonal = p_cam_orthogonal;
td.thread_count = p_thread_work_pool.get_thread_count();
+ td.z_near = p_cam_projection.get_z_near();
+ td.z_far = p_cam_projection.get_z_far() * 1.05f;
+ td.camera_pos = p_cam_transform.origin;
+ td.camera_dir = -p_cam_transform.basis.get_axis(2);
+ td.camera_orthogonal = p_cam_orthogonal;
+
+ CameraMatrix inv_camera_matrix = p_cam_projection.inverse();
+ Vector3 camera_corner_proj = Vector3(-1.0f, -1.0f, -1.0f);
+ Vector3 camera_corner_view = inv_camera_matrix.xform(camera_corner_proj);
+ td.pixel_corner = p_cam_transform.xform(camera_corner_view);
+
+ Vector3 top_corner_proj = Vector3(-1.0f, 1.0f, -1.0f);
+ Vector3 top_corner_view = inv_camera_matrix.xform(top_corner_proj);
+ Vector3 top_corner_world = p_cam_transform.xform(top_corner_view);
+
+ Vector3 left_corner_proj = Vector3(1.0f, -1.0f, -1.0f);
+ Vector3 left_corner_view = inv_camera_matrix.xform(left_corner_proj);
+ Vector3 left_corner_world = p_cam_transform.xform(left_corner_view);
+
+ td.pixel_u_interp = left_corner_world - td.pixel_corner;
+ td.pixel_v_interp = top_corner_world - td.pixel_corner;
+
+ debug_tex_range = td.z_far;
+
p_thread_work_pool.do_work(td.thread_count, this, &RaycastHZBuffer::_camera_rays_threaded, &td);
}
-void RaycastOcclusionCull::RaycastHZBuffer::_camera_rays_threaded(uint32_t p_thread, RaycastOcclusionCull::RaycastHZBuffer::CameraRayThreadData *p_data) {
+void RaycastOcclusionCull::RaycastHZBuffer::_camera_rays_threaded(uint32_t p_thread, const CameraRayThreadData *p_data) {
uint32_t packs_total = camera_rays.size();
uint32_t total_threads = p_data->thread_count;
uint32_t from = p_thread * packs_total / total_threads;
uint32_t to = (p_thread + 1 == total_threads) ? packs_total : ((p_thread + 1) * packs_total / total_threads);
- _generate_camera_rays(p_data->camera_transform, p_data->camera_matrix, p_data->camera_orthogonal, from, to);
+ _generate_camera_rays(p_data, from, to);
}
-void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, int p_from, int p_to) {
- Size2i buffer_size = sizes[0];
-
- CameraMatrix inv_camera_matrix = p_cam_projection.inverse();
- float z_far = p_cam_projection.get_z_far() * 1.05f;
- debug_tex_range = z_far;
+void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const CameraRayThreadData *p_data, int p_from, int p_to) {
+ const Size2i &buffer_size = sizes[0];
RayPacket *ray_packets = camera_rays.ptr();
uint32_t *ray_masks = camera_ray_masks.ptr();
@@ -98,56 +115,52 @@ void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const Transfor
int tile_y = (i / packs_size.x) * TILE_SIZE;
for (int j = 0; j < TILE_RAYS; j++) {
- float x = tile_x + j % TILE_SIZE;
- float y = tile_y + j / TILE_SIZE;
-
- ray_masks[i * TILE_RAYS + j] = ~0U;
+ int x = tile_x + j % TILE_SIZE;
+ int y = tile_y + j / TILE_SIZE;
if (x >= buffer_size.x || y >= buffer_size.y) {
ray_masks[i * TILE_RAYS + j] = 0U;
- } else {
- float u = x / (buffer_size.x - 1);
- float v = y / (buffer_size.y - 1);
- u = u * 2.0f - 1.0f;
- v = v * 2.0f - 1.0f;
-
- Plane pixel_proj = Plane(u, v, -1.0, 1.0);
- Plane pixel_view = inv_camera_matrix.xform4(pixel_proj);
- Vector3 pixel_world = p_cam_transform.xform(pixel_view.normal);
-
- Vector3 dir;
- if (p_cam_orthogonal) {
- dir = -p_cam_transform.basis.get_axis(2);
- } else {
- dir = (pixel_world - p_cam_transform.origin).normalized();
- }
-
- packet.ray.org_x[j] = pixel_world.x;
- packet.ray.org_y[j] = pixel_world.y;
- packet.ray.org_z[j] = pixel_world.z;
+ continue;
+ }
- packet.ray.dir_x[j] = dir.x;
- packet.ray.dir_y[j] = dir.y;
- packet.ray.dir_z[j] = dir.z;
+ ray_masks[i * TILE_RAYS + j] = ~0U;
- packet.ray.tnear[j] = 0.0f;
+ float u = (float(x) + 0.5f) / buffer_size.x;
+ float v = (float(y) + 0.5f) / buffer_size.y;
+ Vector3 pixel_pos = p_data->pixel_corner + u * p_data->pixel_u_interp + v * p_data->pixel_v_interp;
- packet.ray.time[j] = 0.0f;
+ packet.ray.tnear[j] = p_data->z_near;
- packet.ray.flags[j] = 0;
- packet.ray.mask[j] = -1;
- packet.hit.geomID[j] = RTC_INVALID_GEOMETRY_ID;
+ Vector3 dir;
+ if (p_data->camera_orthogonal) {
+ dir = -p_data->camera_dir;
+ packet.ray.org_x[j] = pixel_pos.x - dir.x * p_data->z_near;
+ packet.ray.org_y[j] = pixel_pos.y - dir.y * p_data->z_near;
+ packet.ray.org_z[j] = pixel_pos.z - dir.z * p_data->z_near;
+ } else {
+ dir = (pixel_pos - p_data->camera_pos).normalized();
+ packet.ray.org_x[j] = p_data->camera_pos.x;
+ packet.ray.org_y[j] = p_data->camera_pos.y;
+ packet.ray.org_z[j] = p_data->camera_pos.z;
+ packet.ray.tnear[j] /= dir.dot(p_data->camera_dir);
}
- packet.ray.tfar[j] = z_far;
+ packet.ray.dir_x[j] = dir.x;
+ packet.ray.dir_y[j] = dir.y;
+ packet.ray.dir_z[j] = dir.z;
+
+ packet.ray.tfar[j] = p_data->z_far;
+ packet.ray.time[j] = 0.0f;
+
+ packet.ray.flags[j] = 0;
+ packet.ray.mask[j] = -1;
+ packet.hit.geomID[j] = RTC_INVALID_GEOMETRY_ID;
}
}
}
-void RaycastOcclusionCull::RaycastHZBuffer::sort_rays() {
- if (is_empty()) {
- return;
- }
+void RaycastOcclusionCull::RaycastHZBuffer::sort_rays(const Vector3 &p_camera_dir, bool p_orthogonal) {
+ ERR_FAIL_COND(is_empty());
Size2i buffer_size = sizes[0];
for (int i = 0; i < packs_size.y; i++) {
@@ -161,7 +174,17 @@ void RaycastOcclusionCull::RaycastHZBuffer::sort_rays() {
}
int k = tile_i * TILE_SIZE + tile_j;
int packet_index = i * packs_size.x + j;
- mips[0][y * buffer_size.x + x] = camera_rays[packet_index].ray.tfar[k];
+ float d = camera_rays[packet_index].ray.tfar[k];
+
+ if (!p_orthogonal) {
+ const float &dir_x = camera_rays[packet_index].ray.dir_x[k];
+ const float &dir_y = camera_rays[packet_index].ray.dir_y[k];
+ const float &dir_z = camera_rays[packet_index].ray.dir_z[k];
+ float cos_theta = p_camera_dir.x * dir_x + p_camera_dir.y * dir_y + p_camera_dir.z * dir_z;
+ d *= cos_theta;
+ }
+
+ mips[0][y * buffer_size.x + x] = d;
}
}
}
@@ -514,7 +537,7 @@ void RaycastOcclusionCull::buffer_update(RID p_buffer, const Transform3D &p_cam_
buffer.update_camera_rays(p_cam_transform, p_cam_projection, p_cam_orthogonal, p_thread_pool);
scenario.raycast(buffer.camera_rays, buffer.camera_ray_masks, p_thread_pool);
- buffer.sort_rays();
+ buffer.sort_rays(-p_cam_transform.basis.get_axis(2), p_cam_orthogonal);
buffer.update_mips();
}
diff --git a/modules/raycast/raycast_occlusion_cull.h b/modules/raycast/raycast_occlusion_cull.h
index 85710a790c..cc87a6342c 100644
--- a/modules/raycast/raycast_occlusion_cull.h
+++ b/modules/raycast/raycast_occlusion_cull.h
@@ -51,15 +51,20 @@ public:
Size2i packs_size;
struct CameraRayThreadData {
- CameraMatrix camera_matrix;
- Transform3D camera_transform;
- bool camera_orthogonal;
int thread_count;
+ float z_near;
+ float z_far;
+ Vector3 camera_dir;
+ Vector3 camera_pos;
+ Vector3 pixel_corner;
+ Vector3 pixel_u_interp;
+ Vector3 pixel_v_interp;
+ bool camera_orthogonal;
Size2i buffer_size;
};
- void _camera_rays_threaded(uint32_t p_thread, CameraRayThreadData *p_data);
- void _generate_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, int p_from, int p_to);
+ void _camera_rays_threaded(uint32_t p_thread, const CameraRayThreadData *p_data);
+ void _generate_camera_rays(const CameraRayThreadData *p_data, int p_from, int p_to);
public:
LocalVector<RayPacket> camera_rays;
@@ -68,7 +73,7 @@ public:
virtual void clear() override;
virtual void resize(const Size2i &p_size) override;
- void sort_rays();
+ void sort_rays(const Vector3 &p_camera_dir, bool p_orthogonal);
void update_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, ThreadWorkPool &p_thread_work_pool);
};
diff --git a/modules/regex/doc_classes/RegEx.xml b/modules/regex/doc_classes/RegEx.xml
index 9c84974ff6..2ae2e53b02 100644
--- a/modules/regex/doc_classes/RegEx.xml
+++ b/modules/regex/doc_classes/RegEx.xml
@@ -116,6 +116,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/regex/doc_classes/RegExMatch.xml b/modules/regex/doc_classes/RegExMatch.xml
index 3cde2836cc..20680b41fd 100644
--- a/modules/regex/doc_classes/RegExMatch.xml
+++ b/modules/regex/doc_classes/RegExMatch.xml
@@ -51,6 +51,4 @@
The source string used with the search pattern to find this matching result.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/text_server_adv/SCsub b/modules/text_server_adv/SCsub
index 6691f86e60..7cd4db6f67 100644
--- a/modules/text_server_adv/SCsub
+++ b/modules/text_server_adv/SCsub
@@ -64,6 +64,7 @@ if env["builtin_harfbuzz"]:
#'src/hb-gobject-structs.cc',
"src/hb-icu.cc",
"src/hb-map.cc",
+ "src/hb-ms-feature-ranges.cc",
"src/hb-number.cc",
"src/hb-ot-cff1-table.cc",
"src/hb-ot-cff2-table.cc",
diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp
index 22706f9b6a..341ae9c015 100644
--- a/modules/text_server_adv/text_server_adv.cpp
+++ b/modules/text_server_adv/text_server_adv.cpp
@@ -3804,7 +3804,12 @@ bool TextServerAdvanced::shaped_text_update_breaks(RID p_shaped) {
gl.font_rid = sd_glyphs[i].font_rid;
gl.font_size = sd_glyphs[i].font_size;
gl.flags = GRAPHEME_IS_BREAK_SOFT | GRAPHEME_IS_VIRTUAL;
- sd->glyphs.insert(i + sd_glyphs[i].count, gl); // Insert after.
+ if (sd->glyphs[i].flags & GRAPHEME_IS_RTL) {
+ gl.flags |= GRAPHEME_IS_RTL;
+ sd->glyphs.insert(i, gl); // Insert before.
+ } else {
+ sd->glyphs.insert(i + sd_glyphs[i].count, gl); // Insert after.
+ }
// Update write pointer and size.
sd_size = sd->glyphs.size();
@@ -3998,7 +4003,12 @@ bool TextServerAdvanced::shaped_text_update_justification_ops(RID p_shaped) {
gl.font_rid = sd->glyphs[i].font_rid;
gl.font_size = sd->glyphs[i].font_size;
gl.flags = GRAPHEME_IS_SPACE | GRAPHEME_IS_VIRTUAL;
- sd->glyphs.insert(i + sd->glyphs[i].count, gl); // Insert after.
+ if (sd->glyphs[i].flags & GRAPHEME_IS_RTL) {
+ gl.flags |= GRAPHEME_IS_RTL;
+ sd->glyphs.insert(i, gl); // Insert before.
+ } else {
+ sd->glyphs.insert(i + sd->glyphs[i].count, gl); // Insert after.
+ }
i += sd->glyphs[i].count;
continue;
}
@@ -4147,7 +4157,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star
}
}
if (p_direction == HB_DIRECTION_RTL || p_direction == HB_DIRECTION_BTT) {
- w[last_cluster_index].flags |= TextServer::GRAPHEME_IS_RTL;
+ w[last_cluster_index].flags |= GRAPHEME_IS_RTL;
}
if (last_cluster_valid) {
w[last_cluster_index].flags |= GRAPHEME_IS_VALID;
@@ -4169,6 +4179,10 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star
gl.font_rid = p_fonts[p_fb_index];
gl.font_size = fs;
+ if (glyph_info[i].mask & HB_GLYPH_FLAG_DEFINED) {
+ gl.flags |= GRAPHEME_IS_CONNECTED;
+ }
+
gl.index = glyph_info[i].codepoint;
if (gl.index != 0) {
real_t scale = font_get_scale(f, fs);
@@ -4199,7 +4213,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star
}
w[last_cluster_index].count = glyph_count - last_cluster_index;
if (p_direction == HB_DIRECTION_RTL || p_direction == HB_DIRECTION_BTT) {
- w[last_cluster_index].flags |= TextServer::GRAPHEME_IS_RTL;
+ w[last_cluster_index].flags |= GRAPHEME_IS_RTL;
}
if (last_cluster_valid) {
w[last_cluster_index].flags |= GRAPHEME_IS_VALID;
diff --git a/modules/theora/doc_classes/VideoStreamTheora.xml b/modules/theora/doc_classes/VideoStreamTheora.xml
index e7bf9b202d..2dfcd27dff 100644
--- a/modules/theora/doc_classes/VideoStreamTheora.xml
+++ b/modules/theora/doc_classes/VideoStreamTheora.xml
@@ -24,6 +24,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml
index 2327fc0009..372d46bc10 100644
--- a/modules/visual_script/doc_classes/VisualScript.xml
+++ b/modules/visual_script/doc_classes/VisualScript.xml
@@ -354,6 +354,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
index 4d07f878a2..ed5b814bb7 100644
--- a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="basic_type" type="int" setter="set_basic_type" getter="get_basic_type" enum="Variant.Type" default="0">
The type to get the constant from.
@@ -18,6 +16,4 @@
The name of the constant to return.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
index 55d0b392fa..942d92311b 100644
--- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="function" type="int" setter="set_func" getter="get_func" enum="VisualScriptBuiltinFunc.BuiltinFunc" default="0">
The function to be executed.
@@ -181,32 +179,34 @@
<constant name="TEXT_PRINTRAW" value="55" enum="BuiltinFunc">
Print the given string to the standard output, without adding a newline.
</constant>
- <constant name="VAR_TO_STR" value="56" enum="BuiltinFunc">
+ <constant name="TEXT_PRINT_VERBOSE" value="56" enum="BuiltinFunc">
+ </constant>
+ <constant name="VAR_TO_STR" value="57" enum="BuiltinFunc">
Serialize a [Variant] to a string.
</constant>
- <constant name="STR_TO_VAR" value="57" enum="BuiltinFunc">
+ <constant name="STR_TO_VAR" value="58" enum="BuiltinFunc">
Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR].
</constant>
- <constant name="VAR_TO_BYTES" value="58" enum="BuiltinFunc">
+ <constant name="VAR_TO_BYTES" value="59" enum="BuiltinFunc">
Serialize a [Variant] to a [PackedByteArray].
</constant>
- <constant name="BYTES_TO_VAR" value="59" enum="BuiltinFunc">
+ <constant name="BYTES_TO_VAR" value="60" enum="BuiltinFunc">
Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES].
</constant>
- <constant name="MATH_SMOOTHSTEP" value="60" enum="BuiltinFunc">
+ <constant name="MATH_SMOOTHSTEP" value="61" enum="BuiltinFunc">
Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula:
[codeblock]
var t = clamp((weight - from) / (to - from), 0.0, 1.0)
return t * t * (3.0 - 2.0 * t)
[/codeblock]
</constant>
- <constant name="MATH_POSMOD" value="61" enum="BuiltinFunc">
+ <constant name="MATH_POSMOD" value="62" enum="BuiltinFunc">
</constant>
- <constant name="MATH_LERP_ANGLE" value="62" enum="BuiltinFunc">
+ <constant name="MATH_LERP_ANGLE" value="63" enum="BuiltinFunc">
</constant>
- <constant name="TEXT_ORD" value="63" enum="BuiltinFunc">
+ <constant name="TEXT_ORD" value="64" enum="BuiltinFunc">
</constant>
- <constant name="FUNC_MAX" value="64" enum="BuiltinFunc">
+ <constant name="FUNC_MAX" value="65" enum="BuiltinFunc">
Represents the size of the [enum BuiltinFunc] enum.
</constant>
</constants>
diff --git a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
index d6b96957f5..ae32500d2f 100644
--- a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_type" type="StringName" setter="set_base_type" getter="get_base_type" default="&amp;&quot;Object&quot;">
The constant's parent class.
@@ -22,6 +20,4 @@
The constant to return. See the given class for its available constants.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptComment.xml b/modules/visual_script/doc_classes/VisualScriptComment.xml
index 02cec97b27..5024aae384 100644
--- a/modules/visual_script/doc_classes/VisualScriptComment.xml
+++ b/modules/visual_script/doc_classes/VisualScriptComment.xml
@@ -9,8 +9,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="description" type="String" setter="set_description" getter="get_description" default="&quot;&quot;">
The text inside the comment node.
@@ -22,6 +20,4 @@
The comment node's title.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptComposeArray.xml b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml
index dec182abf6..ed065759c5 100644
--- a/modules/visual_script/doc_classes/VisualScriptComposeArray.xml
+++ b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptCondition.xml b/modules/visual_script/doc_classes/VisualScriptCondition.xml
index a9981c1f57..a5dd8c7c1b 100644
--- a/modules/visual_script/doc_classes/VisualScriptCondition.xml
+++ b/modules/visual_script/doc_classes/VisualScriptCondition.xml
@@ -15,8 +15,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptConstant.xml b/modules/visual_script/doc_classes/VisualScriptConstant.xml
index 69676c4bba..388c2bddde 100644
--- a/modules/visual_script/doc_classes/VisualScriptConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptConstant.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="type" type="int" setter="set_constant_type" getter="get_constant_type" enum="Variant.Type" default="0">
The constant's type.
@@ -22,6 +20,4 @@
The constant's value.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptConstructor.xml b/modules/visual_script/doc_classes/VisualScriptConstructor.xml
index 4743594ec3..4a3d10aa8e 100644
--- a/modules/visual_script/doc_classes/VisualScriptConstructor.xml
+++ b/modules/visual_script/doc_classes/VisualScriptConstructor.xml
@@ -32,6 +32,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
index 530c80530e..fd9a91c2a5 100644
--- a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
+++ b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="type" type="int" setter="set_deconstruct_type" getter="get_deconstruct_type" enum="Variant.Type" default="0">
The type to deconstruct.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
index df3121d093..e102e02aa9 100644
--- a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
+++ b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml
@@ -12,13 +12,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="signal" type="StringName" setter="set_signal" getter="get_signal" default="&amp;&quot;&quot;">
The signal to emit.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
index 8b7fd3a612..468cae852f 100644
--- a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
+++ b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="String" setter="set_singleton" getter="get_singleton" default="&quot;&quot;">
The singleton's name.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptExpression.xml b/modules/visual_script/doc_classes/VisualScriptExpression.xml
index 223adbbb96..15e16a15f0 100644
--- a/modules/visual_script/doc_classes/VisualScriptExpression.xml
+++ b/modules/visual_script/doc_classes/VisualScriptExpression.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptFunction.xml b/modules/visual_script/doc_classes/VisualScriptFunction.xml
index 652418bd64..e0ca9eb280 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunction.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunction.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
index f0b666e57a..a98cb79106 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script">
The script to be used when [member call_mode] is set to [constant CALL_MODE_INSTANCE].
diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
index 18c3826df8..0d7833446d 100644
--- a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
+++ b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml
@@ -32,6 +32,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
index 87fdfd4e53..c6b5b22590 100644
--- a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml
@@ -8,13 +8,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="int" setter="set_global_constant" getter="get_global_constant" default="0">
The constant to be used.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
index b348048298..78fd17c5fc 100644
--- a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
index d7fe7340ad..0e5e832c65 100644
--- a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptInputAction.xml b/modules/visual_script/doc_classes/VisualScriptInputAction.xml
index d6fa111500..eb06d52314 100644
--- a/modules/visual_script/doc_classes/VisualScriptInputAction.xml
+++ b/modules/visual_script/doc_classes/VisualScriptInputAction.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="action" type="StringName" setter="set_action_name" getter="get_action_name" default="&amp;&quot;&quot;">
Name of the action.
diff --git a/modules/visual_script/doc_classes/VisualScriptIterator.xml b/modules/visual_script/doc_classes/VisualScriptIterator.xml
index 1d4ab4daa9..d8305728c6 100644
--- a/modules/visual_script/doc_classes/VisualScriptIterator.xml
+++ b/modules/visual_script/doc_classes/VisualScriptIterator.xml
@@ -15,8 +15,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptLists.xml b/modules/visual_script/doc_classes/VisualScriptLists.xml
index d5bff1341a..373e3c7191 100644
--- a/modules/visual_script/doc_classes/VisualScriptLists.xml
+++ b/modules/visual_script/doc_classes/VisualScriptLists.xml
@@ -74,6 +74,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
index 185f0f1ffb..29dbddcdf4 100644
--- a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
+++ b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type" default="0">
The local variable's type.
@@ -22,6 +20,4 @@
The local variable's name.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
index 865f0153c9..96de8ebfdd 100644
--- a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml
@@ -14,8 +14,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type" default="0">
The local variable's type.
@@ -24,6 +22,4 @@
The local variable's name.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
index 18a1f030bc..f559083c80 100644
--- a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
+++ b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="constant" type="int" setter="set_math_constant" getter="get_math_constant" enum="VisualScriptMathConstant.MathConstant" default="0">
The math constant.
diff --git a/modules/visual_script/doc_classes/VisualScriptNode.xml b/modules/visual_script/doc_classes/VisualScriptNode.xml
index 23574a5ea8..d080d9eac1 100644
--- a/modules/visual_script/doc_classes/VisualScriptNode.xml
+++ b/modules/visual_script/doc_classes/VisualScriptNode.xml
@@ -44,6 +44,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptOperator.xml b/modules/visual_script/doc_classes/VisualScriptOperator.xml
index cbbefa7f71..73d28899f6 100644
--- a/modules/visual_script/doc_classes/VisualScriptOperator.xml
+++ b/modules/visual_script/doc_classes/VisualScriptOperator.xml
@@ -12,8 +12,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="Variant.Operator" default="6">
The operation to be performed. See [enum Variant.Operator] for available options.
@@ -22,6 +20,4 @@
The type of the values for this operation. See [enum Variant.Type] for available options.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptPreload.xml b/modules/visual_script/doc_classes/VisualScriptPreload.xml
index e11af6c805..e3d60c77bb 100644
--- a/modules/visual_script/doc_classes/VisualScriptPreload.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPreload.xml
@@ -12,13 +12,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="resource" type="Resource" setter="set_preload" getter="get_preload">
The [Resource] to load.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
index c1bf443ea3..e9f30cb605 100644
--- a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script">
The script to be used when [member set_mode] is set to [constant CALL_MODE_INSTANCE].
diff --git a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
index 75d6a63469..96261d2c5e 100644
--- a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="assign_op" type="int" setter="set_assign_op" getter="get_assign_op" enum="VisualScriptPropertySet.AssignOp" default="0">
The additional operation to perform when assigning. See [enum AssignOp] for options.
diff --git a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
index ea891be05f..77e97a7219 100644
--- a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
+++ b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml
@@ -6,12 +6,8 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="path" type="String" setter="set_resource_path" getter="get_resource_path" default="&quot;&quot;">
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptReturn.xml b/modules/visual_script/doc_classes/VisualScriptReturn.xml
index 502628925d..2193f45dc8 100644
--- a/modules/visual_script/doc_classes/VisualScriptReturn.xml
+++ b/modules/visual_script/doc_classes/VisualScriptReturn.xml
@@ -13,8 +13,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="return_enabled" type="bool" setter="set_enable_return_value" getter="is_return_value_enabled" default="false">
If [code]true[/code], the [code]return[/code] input port is available.
@@ -23,6 +21,4 @@
The return value's data type.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
index ffe187a00e..ac672d9b3f 100644
--- a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml
@@ -12,13 +12,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="node_path" type="NodePath" setter="set_node_path" getter="get_node_path" default="NodePath(&quot;.&quot;)">
The node's path in the scene tree.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
index 8cddd02c77..fc383593c5 100644
--- a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSelect.xml b/modules/visual_script/doc_classes/VisualScriptSelect.xml
index 1dbc066e32..d536e623f7 100644
--- a/modules/visual_script/doc_classes/VisualScriptSelect.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSelect.xml
@@ -14,13 +14,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="type" type="int" setter="set_typed" getter="get_typed" enum="Variant.Type" default="0">
The input variables' type.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSelf.xml b/modules/visual_script/doc_classes/VisualScriptSelf.xml
index bb24f158c1..3c2bd16302 100644
--- a/modules/visual_script/doc_classes/VisualScriptSelf.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSelf.xml
@@ -12,8 +12,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSequence.xml b/modules/visual_script/doc_classes/VisualScriptSequence.xml
index 664722574d..32dcbb9837 100644
--- a/modules/visual_script/doc_classes/VisualScriptSequence.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSequence.xml
@@ -14,13 +14,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="steps" type="int" setter="set_steps" getter="get_steps" default="1">
The number of steps in the sequence.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSubCall.xml b/modules/visual_script/doc_classes/VisualScriptSubCall.xml
index f54887b09c..fdf0e24d3e 100644
--- a/modules/visual_script/doc_classes/VisualScriptSubCall.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSubCall.xml
@@ -8,8 +8,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptSwitch.xml b/modules/visual_script/doc_classes/VisualScriptSwitch.xml
index 74504948f0..8e176b56f0 100644
--- a/modules/visual_script/doc_classes/VisualScriptSwitch.xml
+++ b/modules/visual_script/doc_classes/VisualScriptSwitch.xml
@@ -17,8 +17,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
index 5dd1ad3421..ee8e2ad31e 100644
--- a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
+++ b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_script" type="String" setter="set_base_script" getter="get_base_script" default="&quot;&quot;">
The target script class to be converted to. If none, only the [member base_type] will be used.
@@ -18,6 +16,4 @@
The target type to be converted to.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
index df20ac53f2..e29765d616 100644
--- a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml
@@ -12,13 +12,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="var_name" type="StringName" setter="set_variable" getter="get_variable" default="&amp;&quot;&quot;">
The variable's name.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
index eb8ebbe338..b2cc70d62e 100644
--- a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
+++ b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml
@@ -13,13 +13,9 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="var_name" type="StringName" setter="set_variable" getter="get_variable" default="&amp;&quot;&quot;">
The variable's name.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptWhile.xml b/modules/visual_script/doc_classes/VisualScriptWhile.xml
index f187957ad2..f090568608 100644
--- a/modules/visual_script/doc_classes/VisualScriptWhile.xml
+++ b/modules/visual_script/doc_classes/VisualScriptWhile.xml
@@ -14,8 +14,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/visual_script/doc_classes/VisualScriptYield.xml b/modules/visual_script/doc_classes/VisualScriptYield.xml
index b04ab7b014..bb7fd8bfb5 100644
--- a/modules/visual_script/doc_classes/VisualScriptYield.xml
+++ b/modules/visual_script/doc_classes/VisualScriptYield.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="mode" type="int" setter="set_yield_mode" getter="get_yield_mode" enum="VisualScriptYield.YieldMode" default="1">
The mode to use for yielding. See [enum YieldMode] for available options.
diff --git a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
index c6c3188d08..ad6a7fb4e2 100644
--- a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
+++ b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
@@ -8,8 +8,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="base_type" type="StringName" setter="set_base_type" getter="get_base_type" default="&amp;&quot;Object&quot;">
The base type to be used when [member call_mode] is set to [constant CALL_MODE_INSTANCE].
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index 2bd7220d15..7e01031128 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -94,6 +94,7 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
"print",
"printerr",
"printraw",
+ "print_verbose",
"var2str",
"str2var",
"var2bytes",
@@ -129,6 +130,7 @@ bool VisualScriptBuiltinFunc::has_input_sequence_port() const {
case TEXT_PRINT:
case TEXT_PRINTERR:
case TEXT_PRINTRAW:
+ case TEXT_PRINT_VERBOSE:
case MATH_SEED:
return true;
default:
@@ -177,6 +179,7 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) {
case TEXT_PRINT:
case TEXT_PRINTERR:
case TEXT_PRINTRAW:
+ case TEXT_PRINT_VERBOSE:
case VAR_TO_STR:
case STR_TO_VAR:
case TYPE_EXISTS:
@@ -223,6 +226,7 @@ int VisualScriptBuiltinFunc::get_output_value_port_count() const {
case TEXT_PRINT:
case TEXT_PRINTERR:
case TEXT_PRINTRAW:
+ case TEXT_PRINT_VERBOSE:
case MATH_SEED:
return 0;
case MATH_RANDSEED:
@@ -424,7 +428,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
case TEXT_STR:
case TEXT_PRINT:
case TEXT_PRINTERR:
- case TEXT_PRINTRAW: {
+ case TEXT_PRINTRAW:
+ case TEXT_PRINT_VERBOSE: {
return PropertyInfo(Variant::NIL, "value");
} break;
case STR_TO_VAR: {
@@ -572,6 +577,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
} break;
case TEXT_PRINTRAW: {
} break;
+ case TEXT_PRINT_VERBOSE: {
+ } break;
case VAR_TO_STR: {
t = Variant::STRING;
} break;
@@ -1020,6 +1027,10 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in
OS::get_singleton()->print("%s", str.utf8().get_data());
} break;
+ case VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE: {
+ String str = *p_inputs[0];
+ print_verbose(str);
+ } break;
case VisualScriptBuiltinFunc::VAR_TO_STR: {
String vars;
VariantWriter::write_to_string(*p_inputs[0], vars);
@@ -1208,6 +1219,7 @@ void VisualScriptBuiltinFunc::_bind_methods() {
BIND_ENUM_CONSTANT(TEXT_PRINT);
BIND_ENUM_CONSTANT(TEXT_PRINTERR);
BIND_ENUM_CONSTANT(TEXT_PRINTRAW);
+ BIND_ENUM_CONSTANT(TEXT_PRINT_VERBOSE);
BIND_ENUM_CONSTANT(VAR_TO_STR);
BIND_ENUM_CONSTANT(STR_TO_VAR);
BIND_ENUM_CONSTANT(VAR_TO_BYTES);
@@ -1300,6 +1312,7 @@ void register_visual_script_builtin_func_node() {
VisualScriptLanguage::singleton->add_register_func("functions/built_in/print", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/printerr", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTERR>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/printraw", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTRAW>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/print_verbose", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2str", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_STR>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/str2var", create_builtin_func_node<VisualScriptBuiltinFunc::STR_TO_VAR>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2bytes", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_BYTES>);
diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h
index 26abc1e479..f9eb7e983f 100644
--- a/modules/visual_script/visual_script_builtin_funcs.h
+++ b/modules/visual_script/visual_script_builtin_funcs.h
@@ -94,6 +94,7 @@ public:
TEXT_PRINT,
TEXT_PRINTERR,
TEXT_PRINTRAW,
+ TEXT_PRINT_VERBOSE,
VAR_TO_STR,
STR_TO_VAR,
VAR_TO_BYTES,
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index c2fa3cbd9d..0a6bcedf31 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -2546,16 +2546,11 @@ void VisualScriptEditor::goto_line(int p_line, bool p_with_error) {
error_line = p_line;
}
- List<StringName> functions;
- script->get_function_list(&functions);
- for (const StringName &E : functions) {
- if (script->has_node(p_line)) {
- _update_graph();
- _update_members();
+ if (script->has_node(p_line)) {
+ _update_graph();
+ _update_members();
- call_deferred(SNAME("call_deferred"), "_center_on_node", E, p_line); //editor might be just created and size might not exist yet
- return;
- }
+ call_deferred(SNAME("call_deferred"), "_center_on_node", p_line); // The editor might be just created and size might not exist yet.
}
}
diff --git a/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml b/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml
index a680a2f999..4cd278fe83 100644
--- a/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml
+++ b/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml
@@ -6,8 +6,6 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
<members>
<member name="loop" type="bool" setter="set_loop" getter="has_loop" default="false">
If [code]true[/code], the stream will automatically loop when it reaches the end.
@@ -19,6 +17,4 @@
Contains the raw OGG data for this stream.
</member>
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml b/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml
index 3120f2a9e6..05c70d88da 100644
--- a/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml
+++ b/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml
@@ -6,8 +6,4 @@
</description>
<tutorials>
</tutorials>
- <methods>
- </methods>
- <constants>
- </constants>
</class>
diff --git a/modules/webm/doc_classes/VideoStreamWebm.xml b/modules/webm/doc_classes/VideoStreamWebm.xml
index 3b9acfd873..e04d02d6ab 100644
--- a/modules/webm/doc_classes/VideoStreamWebm.xml
+++ b/modules/webm/doc_classes/VideoStreamWebm.xml
@@ -25,6 +25,4 @@
</description>
</method>
</methods>
- <constants>
- </constants>
</class>
diff --git a/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml b/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml
index 43a8e20ef7..9040d510c0 100644
--- a/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml
+++ b/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml
@@ -71,6 +71,4 @@
<member name="refuse_new_connections" type="bool" setter="set_refuse_new_connections" getter="is_refusing_new_connections" override="true" default="false" />
<member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="TransferMode" default="2" />
</members>
- <constants>
- </constants>
</class>
diff --git a/modules/websocket/doc_classes/WebSocketClient.xml b/modules/websocket/doc_classes/WebSocketClient.xml
index b5202469f1..ed8f3ba867 100644
--- a/modules/websocket/doc_classes/WebSocketClient.xml
+++ b/modules/websocket/doc_classes/WebSocketClient.xml
@@ -90,6 +90,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
index c7a0ca100f..bf35acbd11 100644
--- a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
+++ b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
@@ -43,6 +43,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/websocket/doc_classes/WebSocketServer.xml b/modules/websocket/doc_classes/WebSocketServer.xml
index b66a1054ab..2bb705b384 100644
--- a/modules/websocket/doc_classes/WebSocketServer.xml
+++ b/modules/websocket/doc_classes/WebSocketServer.xml
@@ -116,6 +116,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/webxr/doc_classes/WebXRInterface.xml b/modules/webxr/doc_classes/WebXRInterface.xml
index ff7c46bbae..16d671c9e9 100644
--- a/modules/webxr/doc_classes/WebXRInterface.xml
+++ b/modules/webxr/doc_classes/WebXRInterface.xml
@@ -239,6 +239,4 @@
</description>
</signal>
</signals>
- <constants>
- </constants>
</class>
diff --git a/modules/webxr/webxr_interface_js.cpp b/modules/webxr/webxr_interface_js.cpp
index 2d699961ae..10c17aa672 100644
--- a/modules/webxr/webxr_interface_js.cpp
+++ b/modules/webxr/webxr_interface_js.cpp
@@ -341,7 +341,7 @@ Transform3D WebXRInterfaceJS::get_transform_for_view(uint32_t p_view, const Tran
return p_cam_transform * xr_server->get_reference_frame() * transform_for_eye;
};
-CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
+CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
CameraMatrix eye;
float *js_matrix = godot_webxr_get_projection_for_eye(p_view + 1);
diff --git a/modules/webxr/webxr_interface_js.h b/modules/webxr/webxr_interface_js.h
index 82307190db..eb77f35f39 100644
--- a/modules/webxr/webxr_interface_js.h
+++ b/modules/webxr/webxr_interface_js.h
@@ -86,7 +86,7 @@ public:
virtual uint32_t get_view_count() override;
virtual Transform3D get_camera_transform() override;
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
- virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
+ virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
virtual void process() override;
diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp
index 420cb2f2f7..cfe6c69072 100644
--- a/platform/javascript/audio_driver_javascript.cpp
+++ b/platform/javascript/audio_driver_javascript.cpp
@@ -34,22 +34,18 @@
#include <emscripten.h>
-AudioDriverJavaScript *AudioDriverJavaScript::singleton = nullptr;
+AudioDriverJavaScript::AudioContext AudioDriverJavaScript::audio_context;
bool AudioDriverJavaScript::is_available() {
return godot_audio_is_available() != 0;
}
-const char *AudioDriverJavaScript::get_name() const {
- return "JavaScript";
-}
-
void AudioDriverJavaScript::_state_change_callback(int p_state) {
- singleton->state = p_state;
+ AudioDriverJavaScript::audio_context.state = p_state;
}
void AudioDriverJavaScript::_latency_update_callback(float p_latency) {
- singleton->output_latency = p_latency;
+ AudioDriverJavaScript::audio_context.output_latency = p_latency;
}
void AudioDriverJavaScript::_audio_driver_process(int p_from, int p_samples) {
@@ -105,17 +101,19 @@ void AudioDriverJavaScript::_audio_driver_capture(int p_from, int p_samples) {
}
Error AudioDriverJavaScript::init() {
- mix_rate = GLOBAL_GET("audio/driver/mix_rate");
int latency = GLOBAL_GET("audio/driver/output_latency");
-
- channel_count = godot_audio_init(&mix_rate, latency, &_state_change_callback, &_latency_update_callback);
+ if (!audio_context.inited) {
+ audio_context.mix_rate = GLOBAL_GET("audio/driver/mix_rate");
+ audio_context.channel_count = godot_audio_init(&audio_context.mix_rate, latency, &_state_change_callback, &_latency_update_callback);
+ audio_context.inited = true;
+ }
+ mix_rate = audio_context.mix_rate;
+ channel_count = audio_context.channel_count;
buffer_length = closest_power_of_2((latency * mix_rate / 1000));
-#ifndef NO_THREADS
- node = memnew(WorkletNode);
-#else
- node = memnew(ScriptProcessorNode);
-#endif
- buffer_length = node->create(buffer_length, channel_count);
+ Error err = create(buffer_length, channel_count);
+ if (err != OK) {
+ return err;
+ }
if (output_rb) {
memdelete_arr(output_rb);
}
@@ -134,19 +132,17 @@ Error AudioDriverJavaScript::init() {
}
void AudioDriverJavaScript::start() {
- if (node) {
- node->start(output_rb, memarr_len(output_rb), input_rb, memarr_len(input_rb));
- }
+ start(output_rb, memarr_len(output_rb), input_rb, memarr_len(input_rb));
}
void AudioDriverJavaScript::resume() {
- if (state == 0) { // 'suspended'
+ if (audio_context.state == 0) { // 'suspended'
godot_audio_resume();
}
}
float AudioDriverJavaScript::get_latency() {
- return output_latency + (float(buffer_length) / mix_rate);
+ return audio_context.output_latency + (float(buffer_length) / mix_rate);
}
int AudioDriverJavaScript::get_mix_rate() const {
@@ -157,24 +153,8 @@ AudioDriver::SpeakerMode AudioDriverJavaScript::get_speaker_mode() const {
return get_speaker_mode_by_total_channels(channel_count);
}
-void AudioDriverJavaScript::lock() {
- if (node) {
- node->unlock();
- }
-}
-
-void AudioDriverJavaScript::unlock() {
- if (node) {
- node->unlock();
- }
-}
-
void AudioDriverJavaScript::finish() {
- if (node) {
- node->finish();
- memdelete(node);
- node = nullptr;
- }
+ finish_driver();
if (output_rb) {
memdelete_arr(output_rb);
output_rb = nullptr;
@@ -203,41 +183,66 @@ Error AudioDriverJavaScript::capture_stop() {
return OK;
}
-AudioDriverJavaScript::AudioDriverJavaScript() {
- singleton = this;
-}
-
#ifdef NO_THREADS
/// ScriptProcessorNode implementation
-void AudioDriverJavaScript::ScriptProcessorNode::_process_callback() {
- AudioDriverJavaScript::singleton->_audio_driver_capture();
- AudioDriverJavaScript::singleton->_audio_driver_process();
+AudioDriverScriptProcessor *AudioDriverScriptProcessor::singleton = nullptr;
+
+void AudioDriverScriptProcessor::_process_callback() {
+ AudioDriverScriptProcessor::singleton->_audio_driver_capture();
+ AudioDriverScriptProcessor::singleton->_audio_driver_process();
}
-int AudioDriverJavaScript::ScriptProcessorNode::create(int p_buffer_samples, int p_channels) {
- return godot_audio_script_create(p_buffer_samples, p_channels);
+Error AudioDriverScriptProcessor::create(int &p_buffer_samples, int p_channels) {
+ if (!godot_audio_has_script_processor()) {
+ return ERR_UNAVAILABLE;
+ }
+ return (Error)godot_audio_script_create(&p_buffer_samples, p_channels);
}
-void AudioDriverJavaScript::ScriptProcessorNode::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) {
+void AudioDriverScriptProcessor::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) {
godot_audio_script_start(p_in_buf, p_in_buf_size, p_out_buf, p_out_buf_size, &_process_callback);
}
+
+/// AudioWorkletNode implementation (no threads)
+AudioDriverWorklet *AudioDriverWorklet::singleton = nullptr;
+
+Error AudioDriverWorklet::create(int &p_buffer_size, int p_channels) {
+ if (!godot_audio_has_worklet()) {
+ return ERR_UNAVAILABLE;
+ }
+ return (Error)godot_audio_worklet_create(p_channels);
+}
+
+void AudioDriverWorklet::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) {
+ _audio_driver_process();
+ godot_audio_worklet_start_no_threads(p_out_buf, p_out_buf_size, &_process_callback, p_in_buf, p_in_buf_size, &_capture_callback);
+}
+
+void AudioDriverWorklet::_process_callback(int p_pos, int p_samples) {
+ AudioDriverWorklet *driver = AudioDriverWorklet::singleton;
+ driver->_audio_driver_process(p_pos, p_samples);
+}
+
+void AudioDriverWorklet::_capture_callback(int p_pos, int p_samples) {
+ AudioDriverWorklet *driver = AudioDriverWorklet::singleton;
+ driver->_audio_driver_capture(p_pos, p_samples);
+}
#else
-/// AudioWorkletNode implementation
-void AudioDriverJavaScript::WorkletNode::_audio_thread_func(void *p_data) {
- AudioDriverJavaScript::WorkletNode *obj = static_cast<AudioDriverJavaScript::WorkletNode *>(p_data);
- AudioDriverJavaScript *driver = AudioDriverJavaScript::singleton;
- const int out_samples = memarr_len(driver->output_rb);
- const int in_samples = memarr_len(driver->input_rb);
+/// AudioWorkletNode implementation (threads)
+void AudioDriverWorklet::_audio_thread_func(void *p_data) {
+ AudioDriverWorklet *driver = static_cast<AudioDriverWorklet *>(p_data);
+ const int out_samples = memarr_len(driver->get_output_rb());
+ const int in_samples = memarr_len(driver->get_input_rb());
int wpos = 0;
int to_write = out_samples;
int rpos = 0;
int to_read = 0;
int32_t step = 0;
- while (!obj->quit) {
+ while (!driver->quit) {
if (to_read) {
driver->lock();
driver->_audio_driver_capture(rpos, to_read);
- godot_audio_worklet_state_add(obj->state, STATE_SAMPLES_IN, -to_read);
+ godot_audio_worklet_state_add(driver->state, STATE_SAMPLES_IN, -to_read);
driver->unlock();
rpos += to_read;
if (rpos >= in_samples) {
@@ -247,38 +252,40 @@ void AudioDriverJavaScript::WorkletNode::_audio_thread_func(void *p_data) {
if (to_write) {
driver->lock();
driver->_audio_driver_process(wpos, to_write);
- godot_audio_worklet_state_add(obj->state, STATE_SAMPLES_OUT, to_write);
+ godot_audio_worklet_state_add(driver->state, STATE_SAMPLES_OUT, to_write);
driver->unlock();
wpos += to_write;
if (wpos >= out_samples) {
wpos -= out_samples;
}
}
- step = godot_audio_worklet_state_wait(obj->state, STATE_PROCESS, step, 1);
- to_write = out_samples - godot_audio_worklet_state_get(obj->state, STATE_SAMPLES_OUT);
- to_read = godot_audio_worklet_state_get(obj->state, STATE_SAMPLES_IN);
+ step = godot_audio_worklet_state_wait(driver->state, STATE_PROCESS, step, 1);
+ to_write = out_samples - godot_audio_worklet_state_get(driver->state, STATE_SAMPLES_OUT);
+ to_read = godot_audio_worklet_state_get(driver->state, STATE_SAMPLES_IN);
}
}
-int AudioDriverJavaScript::WorkletNode::create(int p_buffer_size, int p_channels) {
- godot_audio_worklet_create(p_channels);
- return p_buffer_size;
+Error AudioDriverWorklet::create(int &p_buffer_size, int p_channels) {
+ if (!godot_audio_has_worklet()) {
+ return ERR_UNAVAILABLE;
+ }
+ return (Error)godot_audio_worklet_create(p_channels);
}
-void AudioDriverJavaScript::WorkletNode::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) {
+void AudioDriverWorklet::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) {
godot_audio_worklet_start(p_in_buf, p_in_buf_size, p_out_buf, p_out_buf_size, state);
thread.start(_audio_thread_func, this);
}
-void AudioDriverJavaScript::WorkletNode::lock() {
+void AudioDriverWorklet::lock() {
mutex.lock();
}
-void AudioDriverJavaScript::WorkletNode::unlock() {
+void AudioDriverWorklet::unlock() {
mutex.unlock();
}
-void AudioDriverJavaScript::WorkletNode::finish() {
+void AudioDriverWorklet::finish_driver() {
quit = true; // Ask thread to quit.
thread.wait_to_finish();
}
diff --git a/platform/javascript/audio_driver_javascript.h b/platform/javascript/audio_driver_javascript.h
index 393693640f..6a0b4bcb0e 100644
--- a/platform/javascript/audio_driver_javascript.h
+++ b/platform/javascript/audio_driver_javascript.h
@@ -38,52 +38,15 @@
#include "godot_audio.h"
class AudioDriverJavaScript : public AudioDriver {
-public:
- class AudioNode {
- public:
- virtual int create(int p_buffer_size, int p_output_channels) = 0;
- virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) = 0;
- virtual void finish() {}
- virtual void lock() {}
- virtual void unlock() {}
- virtual ~AudioNode() {}
- };
-
- class WorkletNode : public AudioNode {
- private:
- enum {
- STATE_LOCK,
- STATE_PROCESS,
- STATE_SAMPLES_IN,
- STATE_SAMPLES_OUT,
- STATE_MAX,
- };
- Mutex mutex;
- Thread thread;
- bool quit = false;
- int32_t state[STATE_MAX] = { 0 };
-
- static void _audio_thread_func(void *p_data);
-
- public:
- int create(int p_buffer_size, int p_output_channels) override;
- void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override;
- void finish() override;
- void lock() override;
- void unlock() override;
- };
-
- class ScriptProcessorNode : public AudioNode {
- private:
- static void _process_callback();
-
- public:
- int create(int p_buffer_samples, int p_channels) override;
- void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override;
- };
-
private:
- AudioNode *node = nullptr;
+ struct AudioContext {
+ bool inited = false;
+ float output_latency = 0.0;
+ int state = -1;
+ int channel_count = 0;
+ int mix_rate = 0;
+ };
+ static AudioContext audio_context;
float *output_rb = nullptr;
float *input_rb = nullptr;
@@ -91,36 +54,108 @@ private:
int buffer_length = 0;
int mix_rate = 0;
int channel_count = 0;
- int state = 0;
- float output_latency = 0.0;
static void _state_change_callback(int p_state);
static void _latency_update_callback(float p_latency);
+ static AudioDriverJavaScript *singleton;
+
protected:
void _audio_driver_process(int p_from = 0, int p_samples = 0);
void _audio_driver_capture(int p_from = 0, int p_samples = 0);
+ float *get_output_rb() const { return output_rb; }
+ float *get_input_rb() const { return input_rb; }
+
+ virtual Error create(int &p_buffer_samples, int p_channels) = 0;
+ virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) = 0;
+ virtual void finish_driver() {}
public:
static bool is_available();
- static AudioDriverJavaScript *singleton;
+ virtual Error init() final;
+ virtual void start() final;
+ virtual void finish() final;
+
+ virtual float get_latency() override;
+ virtual int get_mix_rate() const override;
+ virtual SpeakerMode get_speaker_mode() const override;
+
+ virtual Error capture_start() override;
+ virtual Error capture_stop() override;
+
+ static void resume();
+
+ AudioDriverJavaScript() {}
+};
+
+#ifdef NO_THREADS
+class AudioDriverScriptProcessor : public AudioDriverJavaScript {
+private:
+ static void _process_callback();
+
+ static AudioDriverScriptProcessor *singleton;
+
+protected:
+ Error create(int &p_buffer_samples, int p_channels) override;
+ void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override;
+
+public:
+ virtual const char *get_name() const override { return "ScriptProcessor"; }
+
+ virtual void lock() override {}
+ virtual void unlock() override {}
+
+ AudioDriverScriptProcessor() { singleton = this; }
+};
+
+class AudioDriverWorklet : public AudioDriverJavaScript {
+private:
+ static void _process_callback(int p_pos, int p_samples);
+ static void _capture_callback(int p_pos, int p_samples);
+
+ static AudioDriverWorklet *singleton;
+
+protected:
+ virtual Error create(int &p_buffer_size, int p_output_channels) override;
+ virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override;
- virtual const char *get_name() const;
+public:
+ virtual const char *get_name() const override { return "AudioWorklet"; }
+
+ virtual void lock() override {}
+ virtual void unlock() override {}
- virtual Error init();
- virtual void start();
- void resume();
- virtual float get_latency();
- virtual int get_mix_rate() const;
- virtual SpeakerMode get_speaker_mode() const;
- virtual void lock();
- virtual void unlock();
- virtual void finish();
+ AudioDriverWorklet() { singleton = this; }
+};
+#else
+class AudioDriverWorklet : public AudioDriverJavaScript {
+private:
+ enum {
+ STATE_LOCK,
+ STATE_PROCESS,
+ STATE_SAMPLES_IN,
+ STATE_SAMPLES_OUT,
+ STATE_MAX,
+ };
+ Mutex mutex;
+ Thread thread;
+ bool quit = false;
+ int32_t state[STATE_MAX] = { 0 };
- virtual Error capture_start();
- virtual Error capture_stop();
+ static void _audio_thread_func(void *p_data);
- AudioDriverJavaScript();
+protected:
+ virtual Error create(int &p_buffer_size, int p_output_channels) override;
+ virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override;
+ virtual void finish_driver() override;
+
+public:
+ virtual const char *get_name() const override { return "AudioWorklet"; }
+
+ void lock() override;
+ void unlock() override;
};
#endif
+
+#endif
diff --git a/platform/javascript/godot_audio.h b/platform/javascript/godot_audio.h
index de8f046bbd..eba025ab63 100644
--- a/platform/javascript/godot_audio.h
+++ b/platform/javascript/godot_audio.h
@@ -38,6 +38,8 @@ extern "C" {
#include "stddef.h"
extern int godot_audio_is_available();
+extern int godot_audio_has_worklet();
+extern int godot_audio_has_script_processor();
extern int godot_audio_init(int *p_mix_rate, int p_latency, void (*_state_cb)(int), void (*_latency_cb)(float));
extern void godot_audio_resume();
@@ -46,14 +48,15 @@ extern void godot_audio_capture_stop();
// Worklet
typedef int32_t GodotAudioState[4];
-extern void godot_audio_worklet_create(int p_channels);
+extern int godot_audio_worklet_create(int p_channels);
extern void godot_audio_worklet_start(float *p_in_buf, int p_in_size, float *p_out_buf, int p_out_size, GodotAudioState p_state);
+extern void godot_audio_worklet_start_no_threads(float *p_out_buf, int p_out_size, void (*p_out_cb)(int p_pos, int p_frames), float *p_in_buf, int p_in_size, void (*p_in_cb)(int p_pos, int p_frames));
extern int godot_audio_worklet_state_add(GodotAudioState p_state, int p_idx, int p_value);
extern int godot_audio_worklet_state_get(GodotAudioState p_state, int p_idx);
extern int godot_audio_worklet_state_wait(int32_t *p_state, int p_idx, int32_t p_expected, int p_timeout);
// Script
-extern int godot_audio_script_create(int p_buffer_size, int p_channels);
+extern int godot_audio_script_create(int *p_buffer_size, int p_channels);
extern void godot_audio_script_start(float *p_in_buf, int p_in_size, float *p_out_buf, int p_out_size, void (*p_cb)());
#ifdef __cplusplus
diff --git a/platform/javascript/js/libs/audio.worklet.js b/platform/javascript/js/libs/audio.worklet.js
index df475ba52d..52b3aedf8c 100644
--- a/platform/javascript/js/libs/audio.worklet.js
+++ b/platform/javascript/js/libs/audio.worklet.js
@@ -29,15 +29,16 @@
/*************************************************************************/
class RingBuffer {
- constructor(p_buffer, p_state) {
+ constructor(p_buffer, p_state, p_threads) {
this.buffer = p_buffer;
this.avail = p_state;
+ this.threads = p_threads;
this.rpos = 0;
this.wpos = 0;
}
data_left() {
- return Atomics.load(this.avail, 0);
+ return this.threads ? Atomics.load(this.avail, 0) : this.avail;
}
space_left() {
@@ -55,10 +56,16 @@ class RingBuffer {
to_write -= high;
this.rpos = 0;
}
- output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from);
+ if (to_write) {
+ output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from);
+ }
this.rpos += to_write;
- Atomics.add(this.avail, 0, -output.length);
- Atomics.notify(this.avail, 0);
+ if (this.threads) {
+ Atomics.add(this.avail, 0, -output.length);
+ Atomics.notify(this.avail, 0);
+ } else {
+ this.avail -= output.length;
+ }
}
write(p_buffer) {
@@ -77,14 +84,19 @@ class RingBuffer {
this.buffer.set(low);
this.wpos = low.length;
}
- Atomics.add(this.avail, 0, to_write);
- Atomics.notify(this.avail, 0);
+ if (this.threads) {
+ Atomics.add(this.avail, 0, to_write);
+ Atomics.notify(this.avail, 0);
+ } else {
+ this.avail += to_write;
+ }
}
}
class GodotProcessor extends AudioWorkletProcessor {
constructor() {
super();
+ this.threads = false;
this.running = true;
this.lock = null;
this.notifier = null;
@@ -100,24 +112,31 @@ class GodotProcessor extends AudioWorkletProcessor {
}
process_notify() {
- Atomics.add(this.notifier, 0, 1);
- Atomics.notify(this.notifier, 0);
+ if (this.notifier) {
+ Atomics.add(this.notifier, 0, 1);
+ Atomics.notify(this.notifier, 0);
+ }
}
parse_message(p_cmd, p_data) {
if (p_cmd === 'start' && p_data) {
const state = p_data[0];
let idx = 0;
+ this.threads = true;
this.lock = state.subarray(idx, ++idx);
this.notifier = state.subarray(idx, ++idx);
const avail_in = state.subarray(idx, ++idx);
const avail_out = state.subarray(idx, ++idx);
- this.input = new RingBuffer(p_data[1], avail_in);
- this.output = new RingBuffer(p_data[2], avail_out);
+ this.input = new RingBuffer(p_data[1], avail_in, true);
+ this.output = new RingBuffer(p_data[2], avail_out, true);
} else if (p_cmd === 'stop') {
this.running = false;
this.output = null;
this.input = null;
+ } else if (p_cmd === 'start_nothreads') {
+ this.output = new RingBuffer(p_data[0], p_data[0].length, false);
+ } else if (p_cmd === 'chunk') {
+ this.output.write(p_data);
}
}
@@ -139,7 +158,10 @@ class GodotProcessor extends AudioWorkletProcessor {
if (this.input_buffer.length !== chunk) {
this.input_buffer = new Float32Array(chunk);
}
- if (this.input.space_left() >= chunk) {
+ if (!this.threads) {
+ GodotProcessor.write_input(this.input_buffer, input);
+ this.port.postMessage({ 'cmd': 'input', 'data': this.input_buffer });
+ } else if (this.input.space_left() >= chunk) {
GodotProcessor.write_input(this.input_buffer, input);
this.input.write(this.input_buffer);
} else {
@@ -156,6 +178,9 @@ class GodotProcessor extends AudioWorkletProcessor {
if (this.output.data_left() >= chunk) {
this.output.read(this.output_buffer);
GodotProcessor.write_output(output, this.output_buffer);
+ if (!this.threads) {
+ this.port.postMessage({ 'cmd': 'read', 'data': chunk });
+ }
} else {
this.port.postMessage('Output buffer has not enough frames! Skipping output frame.');
}
diff --git a/platform/javascript/js/libs/library_godot_audio.js b/platform/javascript/js/libs/library_godot_audio.js
index c9dae1a7af..f6010fd12a 100644
--- a/platform/javascript/js/libs/library_godot_audio.js
+++ b/platform/javascript/js/libs/library_godot_audio.js
@@ -159,6 +159,16 @@ const GodotAudio = {
return 1;
},
+ godot_audio_has_worklet__sig: 'i',
+ godot_audio_has_worklet: function () {
+ return (GodotAudio.ctx && GodotAudio.ctx.audioWorklet) ? 1 : 0;
+ },
+
+ godot_audio_has_script_processor__sig: 'i',
+ godot_audio_has_script_processor: function () {
+ return (GodotAudio.ctx && GodotAudio.ctx.createScriptProcessor) ? 1 : 0;
+ },
+
godot_audio_init__sig: 'iiiii',
godot_audio_init: function (p_mix_rate, p_latency, p_state_change, p_latency_update) {
const statechange = GodotRuntime.get_func(p_state_change);
@@ -209,6 +219,7 @@ const GodotAudioWorklet = {
$GodotAudioWorklet: {
promise: null,
worklet: null,
+ ring_buffer: null,
create: function (channels) {
const path = GodotConfig.locate_file('godot.audio.worklet.js');
@@ -239,6 +250,86 @@ const GodotAudioWorklet = {
});
},
+ start_no_threads: function (p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback) {
+ function RingBuffer() {
+ let wpos = 0;
+ let rpos = 0;
+ let pending_samples = 0;
+ const wbuf = new Float32Array(p_out_size);
+
+ function send(port) {
+ if (pending_samples === 0) {
+ return;
+ }
+ const buffer = GodotRuntime.heapSub(HEAPF32, p_out_buf, p_out_size);
+ const size = buffer.length;
+ const tot_sent = pending_samples;
+ out_callback(wpos, pending_samples);
+ if (wpos + pending_samples >= size) {
+ const high = size - wpos;
+ wbuf.set(buffer.subarray(wpos, size));
+ pending_samples -= high;
+ wpos = 0;
+ }
+ if (pending_samples > 0) {
+ wbuf.set(buffer.subarray(wpos, wpos + pending_samples), tot_sent - pending_samples);
+ }
+ port.postMessage({ 'cmd': 'chunk', 'data': wbuf.subarray(0, tot_sent) });
+ wpos += pending_samples;
+ pending_samples = 0;
+ }
+ this.receive = function (recv_buf) {
+ const buffer = GodotRuntime.heapSub(HEAPF32, p_in_buf, p_in_size);
+ const from = rpos;
+ let to_write = recv_buf.length;
+ let high = 0;
+ if (rpos + to_write >= p_in_size) {
+ high = p_in_size - rpos;
+ buffer.set(recv_buf.subarray(0, high), rpos);
+ to_write -= high;
+ rpos = 0;
+ }
+ if (to_write) {
+ buffer.set(recv_buf.subarray(high, to_write), rpos);
+ }
+ in_callback(from, recv_buf.length);
+ rpos += to_write;
+ };
+ this.consumed = function (size, port) {
+ pending_samples += size;
+ send(port);
+ };
+ }
+ GodotAudioWorklet.ring_buffer = new RingBuffer();
+ GodotAudioWorklet.promise.then(function () {
+ const node = GodotAudioWorklet.worklet;
+ const buffer = GodotRuntime.heapSlice(HEAPF32, p_out_buf, p_out_size);
+ node.connect(GodotAudio.ctx.destination);
+ node.port.postMessage({
+ 'cmd': 'start_nothreads',
+ 'data': [buffer, p_in_size],
+ });
+ node.port.onmessage = function (event) {
+ if (!GodotAudioWorklet.worklet) {
+ return;
+ }
+ if (event.data['cmd'] === 'read') {
+ const read = event.data['data'];
+ GodotAudioWorklet.ring_buffer.consumed(read, GodotAudioWorklet.worklet.port);
+ } else if (event.data['cmd'] === 'input') {
+ const buf = event.data['data'];
+ if (buf.length > p_in_size) {
+ GodotRuntime.error('Input chunk is too big');
+ return;
+ }
+ GodotAudioWorklet.ring_buffer.receive(buf);
+ } else {
+ GodotRuntime.error(event.data);
+ }
+ };
+ });
+ },
+
get_node: function () {
return GodotAudioWorklet.worklet;
},
@@ -262,9 +353,15 @@ const GodotAudioWorklet = {
},
},
- godot_audio_worklet_create__sig: 'vi',
+ godot_audio_worklet_create__sig: 'ii',
godot_audio_worklet_create: function (channels) {
- GodotAudioWorklet.create(channels);
+ try {
+ GodotAudioWorklet.create(channels);
+ } catch (e) {
+ GodotRuntime.error('Error starting AudioDriverWorklet', e);
+ return 1;
+ }
+ return 0;
},
godot_audio_worklet_start__sig: 'viiiii',
@@ -275,6 +372,13 @@ const GodotAudioWorklet = {
GodotAudioWorklet.start(in_buffer, out_buffer, state);
},
+ godot_audio_worklet_start_no_threads__sig: 'viiiiii',
+ godot_audio_worklet_start_no_threads: function (p_out_buf, p_out_size, p_out_callback, p_in_buf, p_in_size, p_in_callback) {
+ const out_callback = GodotRuntime.get_func(p_out_callback);
+ const in_callback = GodotRuntime.get_func(p_in_callback);
+ GodotAudioWorklet.start_no_threads(p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback);
+ },
+
godot_audio_worklet_state_wait__sig: 'iiii',
godot_audio_worklet_state_wait: function (p_state, p_idx, p_expected, p_timeout) {
Atomics.wait(HEAP32, (p_state >> 2) + p_idx, p_expected, p_timeout);
@@ -358,7 +462,15 @@ const GodotAudioScript = {
godot_audio_script_create__sig: 'iii',
godot_audio_script_create: function (buffer_length, channel_count) {
- return GodotAudioScript.create(buffer_length, channel_count);
+ const buf_len = GodotRuntime.getHeapValue(buffer_length, 'i32');
+ try {
+ const out_len = GodotAudioScript.create(buf_len, channel_count);
+ GodotRuntime.setHeapValue(buffer_length, out_len, 'i32');
+ } catch (e) {
+ GodotRuntime.error('Error starting AudioDriverScriptProcessor', e);
+ return 1;
+ }
+ return 0;
},
godot_audio_script_start__sig: 'viiiii',
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 95c5909d50..4431bd5f1b 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -63,9 +63,7 @@ void OS_JavaScript::initialize() {
}
void OS_JavaScript::resume_audio() {
- if (audio_driver_javascript) {
- audio_driver_javascript->resume();
- }
+ AudioDriverJavaScript::resume();
}
void OS_JavaScript::set_main_loop(MainLoop *p_main_loop) {
@@ -101,10 +99,10 @@ void OS_JavaScript::delete_main_loop() {
void OS_JavaScript::finalize() {
delete_main_loop();
- if (audio_driver_javascript) {
- memdelete(audio_driver_javascript);
- audio_driver_javascript = nullptr;
+ for (AudioDriverJavaScript *driver : audio_drivers) {
+ memdelete(driver);
}
+ audio_drivers.clear();
}
// Miscellaneous
@@ -229,8 +227,13 @@ OS_JavaScript::OS_JavaScript() {
setenv("LANG", locale_ptr, true);
if (AudioDriverJavaScript::is_available()) {
- audio_driver_javascript = memnew(AudioDriverJavaScript);
- AudioDriverManager::add_driver(audio_driver_javascript);
+#ifdef NO_THREADS
+ audio_drivers.push_back(memnew(AudioDriverScriptProcessor));
+#endif
+ audio_drivers.push_back(memnew(AudioDriverWorklet));
+ }
+ for (int i = 0; i < audio_drivers.size(); i++) {
+ AudioDriverManager::add_driver(audio_drivers[i]);
}
idb_available = godot_js_os_fs_is_persistent();
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index efac2dbca7..d053082d92 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -40,7 +40,7 @@
class OS_JavaScript : public OS_Unix {
MainLoop *main_loop = nullptr;
- AudioDriverJavaScript *audio_driver_javascript = nullptr;
+ List<AudioDriverJavaScript *> audio_drivers;
bool idb_is_syncing = false;
bool idb_available = false;
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp
index 1723026849..6402702415 100644
--- a/platform/windows/display_server_windows.cpp
+++ b/platform/windows/display_server_windows.cpp
@@ -955,6 +955,11 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
_update_window_style(p_window, false);
MoveWindow(wd.hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
+
+ if (restore_mouse_trails > 1) {
+ SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0);
+ restore_mouse_trails = 0;
+ }
} else if (p_mode == WINDOW_MODE_WINDOWED) {
ShowWindow(wd.hWnd, SW_RESTORE);
wd.maximized = false;
@@ -994,6 +999,13 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
_update_window_style(false);
MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE);
+
+ // If the user has mouse trails enabled in windows, then sometimes the cursor disappears in fullscreen mode.
+ // Save number of trails so we can restore when exiting, then turn off mouse trails
+ SystemParametersInfoA(SPI_GETMOUSETRAILS, 0, &restore_mouse_trails, 0);
+ if (restore_mouse_trails > 1) {
+ SystemParametersInfoA(SPI_SETMOUSETRAILS, 0, 0, 0);
+ }
}
}
@@ -3395,4 +3407,8 @@ DisplayServerWindows::~DisplayServerWindows() {
memdelete(context_vulkan);
}
#endif
+
+ if (restore_mouse_trails > 1) {
+ SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0);
+ }
}
diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h
index 06014fbabe..c02a90c543 100644
--- a/platform/windows/display_server_windows.h
+++ b/platform/windows/display_server_windows.h
@@ -403,6 +403,7 @@ class DisplayServerWindows : public DisplayServer {
void _get_window_style(bool p_main_window, bool p_fullscreen, bool p_borderless, bool p_resizable, bool p_maximized, bool p_no_activate_focus, DWORD &r_style, DWORD &r_style_ex);
MouseMode mouse_mode;
+ int restore_mouse_trails = 0;
bool alt_mem = false;
bool gr_mem = false;
bool shift_mem = false;
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 2a0a509d43..78b7be8a30 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -557,8 +557,27 @@ String OS_Windows::get_stdin_string(bool p_block) {
}
Error OS_Windows::shell_open(String p_uri) {
- ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL);
- return OK;
+ INT_PTR ret = (INT_PTR)ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL);
+ if (ret > 32) {
+ return OK;
+ } else {
+ switch (ret) {
+ case ERROR_FILE_NOT_FOUND:
+ case SE_ERR_DLLNOTFOUND:
+ return ERR_FILE_NOT_FOUND;
+ case ERROR_PATH_NOT_FOUND:
+ return ERR_FILE_BAD_PATH;
+ case ERROR_BAD_FORMAT:
+ return ERR_FILE_CORRUPT;
+ case SE_ERR_ACCESSDENIED:
+ return ERR_UNAUTHORIZED;
+ case 0:
+ case SE_ERR_OOM:
+ return ERR_OUT_OF_MEMORY;
+ default:
+ return FAILED;
+ }
+ }
}
String OS_Windows::get_locale() const {
diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp
index d11387902a..af186072ac 100644
--- a/scene/animation/animation_blend_tree.cpp
+++ b/scene/animation/animation_blend_tree.cpp
@@ -248,27 +248,26 @@ double AnimationNodeOneShot::process(double p_time, bool p_seek) {
if (fade_in > 0) {
blend = time / fade_in;
} else {
- blend = 0; //wtf
+ blend = 0;
}
-
- } else if (!do_start && remaining < fade_out) {
- if (fade_out) {
+ } else if (!do_start && remaining <= fade_out) {
+ if (fade_out > 0) {
blend = (remaining / fade_out);
} else {
- blend = 1.0;
+ blend = 0;
}
} else {
blend = 1.0;
}
- float main_rem;
+ double main_rem;
if (mix == MIX_MODE_ADD) {
main_rem = blend_input(0, p_time, p_seek, 1.0, FILTER_IGNORE, !sync);
} else {
main_rem = blend_input(0, p_time, p_seek, 1.0 - blend, FILTER_BLEND, !sync);
}
- float os_rem = blend_input(1, os_seek ? time : p_time, os_seek, blend, FILTER_PASS, false);
+ double os_rem = blend_input(1, os_seek ? time : p_time, os_seek, blend, FILTER_PASS, false);
if (do_start) {
remaining = os_rem;
@@ -718,7 +717,7 @@ double AnimationNodeTransition::process(double p_time, bool p_seek) {
} else { // cross-fading from prev to current
- float blend = xfade ? (prev_xfading / xfade) : 1;
+ float blend = xfade == 0 ? 0 : (prev_xfading / xfade);
if (!p_seek && switched) { //just switched, seek to start of current
diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp
index 88fb960164..9ca8d478b1 100644
--- a/scene/animation/animation_tree.cpp
+++ b/scene/animation/animation_tree.cpp
@@ -958,7 +958,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
Variant::interpolate(t->value, value, blend, t->value);
- } else if (delta != 0) {
+ } else {
List<int> indices;
a->value_track_get_key_indices(i, time, delta, &indices);
diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp
index e7769f9372..4dfd6902e6 100644
--- a/scene/gui/code_edit.cpp
+++ b/scene/gui/code_edit.cpp
@@ -467,7 +467,7 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
}
/* MISC */
- if (k->is_action("ui_cancel", true)) {
+ if (!code_hint.is_empty() && k->is_action("ui_cancel", true)) {
set_code_hint("");
accept_event();
return;
@@ -1725,14 +1725,17 @@ bool CodeEdit::is_code_completion_enabled() const {
void CodeEdit::set_code_completion_prefixes(const TypedArray<String> &p_prefixes) {
code_completion_prefixes.clear();
for (int i = 0; i < p_prefixes.size(); i++) {
- code_completion_prefixes.insert(p_prefixes[i]);
+ const String prefix = p_prefixes[i];
+
+ ERR_CONTINUE_MSG(prefix.is_empty(), "Code completion prefix cannot be empty.");
+ code_completion_prefixes.insert(prefix[0]);
}
}
TypedArray<String> CodeEdit::get_code_completion_prefixes() const {
TypedArray<String> prefixes;
- for (Set<String>::Element *E = code_completion_prefixes.front(); E; E = E->next()) {
- prefixes.push_back(E->get());
+ for (const Set<char32_t>::Element *E = code_completion_prefixes.front(); E; E = E->next()) {
+ prefixes.push_back(String::chr(E->get()));
}
return prefixes;
}
@@ -1795,9 +1798,9 @@ void CodeEdit::request_code_completion(bool p_force) {
String line = get_line(get_caret_line());
int ofs = CLAMP(get_caret_column(), 0, line.length());
- if (ofs > 0 && (is_in_string(get_caret_line(), ofs) != -1 || _is_char(line[ofs - 1]) || code_completion_prefixes.has(String::chr(line[ofs - 1])))) {
+ if (ofs > 0 && (is_in_string(get_caret_line(), ofs) != -1 || _is_char(line[ofs - 1]) || code_completion_prefixes.has(line[ofs - 1]))) {
emit_signal(SNAME("request_code_completion"));
- } else if (ofs > 1 && line[ofs - 1] == ' ' && code_completion_prefixes.has(String::chr(line[ofs - 2]))) {
+ } else if (ofs > 1 && line[ofs - 1] == ' ' && code_completion_prefixes.has(line[ofs - 2])) {
emit_signal(SNAME("request_code_completion"));
}
}
@@ -1969,7 +1972,7 @@ void CodeEdit::confirm_code_completion(bool p_replace) {
end_complex_operation();
cancel_code_completion();
- if (code_completion_prefixes.has(String::chr(last_completion_char))) {
+ if (code_completion_prefixes.has(last_completion_char)) {
request_code_completion();
}
}
@@ -2764,7 +2767,7 @@ void CodeEdit::_filter_code_completion_candidates_impl() {
bool prev_is_word = false;
/* Cancel if we are at the close of a string. */
- if (in_string == -1 && first_quote_col == cofs - 1) {
+ if (caret_column > 0 && in_string == -1 && first_quote_col == cofs - 1) {
cancel_code_completion();
return;
/* In a string, therefore we are trying to complete the string text. */
@@ -2790,9 +2793,9 @@ void CodeEdit::_filter_code_completion_candidates_impl() {
/* If all else fails, check for a prefix. */
/* Single space between caret and prefix is okay. */
bool prev_is_prefix = false;
- if (cofs > 0 && code_completion_prefixes.has(String::chr(line[cofs - 1]))) {
+ if (cofs > 0 && code_completion_prefixes.has(line[cofs - 1])) {
prev_is_prefix = true;
- } else if (cofs > 1 && line[cofs - 1] == ' ' && code_completion_prefixes.has(String::chr(line[cofs - 2]))) {
+ } else if (cofs > 1 && line[cofs - 1] == ' ' && code_completion_prefixes.has(line[cofs - 2])) {
prev_is_prefix = true;
}
diff --git a/scene/gui/code_edit.h b/scene/gui/code_edit.h
index 740548d559..d8eccb7d32 100644
--- a/scene/gui/code_edit.h
+++ b/scene/gui/code_edit.h
@@ -214,7 +214,7 @@ private:
int code_completion_longest_line = 0;
Rect2i code_completion_rect;
- Set<String> code_completion_prefixes;
+ Set<char32_t> code_completion_prefixes;
List<ScriptCodeCompletionOption> code_completion_option_submitted;
List<ScriptCodeCompletionOption> code_completion_option_sources;
String code_completion_base;
diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp
index c97434f69b..11941529cd 100644
--- a/scene/gui/container.cpp
+++ b/scene/gui/container.cpp
@@ -96,17 +96,18 @@ void Container::fit_child_in_rect(Control *p_child, const Rect2 &p_rect) {
ERR_FAIL_COND(!p_child);
ERR_FAIL_COND(p_child->get_parent() != this);
+ bool rtl = is_layout_rtl();
Size2 minsize = p_child->get_combined_minimum_size();
Rect2 r = p_rect;
if (!(p_child->get_h_size_flags() & SIZE_FILL)) {
r.size.x = minsize.width;
if (p_child->get_h_size_flags() & SIZE_SHRINK_END) {
- r.position.x += p_rect.size.width - minsize.width;
+ r.position.x += rtl ? 0 : (p_rect.size.width - minsize.width);
} else if (p_child->get_h_size_flags() & SIZE_SHRINK_CENTER) {
r.position.x += Math::floor((p_rect.size.x - minsize.width) / 2);
} else {
- r.position.x += 0;
+ r.position.x += rtl ? (p_rect.size.width - minsize.width) : 0;
}
}
diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp
index 5600816b2d..18cde25e55 100644
--- a/scene/gui/label.cpp
+++ b/scene/gui/label.cpp
@@ -92,8 +92,12 @@ void Label::_shape() {
const Ref<Font> &font = get_theme_font(SNAME("font"));
int font_size = get_theme_font_size(SNAME("font_size"));
ERR_FAIL_COND(font.is_null());
- TS->shaped_text_add_string(text_rid, (uppercase) ? xl_text.to_upper() : xl_text, font->get_rids(), font_size, opentype_features, (language != "") ? language : TranslationServer::get_singleton()->get_tool_locale());
- TS->shaped_text_set_bidi_override(text_rid, structured_text_parser(st_parser, st_args, xl_text));
+ String text = (uppercase) ? xl_text.to_upper() : xl_text;
+ if (visible_chars >= 0) {
+ text = text.substr(0, visible_chars);
+ }
+ TS->shaped_text_add_string(text_rid, text, font->get_rids(), font_size, opentype_features, (language != "") ? language : TranslationServer::get_singleton()->get_tool_locale());
+ TS->shaped_text_set_bidi_override(text_rid, structured_text_parser(st_parser, st_args, text));
dirty = false;
lines_dirty = true;
}
@@ -258,11 +262,18 @@ void Label::_notification(int p_what) {
return; // Nothing new.
}
xl_text = new_text;
+ if (percent_visible < 1) {
+ visible_chars = get_total_character_count() * percent_visible;
+ }
dirty = true;
update();
}
+ if (p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED) {
+ update();
+ }
+
if (p_what == NOTIFICATION_DRAW) {
if (clip) {
RenderingServer::get_singleton()->canvas_item_set_clip(get_canvas_item(), true);
@@ -286,6 +297,7 @@ void Label::_notification(int p_what) {
int outline_size = get_theme_constant(SNAME("outline_size"));
int shadow_outline_size = get_theme_constant(SNAME("shadow_outline_size"));
bool rtl = TS->shaped_text_get_direction(text_rid);
+ bool rtl_layout = is_layout_rtl();
style->draw(ci, Rect2(Point2(0, 0), get_size()));
@@ -342,24 +354,6 @@ void Label::_notification(int p_what) {
}
}
- int visible_glyphs = -1;
- int glyhps_drawn = 0;
- if (percent_visible < 1) {
- int total_glyphs = 0;
- for (int i = lines_skipped; i < last_line; i++) {
- const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(lines_rid[i]);
- const TextServer::Glyph *glyphs = visual.ptr();
- int gl_size = visual.size();
- for (int j = 0; j < gl_size; j++) {
- if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) {
- total_glyphs++;
- }
- }
- }
-
- visible_glyphs = MIN(total_glyphs, visible_chars);
- }
-
Vector2 ofs;
ofs.y = style->get_offset().y + vbegin;
for (int i = lines_skipped; i < last_line; i++) {
@@ -375,13 +369,21 @@ void Label::_notification(int p_what) {
}
break;
case ALIGN_LEFT: {
- ofs.x = style->get_offset().x;
+ if (rtl_layout) {
+ ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width);
+ } else {
+ ofs.x = style->get_offset().x;
+ }
} break;
case ALIGN_CENTER: {
ofs.x = int(size.width - line_size.width) / 2;
} break;
case ALIGN_RIGHT: {
- ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width);
+ if (rtl_layout) {
+ ofs.x = style->get_offset().x;
+ } else {
+ ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width);
+ }
} break;
}
@@ -407,14 +409,6 @@ void Label::_notification(int p_what) {
// Draw main text.
for (int j = 0; j < gl_size; j++) {
for (int k = 0; k < glyphs[j].repeat; k++) {
- if (visible_glyphs != -1) {
- if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) {
- if (glyhps_drawn >= visible_glyphs) {
- return;
- }
- }
- }
-
// Trim when necessary.
if (trim_data.trim_pos >= 0) {
if (rtl) {
@@ -431,7 +425,6 @@ void Label::_notification(int p_what) {
// Draw glyph outlines and shadow.
draw_glyph_outline(glyphs[j], ci, font_color, font_shadow_color, font_outline_color, shadow_outline_size, outline_size, offset, shadow_ofs);
offset.x += glyphs[j].advance;
- glyhps_drawn++;
}
}
// Draw LTR ellipsis string when necessary.
@@ -462,14 +455,6 @@ void Label::_notification(int p_what) {
// Draw main text.
for (int j = 0; j < gl_size; j++) {
for (int k = 0; k < glyphs[j].repeat; k++) {
- if (visible_glyphs != -1) {
- if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) {
- if (glyhps_drawn >= visible_glyphs) {
- return;
- }
- }
- }
-
// Trim when necessary.
if (trim_data.trim_pos >= 0) {
if (rtl) {
@@ -486,7 +471,6 @@ void Label::_notification(int p_what) {
// Draw glyph outlines and shadow.
draw_glyph(glyphs[j], ci, font_color, ofs);
ofs.x += glyphs[j].advance;
- glyhps_drawn++;
}
}
// Draw LTR ellipsis string when necessary.
@@ -709,16 +693,16 @@ String Label::get_text() const {
}
void Label::set_visible_characters(int p_amount) {
- visible_chars = p_amount;
- if (get_total_character_count() > 0) {
- percent_visible = (float)p_amount / (float)get_total_character_count();
- } else {
- percent_visible = 1.0;
- }
- if (p_amount == -1) {
- lines_dirty = true;
+ if (visible_chars != p_amount) {
+ visible_chars = p_amount;
+ if (get_total_character_count() > 0) {
+ percent_visible = (float)p_amount / (float)get_total_character_count();
+ } else {
+ percent_visible = 1.0;
+ }
+ dirty = true;
+ update();
}
- update();
}
int Label::get_visible_characters() const {
@@ -726,15 +710,17 @@ int Label::get_visible_characters() const {
}
void Label::set_percent_visible(float p_percent) {
- if (p_percent < 0 || p_percent >= 1) {
- visible_chars = -1;
- percent_visible = 1;
- lines_dirty = true;
- } else {
- visible_chars = get_total_character_count() * p_percent;
- percent_visible = p_percent;
+ if (percent_visible != p_percent) {
+ if (p_percent < 0 || p_percent >= 1) {
+ visible_chars = -1;
+ percent_visible = 1;
+ } else {
+ visible_chars = get_total_character_count() * p_percent;
+ percent_visible = p_percent;
+ }
+ dirty = true;
+ update();
}
- update();
}
float Label::get_percent_visible() const {
@@ -889,7 +875,7 @@ void Label::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "is_clipping_text");
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_overrun_behavior", PROPERTY_HINT_ENUM, "Trim Nothing,Trim Characters,Trim Words,Ellipsis,Word Ellipsis"), "set_text_overrun_behavior", "get_text_overrun_behavior");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1", PROPERTY_USAGE_EDITOR), "set_visible_characters", "get_visible_characters");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1"), "set_visible_characters", "get_visible_characters");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "percent_visible", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_percent_visible", "get_percent_visible");
ADD_PROPERTY(PropertyInfo(Variant::INT, "lines_skipped", PROPERTY_HINT_RANGE, "0,999,1"), "set_lines_skipped", "get_lines_skipped");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_lines_visible", PROPERTY_HINT_RANGE, "-1,999,1"), "set_max_lines_visible", "get_max_lines_visible");
diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp
index 0cc53a7832..ceb2092e3a 100644
--- a/scene/gui/menu_button.cpp
+++ b/scene/gui/menu_button.cpp
@@ -89,13 +89,15 @@ void MenuButton::pressed() {
emit_signal(SNAME("about_to_popup"));
Size2 size = get_size() * get_viewport()->get_canvas_transform().get_scale();
+ popup->set_size(Size2(size.width, 0));
Point2 gp = get_screen_position();
gp.y += size.y;
-
+ if (is_layout_rtl()) {
+ gp.x += size.width - popup->get_size().width;
+ }
popup->set_position(gp);
-
- popup->set_size(Size2(size.width, 0));
popup->set_parent_rect(Rect2(Point2(gp - popup->get_position()), size));
+
popup->take_mouse_focus();
popup->popup();
}
diff --git a/scene/gui/rich_text_effect.cpp b/scene/gui/rich_text_effect.cpp
index 236d106af8..076fa132c0 100644
--- a/scene/gui/rich_text_effect.cpp
+++ b/scene/gui/rich_text_effect.cpp
@@ -90,6 +90,12 @@ void CharFXTransform::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_glyph_index"), &CharFXTransform::get_glyph_index);
ClassDB::bind_method(D_METHOD("set_glyph_index", "glyph_index"), &CharFXTransform::set_glyph_index);
+ ClassDB::bind_method(D_METHOD("get_glyph_count"), &CharFXTransform::get_glyph_count);
+ ClassDB::bind_method(D_METHOD("set_glyph_count", "glyph_count"), &CharFXTransform::set_glyph_count);
+
+ ClassDB::bind_method(D_METHOD("get_glyph_flags"), &CharFXTransform::get_glyph_flags);
+ ClassDB::bind_method(D_METHOD("set_glyph_flags", "glyph_flags"), &CharFXTransform::set_glyph_flags);
+
ClassDB::bind_method(D_METHOD("get_font"), &CharFXTransform::get_font);
ClassDB::bind_method(D_METHOD("set_font", "font"), &CharFXTransform::set_font);
@@ -101,5 +107,7 @@ void CharFXTransform::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color");
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "env"), "set_environment", "get_environment");
ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_index"), "set_glyph_index", "get_glyph_index");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_count"), "set_glyph_count", "get_glyph_count");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_flags"), "set_glyph_flags", "get_glyph_flags");
ADD_PROPERTY(PropertyInfo(Variant::RID, "font"), "set_font", "get_font");
}
diff --git a/scene/gui/rich_text_effect.h b/scene/gui/rich_text_effect.h
index f5506542bb..5681f9b193 100644
--- a/scene/gui/rich_text_effect.h
+++ b/scene/gui/rich_text_effect.h
@@ -50,6 +50,8 @@ public:
double elapsed_time = 0.0f;
Dictionary environment;
uint32_t glyph_index = 0;
+ uint16_t glyph_flags = 0;
+ uint8_t glyph_count = 0;
RID font;
CharFXTransform();
@@ -57,19 +59,31 @@ public:
Vector2i get_range() { return range; }
void set_range(const Vector2i &p_range) { range = p_range; }
+
double get_elapsed_time() { return elapsed_time; }
void set_elapsed_time(double p_elapsed_time) { elapsed_time = p_elapsed_time; }
+
bool is_visible() { return visibility; }
void set_visibility(bool p_visibility) { visibility = p_visibility; }
+
bool is_outline() { return outline; }
void set_outline(bool p_outline) { outline = p_outline; }
+
Point2 get_offset() { return offset; }
void set_offset(Point2 p_offset) { offset = p_offset; }
+
Color get_color() { return color; }
void set_color(Color p_color) { color = p_color; }
uint32_t get_glyph_index() const { return glyph_index; };
void set_glyph_index(uint32_t p_glyph_index) { glyph_index = p_glyph_index; };
+
+ uint16_t get_glyph_flags() const { return glyph_index; };
+ void set_glyph_flags(uint16_t p_glyph_flags) { glyph_flags = p_glyph_flags; };
+
+ uint8_t get_glyph_count() const { return glyph_count; };
+ void set_glyph_count(uint8_t p_glyph_count) { glyph_count = p_glyph_count; };
+
RID get_font() const { return font; };
void set_font(RID p_font) { font = p_font; };
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index d4788775c5..eb88570663 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -399,8 +399,9 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
// Shape current paragraph.
String text;
Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr;
+ int remaining_characters = visible_characters - l.char_offset;
for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) {
- if (visible_characters >= 0 && l.char_offset + l.char_count > visible_characters) {
+ if (visible_characters >= 0 && remaining_characters <= 0) {
break;
}
switch (it->type) {
@@ -427,7 +428,8 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
}
l.text_buf->add_string("\n", font, font_size, Dictionary(), "");
text += "\n";
- l.char_count += 1;
+ l.char_count++;
+ remaining_characters--;
} break;
case ITEM_TEXT: {
ItemText *t = (ItemText *)it;
@@ -442,9 +444,10 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
Dictionary font_ftr = _find_font_features(it);
String lang = _find_language(it);
String tx = t->text;
- if (visible_characters >= 0 && l.char_offset + l.char_count + tx.length() > visible_characters) {
- tx = tx.substr(0, l.char_offset + l.char_count + tx.length() - visible_characters);
+ if (visible_characters >= 0 && remaining_characters >= 0) {
+ tx = tx.substr(0, remaining_characters);
}
+ remaining_characters -= tx.length();
l.text_buf->add_string(tx, font, font_size, font_ftr, lang);
text += tx;
@@ -454,7 +457,8 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
ItemImage *img = (ItemImage *)it;
l.text_buf->add_object((uint64_t)it, img->image->get_size(), img->inline_align, 1);
text += String::chr(0xfffc);
- l.char_count += 1;
+ l.char_count++;
+ remaining_characters--;
} break;
case ITEM_TABLE: {
ItemTable *table = static_cast<ItemTable *>(it);
@@ -483,6 +487,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
int cell_ch = (char_offset - (l.char_offset + l.char_count));
l.char_count += cell_ch;
t_char_count += cell_ch;
+ remaining_characters -= cell_ch;
table->columns.write[column].min_width = MAX(table->columns[column].min_width, ceil(frame->lines[i].text_buf->get_size().x));
table->columns.write[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wraped_size().x));
@@ -847,6 +852,21 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
Point2 fx_offset = Vector2(glyphs[i].x_off, glyphs[i].y_off);
RID frid = glyphs[i].font_rid;
uint32_t gl = glyphs[i].index;
+ uint16_t gl_fl = glyphs[i].flags;
+ uint8_t gl_cn = glyphs[i].count;
+ bool cprev = false;
+ if (gl_cn == 0) { // Parts of the same cluster, always connected.
+ cprev = true;
+ }
+ if (gl_fl & TextServer::GRAPHEME_IS_RTL) { // Check if previous grapheme cluster is connected.
+ if (i > 0 && (glyphs[i - 1].flags & TextServer::GRAPHEME_IS_CONNECTED)) {
+ cprev = true;
+ }
+ } else {
+ if (glyphs[i].flags & TextServer::GRAPHEME_IS_CONNECTED) {
+ cprev = true;
+ }
+ }
//Apply fx.
float faded_visibility = 1.0f;
@@ -875,6 +895,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
charfx->outline = true;
charfx->font = frid;
charfx->glyph_index = gl;
+ charfx->glyph_flags = gl_fl;
+ charfx->glyph_count = gl_cn;
charfx->offset = fx_offset;
charfx->color = font_color;
@@ -890,25 +912,34 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
} else if (item_fx->type == ITEM_SHAKE) {
ItemShake *item_shake = static_cast<ItemShake *>(item_fx);
- uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start);
- uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start);
- uint64_t max_rand = 2147483647;
- double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
- double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
- double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate));
- n_time = (n_time > 1.0) ? 1.0 : n_time;
- fx_offset += Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f;
+ if (!cprev) {
+ uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start);
+ uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start);
+ uint64_t max_rand = 2147483647;
+ double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
+ double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
+ double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate));
+ n_time = (n_time > 1.0) ? 1.0 : n_time;
+ item_shake->prev_off = Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f;
+ }
+ fx_offset += item_shake->prev_off;
} else if (item_fx->type == ITEM_WAVE) {
ItemWave *item_wave = static_cast<ItemWave *>(item_fx);
- double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f);
- fx_offset += Point2(0, 1) * value;
+ if (!cprev) {
+ double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_wave->amplitude / 10.0f);
+ item_wave->prev_off = Point2(0, 1) * value;
+ }
+ fx_offset += item_wave->prev_off;
} else if (item_fx->type == ITEM_TORNADO) {
ItemTornado *item_tornado = static_cast<ItemTornado *>(item_fx);
- double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius);
- double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius);
- fx_offset += Point2(torn_x, torn_y);
+ if (!cprev) {
+ double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius);
+ double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius);
+ item_tornado->prev_off = Point2(torn_x, torn_y);
+ }
+ fx_offset += item_tornado->prev_off;
} else if (item_fx->type == ITEM_RAINBOW) {
ItemRainbow *item_rainbow = static_cast<ItemRainbow *>(item_fx);
@@ -999,6 +1030,21 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
Point2 fx_offset = Vector2(glyphs[i].x_off, glyphs[i].y_off);
RID frid = glyphs[i].font_rid;
uint32_t gl = glyphs[i].index;
+ uint16_t gl_fl = glyphs[i].flags;
+ uint8_t gl_cn = glyphs[i].count;
+ bool cprev = false;
+ if (gl_cn == 0) { // Parts of the same grapheme cluster, always connected.
+ cprev = true;
+ }
+ if (gl_fl & TextServer::GRAPHEME_IS_RTL) { // Check if previous grapheme cluster is connected.
+ if (i > 0 && (glyphs[i - 1].flags & TextServer::GRAPHEME_IS_CONNECTED)) {
+ cprev = true;
+ }
+ } else {
+ if (glyphs[i].flags & TextServer::GRAPHEME_IS_CONNECTED) {
+ cprev = true;
+ }
+ }
//Apply fx.
float faded_visibility = 1.0f;
@@ -1027,6 +1073,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
charfx->outline = false;
charfx->font = frid;
charfx->glyph_index = gl;
+ charfx->glyph_flags = gl_fl;
+ charfx->glyph_count = gl_cn;
charfx->offset = fx_offset;
charfx->color = font_color;
@@ -1042,25 +1090,34 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
} else if (item_fx->type == ITEM_SHAKE) {
ItemShake *item_shake = static_cast<ItemShake *>(item_fx);
- uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start);
- uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start);
- uint64_t max_rand = 2147483647;
- double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
- double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
- double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate));
- n_time = (n_time > 1.0) ? 1.0 : n_time;
- fx_offset += Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f;
+ if (!cprev) {
+ uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start);
+ uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start);
+ uint64_t max_rand = 2147483647;
+ double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
+ double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI);
+ double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate));
+ n_time = (n_time > 1.0) ? 1.0 : n_time;
+ item_shake->prev_off = Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f;
+ }
+ fx_offset += item_shake->prev_off;
} else if (item_fx->type == ITEM_WAVE) {
ItemWave *item_wave = static_cast<ItemWave *>(item_fx);
- double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f);
- fx_offset += Point2(0, 1) * value;
+ if (!cprev) {
+ double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f);
+ item_wave->prev_off = Point2(0, 1) * value;
+ }
+ fx_offset += item_wave->prev_off;
} else if (item_fx->type == ITEM_TORNADO) {
ItemTornado *item_tornado = static_cast<ItemTornado *>(item_fx);
- double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius);
- double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius);
- fx_offset += Point2(torn_x, torn_y);
+ if (!cprev) {
+ double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius);
+ double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius);
+ item_tornado->prev_off = Point2(torn_x, torn_y);
+ }
+ fx_offset += item_tornado->prev_off;
} else if (item_fx->type == ITEM_RAINBOW) {
ItemRainbow *item_rainbow = static_cast<ItemRainbow *>(item_fx);
@@ -3855,7 +3912,12 @@ String RichTextLabel::get_parsed_text() const {
String text = "";
Item *it = main;
while (it) {
- if (it->type == ITEM_TEXT) {
+ if (it->type == ITEM_DROPCAP) {
+ const ItemDropcap *dc = (ItemDropcap *)it;
+ if (dc != nullptr) {
+ text += dc->text;
+ }
+ } else if (it->type == ITEM_TEXT) {
ItemText *t = static_cast<ItemText *>(it);
text += t->text;
} else if (it->type == ITEM_NEWLINE) {
@@ -3926,7 +3988,6 @@ void RichTextLabel::set_percent_visible(float p_percent) {
if (p_percent < 0 || p_percent >= 1) {
visible_characters = -1;
percent_visible = 1;
-
} else {
visible_characters = get_total_character_count() * p_percent;
percent_visible = p_percent;
@@ -4160,16 +4221,20 @@ void RichTextLabel::_bind_methods() {
}
void RichTextLabel::set_visible_characters(int p_visible) {
- visible_characters = p_visible;
- if (p_visible == -1) {
- percent_visible = 1;
- } else {
- int total_char_count = get_total_character_count();
- if (total_char_count > 0) {
- percent_visible = (float)p_visible / (float)total_char_count;
+ if (visible_characters != p_visible) {
+ visible_characters = p_visible;
+ if (p_visible == -1) {
+ percent_visible = 1;
+ } else {
+ int total_char_count = get_total_character_count();
+ if (total_char_count > 0) {
+ percent_visible = (float)p_visible / (float)total_char_count;
+ }
}
+ main->first_invalid_line = 0; //invalidate ALL
+ _validate_line_caches(main);
+ update();
}
- update();
}
int RichTextLabel::get_visible_characters() const {
@@ -4177,9 +4242,19 @@ int RichTextLabel::get_visible_characters() const {
}
int RichTextLabel::get_total_character_count() const {
+ // Note: Do not use line buffer "char_count", it includes only visible characters.
int tc = 0;
- for (int i = 0; i < current_frame->lines.size(); i++) {
- tc += current_frame->lines[i].char_count;
+ Item *it = main;
+ while (it) {
+ if (it->type == ITEM_TEXT) {
+ ItemText *t = static_cast<ItemText *>(it);
+ tc += t->text.length();
+ } else if (it->type == ITEM_NEWLINE) {
+ tc++;
+ } else if (it->type == ITEM_IMAGE) {
+ tc++;
+ }
+ it = _get_next_item(it, true);
}
return tc;
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index 806f684b67..94f02a3989 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -267,6 +267,7 @@ private:
float rate = 0.0f;
uint64_t _current_rng = 0;
uint64_t _previous_rng = 0;
+ Vector2 prev_off;
ItemShake() { type = ITEM_SHAKE; }
@@ -289,6 +290,7 @@ private:
struct ItemWave : public ItemFX {
float frequency = 1.0f;
float amplitude = 1.0f;
+ Vector2 prev_off;
ItemWave() { type = ITEM_WAVE; }
};
@@ -296,6 +298,7 @@ private:
struct ItemTornado : public ItemFX {
float radius = 1.0f;
float frequency = 1.0f;
+ Vector2 prev_off;
ItemTornado() { type = ITEM_TORNADO; }
};
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp
index 1074d0d8a0..0aec017649 100644
--- a/scene/gui/spin_box.cpp
+++ b/scene/gui/spin_box.cpp
@@ -68,6 +68,15 @@ void SpinBox::_text_submitted(const String &p_string) {
_value_changed(0);
}
+void SpinBox::_text_changed(const String &p_string) {
+ int cursor_pos = line_edit->get_caret_column();
+
+ _text_submitted(p_string);
+
+ // Line edit 'set_text' method resets the cursor position so we need to undo that.
+ line_edit->set_caret_column(cursor_pos);
+}
+
LineEdit *SpinBox::get_line_edit() {
return line_edit;
}
@@ -244,6 +253,24 @@ String SpinBox::get_prefix() const {
return prefix;
}
+void SpinBox::set_update_on_text_changed(bool p_update) {
+ if (update_on_text_changed == p_update) {
+ return;
+ }
+
+ update_on_text_changed = p_update;
+
+ if (p_update) {
+ line_edit->connect("text_changed", callable_mp(this, &SpinBox::_text_changed), Vector<Variant>(), CONNECT_DEFERRED);
+ } else {
+ line_edit->disconnect("text_changed", callable_mp(this, &SpinBox::_text_changed));
+ }
+}
+
+bool SpinBox::get_update_on_text_changed() const {
+ return update_on_text_changed;
+}
+
void SpinBox::set_editable(bool p_editable) {
line_edit->set_editable(p_editable);
}
@@ -267,11 +294,14 @@ void SpinBox::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_prefix"), &SpinBox::get_prefix);
ClassDB::bind_method(D_METHOD("set_editable", "editable"), &SpinBox::set_editable);
ClassDB::bind_method(D_METHOD("is_editable"), &SpinBox::is_editable);
+ ClassDB::bind_method(D_METHOD("set_update_on_text_changed"), &SpinBox::set_update_on_text_changed);
+ ClassDB::bind_method(D_METHOD("get_update_on_text_changed"), &SpinBox::get_update_on_text_changed);
ClassDB::bind_method(D_METHOD("apply"), &SpinBox::apply);
ClassDB::bind_method(D_METHOD("get_line_edit"), &SpinBox::get_line_edit);
ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_on_text_changed"), "set_update_on_text_changed", "get_update_on_text_changed");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "prefix"), "set_prefix", "get_prefix");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "suffix"), "set_suffix", "get_suffix");
}
@@ -284,7 +314,6 @@ SpinBox::SpinBox() {
line_edit->set_mouse_filter(MOUSE_FILTER_PASS);
line_edit->set_align(LineEdit::ALIGN_LEFT);
- //connect("value_changed",this,"_value_changed");
line_edit->connect("text_submitted", callable_mp(this, &SpinBox::_text_submitted), Vector<Variant>(), CONNECT_DEFERRED);
line_edit->connect("focus_exited", callable_mp(this, &SpinBox::_line_edit_focus_exit), Vector<Variant>(), CONNECT_DEFERRED);
line_edit->connect("gui_input", callable_mp(this, &SpinBox::_line_edit_input));
diff --git a/scene/gui/spin_box.h b/scene/gui/spin_box.h
index 9ec3885f1f..9828b894da 100644
--- a/scene/gui/spin_box.h
+++ b/scene/gui/spin_box.h
@@ -40,6 +40,7 @@ class SpinBox : public Range {
LineEdit *line_edit;
int last_w = 0;
+ bool update_on_text_changed = false;
Timer *range_click_timer;
void _range_click_timeout();
@@ -47,6 +48,8 @@ class SpinBox : public Range {
void _text_submitted(const String &p_string);
virtual void _value_changed(double) override;
+ void _text_changed(const String &p_string);
+
String prefix;
String suffix;
@@ -88,6 +91,9 @@ public:
void set_prefix(const String &p_prefix);
String get_prefix() const;
+ void set_update_on_text_changed(bool p_update);
+ bool get_update_on_text_changed() const;
+
void apply();
SpinBox();
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 137ce7e96f..a423dc0173 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -538,7 +538,6 @@ void TabContainer::_notification(int p_what) {
void TabContainer::_draw_tab(Ref<StyleBox> &p_tab_style, Color &p_font_color, int p_index, float p_x) {
Control *control = get_tab_control(p_index);
RID canvas = get_canvas_item();
- Ref<Font> font = get_theme_font(SNAME("font"));
Color font_outline_color = get_theme_color(SNAME("font_outline_color"));
int outline_size = get_theme_constant(SNAME("outline_size"));
int icon_text_distance = get_theme_constant(SNAME("icon_separation"));
@@ -1134,7 +1133,6 @@ Size2 TabContainer::get_minimum_size() const {
Ref<StyleBox> tab_unselected = get_theme_stylebox(SNAME("tab_unselected"));
Ref<StyleBox> tab_selected = get_theme_stylebox(SNAME("tab_selected"));
Ref<StyleBox> tab_disabled = get_theme_stylebox(SNAME("tab_disabled"));
- Ref<Font> font = get_theme_font(SNAME("font"));
if (tabs_visible) {
ms.y += MAX(MAX(tab_unselected->get_minimum_size().y, tab_selected->get_minimum_size().y), tab_disabled->get_minimum_size().y);
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index cef1b830df..b3b743370b 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -1972,35 +1972,30 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
Control *from = gui.key_focus ? gui.key_focus : nullptr;
- // Keyboard focus.
- Ref<InputEventKey> k = p_event;
- // Need to check for mods, otherwise any combination of alt/ctrl/shift+<up/down/left/right/etc> is handled here when it shouldn't be.
- bool mods = k.is_valid() && (k->is_ctrl_pressed() || k->is_alt_pressed() || k->is_shift_pressed() || k->is_meta_pressed());
-
if (from && p_event->is_pressed()) {
Control *next = nullptr;
- if (p_event->is_action_pressed("ui_focus_next", true)) {
+ if (p_event->is_action_pressed("ui_focus_next", true, true)) {
next = from->find_next_valid_focus();
}
- if (p_event->is_action_pressed("ui_focus_prev", true)) {
+ if (p_event->is_action_pressed("ui_focus_prev", true, true)) {
next = from->find_prev_valid_focus();
}
- if (!mods && p_event->is_action_pressed("ui_up", true)) {
+ if (p_event->is_action_pressed("ui_up", true, true)) {
next = from->_get_focus_neighbor(SIDE_TOP);
}
- if (!mods && p_event->is_action_pressed("ui_left", true)) {
+ if (p_event->is_action_pressed("ui_left", true, true)) {
next = from->_get_focus_neighbor(SIDE_LEFT);
}
- if (!mods && p_event->is_action_pressed("ui_right", true)) {
+ if (p_event->is_action_pressed("ui_right", true, true)) {
next = from->_get_focus_neighbor(SIDE_RIGHT);
}
- if (!mods && p_event->is_action_pressed("ui_down", true)) {
+ if (p_event->is_action_pressed("ui_down", true, true)) {
next = from->_get_focus_neighbor(SIDE_BOTTOM);
}
diff --git a/scene/resources/canvas_item_material.cpp b/scene/resources/canvas_item_material.cpp
index 7501efea9e..fa95ab0e79 100644
--- a/scene/resources/canvas_item_material.cpp
+++ b/scene/resources/canvas_item_material.cpp
@@ -161,7 +161,7 @@ void CanvasItemMaterial::flush_changes() {
void CanvasItemMaterial::_queue_shader_change() {
MutexLock lock(material_mutex);
- if (!element.in_list()) {
+ if (is_initialized && !element.in_list()) {
dirty_materials->add(&element);
}
}
@@ -287,6 +287,7 @@ CanvasItemMaterial::CanvasItemMaterial() :
set_particles_anim_loop(false);
current_key.invalid_key = 1;
+ is_initialized = true;
_queue_shader_change();
}
diff --git a/scene/resources/canvas_item_material.h b/scene/resources/canvas_item_material.h
index 0a813e0ae5..37cd4de136 100644
--- a/scene/resources/canvas_item_material.h
+++ b/scene/resources/canvas_item_material.h
@@ -102,6 +102,7 @@ private:
_FORCE_INLINE_ void _queue_shader_change();
_FORCE_INLINE_ bool _is_shader_dirty() const;
+ bool is_initialized = false;
BlendMode blend_mode = BLEND_MODE_MIX;
LightMode light_mode = LIGHT_MODE_NORMAL;
bool particles_animation = false;
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index 7af8e900fd..29bd56eebd 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -689,227 +689,272 @@ void FontData::remove_cache(int p_cache_index) {
}
Array FontData::get_size_cache_list(int p_cache_index) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Array());
_ensure_rid(p_cache_index);
return TS->font_get_size_cache_list(cache[p_cache_index]);
}
void FontData::clear_size_cache(int p_cache_index) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_clear_size_cache(cache[p_cache_index]);
}
void FontData::remove_size_cache(int p_cache_index, const Vector2i &p_size) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_remove_size_cache(cache[p_cache_index], p_size);
}
void FontData::set_variation_coordinates(int p_cache_index, const Dictionary &p_variation_coordinates) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_variation_coordinates(cache[p_cache_index], p_variation_coordinates);
emit_changed();
}
Dictionary FontData::get_variation_coordinates(int p_cache_index) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Dictionary());
_ensure_rid(p_cache_index);
return TS->font_get_variation_coordinates(cache[p_cache_index]);
}
void FontData::set_ascent(int p_cache_index, int p_size, real_t p_ascent) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_ascent(cache[p_cache_index], p_size, p_ascent);
}
real_t FontData::get_ascent(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0.f);
_ensure_rid(p_cache_index);
return TS->font_get_ascent(cache[p_cache_index], p_size);
}
void FontData::set_descent(int p_cache_index, int p_size, real_t p_descent) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_descent(cache[p_cache_index], p_size, p_descent);
}
real_t FontData::get_descent(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0.f);
_ensure_rid(p_cache_index);
return TS->font_get_descent(cache[p_cache_index], p_size);
}
void FontData::set_underline_position(int p_cache_index, int p_size, real_t p_underline_position) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_underline_position(cache[p_cache_index], p_size, p_underline_position);
}
real_t FontData::get_underline_position(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0.f);
_ensure_rid(p_cache_index);
return TS->font_get_underline_position(cache[p_cache_index], p_size);
}
void FontData::set_underline_thickness(int p_cache_index, int p_size, real_t p_underline_thickness) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_underline_thickness(cache[p_cache_index], p_size, p_underline_thickness);
}
real_t FontData::get_underline_thickness(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0.f);
_ensure_rid(p_cache_index);
return TS->font_get_underline_thickness(cache[p_cache_index], p_size);
}
void FontData::set_scale(int p_cache_index, int p_size, real_t p_scale) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_scale(cache[p_cache_index], p_size, p_scale);
}
real_t FontData::get_scale(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0.f);
_ensure_rid(p_cache_index);
return TS->font_get_scale(cache[p_cache_index], p_size);
}
void FontData::set_spacing(int p_cache_index, int p_size, TextServer::SpacingType p_spacing, int p_value) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_spacing(cache[p_cache_index], p_size, p_spacing, p_value);
}
int FontData::get_spacing(int p_cache_index, int p_size, TextServer::SpacingType p_spacing) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0);
_ensure_rid(p_cache_index);
return TS->font_get_spacing(cache[p_cache_index], p_size, p_spacing);
}
int FontData::get_texture_count(int p_cache_index, const Vector2i &p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0);
_ensure_rid(p_cache_index);
return TS->font_get_texture_count(cache[p_cache_index], p_size);
}
void FontData::clear_textures(int p_cache_index, const Vector2i &p_size) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_clear_textures(cache[p_cache_index], p_size);
}
void FontData::remove_texture(int p_cache_index, const Vector2i &p_size, int p_texture_index) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_remove_texture(cache[p_cache_index], p_size, p_texture_index);
}
void FontData::set_texture_image(int p_cache_index, const Vector2i &p_size, int p_texture_index, const Ref<Image> &p_image) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_texture_image(cache[p_cache_index], p_size, p_texture_index, p_image);
}
Ref<Image> FontData::get_texture_image(int p_cache_index, const Vector2i &p_size, int p_texture_index) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Ref<Image>());
_ensure_rid(p_cache_index);
return TS->font_get_texture_image(cache[p_cache_index], p_size, p_texture_index);
}
void FontData::set_texture_offsets(int p_cache_index, const Vector2i &p_size, int p_texture_index, const PackedInt32Array &p_offset) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_texture_offsets(cache[p_cache_index], p_size, p_texture_index, p_offset);
}
PackedInt32Array FontData::get_texture_offsets(int p_cache_index, const Vector2i &p_size, int p_texture_index) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, PackedInt32Array());
_ensure_rid(p_cache_index);
return TS->font_get_texture_offsets(cache[p_cache_index], p_size, p_texture_index);
}
Array FontData::get_glyph_list(int p_cache_index, const Vector2i &p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Array());
_ensure_rid(p_cache_index);
return TS->font_get_glyph_list(cache[p_cache_index], p_size);
}
void FontData::clear_glyphs(int p_cache_index, const Vector2i &p_size) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_clear_glyphs(cache[p_cache_index], p_size);
}
void FontData::remove_glyph(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_remove_glyph(cache[p_cache_index], p_size, p_glyph);
}
void FontData::set_glyph_advance(int p_cache_index, int p_size, int32_t p_glyph, const Vector2 &p_advance) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_glyph_advance(cache[p_cache_index], p_size, p_glyph, p_advance);
}
Vector2 FontData::get_glyph_advance(int p_cache_index, int p_size, int32_t p_glyph) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Vector2());
_ensure_rid(p_cache_index);
return TS->font_get_glyph_advance(cache[p_cache_index], p_size, p_glyph);
}
void FontData::set_glyph_offset(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Vector2 &p_offset) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_glyph_offset(cache[p_cache_index], p_size, p_glyph, p_offset);
}
Vector2 FontData::get_glyph_offset(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Vector2());
_ensure_rid(p_cache_index);
return TS->font_get_glyph_offset(cache[p_cache_index], p_size, p_glyph);
}
void FontData::set_glyph_size(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Vector2 &p_gl_size) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_glyph_size(cache[p_cache_index], p_size, p_glyph, p_gl_size);
}
Vector2 FontData::get_glyph_size(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Vector2());
_ensure_rid(p_cache_index);
return TS->font_get_glyph_size(cache[p_cache_index], p_size, p_glyph);
}
void FontData::set_glyph_uv_rect(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Rect2 &p_uv_rect) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_glyph_uv_rect(cache[p_cache_index], p_size, p_glyph, p_uv_rect);
}
Rect2 FontData::get_glyph_uv_rect(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Rect2());
_ensure_rid(p_cache_index);
return TS->font_get_glyph_uv_rect(cache[p_cache_index], p_size, p_glyph);
}
void FontData::set_glyph_texture_idx(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, int p_texture_idx) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_glyph_texture_idx(cache[p_cache_index], p_size, p_glyph, p_texture_idx);
}
int FontData::get_glyph_texture_idx(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, 0);
_ensure_rid(p_cache_index);
return TS->font_get_glyph_texture_idx(cache[p_cache_index], p_size, p_glyph);
}
Array FontData::get_kerning_list(int p_cache_index, int p_size) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Array());
_ensure_rid(p_cache_index);
return TS->font_get_kerning_list(cache[p_cache_index], p_size);
}
void FontData::clear_kerning_map(int p_cache_index, int p_size) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_clear_kerning_map(cache[p_cache_index], p_size);
}
void FontData::remove_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_remove_kerning(cache[p_cache_index], p_size, p_glyph_pair);
}
void FontData::set_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair, const Vector2 &p_kerning) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_set_kerning(cache[p_cache_index], p_size, p_glyph_pair, p_kerning);
}
Vector2 FontData::get_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, Vector2());
_ensure_rid(p_cache_index);
return TS->font_get_kerning(cache[p_cache_index], p_size, p_glyph_pair);
}
void FontData::render_range(int p_cache_index, const Vector2i &p_size, char32_t p_start, char32_t p_end) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_render_range(cache[p_cache_index], p_size, p_start, p_end);
}
void FontData::render_glyph(int p_cache_index, const Vector2i &p_size, int32_t p_index) {
+ ERR_FAIL_COND(p_cache_index < 0);
_ensure_rid(p_cache_index);
TS->font_render_glyph(cache[p_cache_index], p_size, p_index);
}
RID FontData::get_cache_rid(int p_cache_index) const {
+ ERR_FAIL_COND_V(p_cache_index < 0, RID());
_ensure_rid(p_cache_index);
return cache[p_cache_index];
}
@@ -1008,10 +1053,8 @@ void Font::_data_changed() {
void Font::_ensure_rid(int p_index) const {
// Find or create cache record.
- for (int i = 0; i < rids.size(); i++) {
- if (!rids[i].is_valid() && data[i].is_valid()) {
- rids.write[i] = data[i]->find_cache(variation_coordinates);
- }
+ if (!rids[p_index].is_valid() && data[p_index].is_valid()) {
+ rids.write[p_index] = data[p_index]->find_cache(variation_coordinates);
}
}
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index 77a68151c4..3a6af3afb0 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -790,12 +790,10 @@ void BaseMaterial3D::_update_shader() {
}
} break;
case BILLBOARD_FIXED_Y: {
- code += " MODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat4(CAMERA_MATRIX[0],WORLD_MATRIX[1],vec4(normalize(cross(CAMERA_MATRIX[0].xyz,WORLD_MATRIX[1].xyz)), 0.0),WORLD_MATRIX[3]);\n";
+ code += " MODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat4(vec4(normalize(cross(vec3(0.0, 1.0, 0.0), CAMERA_MATRIX[2].xyz)),0.0),vec4(0.0, 1.0, 0.0, 0.0),vec4(normalize(cross(CAMERA_MATRIX[0].xyz, vec3(0.0, 1.0, 0.0))),0.0),WORLD_MATRIX[3]);\n";
if (flags[FLAG_BILLBOARD_KEEP_SCALE]) {
- code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(length(WORLD_MATRIX[0].xyz), 0.0, 0.0, 0.0),vec4(0.0, 1.0, 0.0, 0.0),vec4(0.0, 0.0, length(WORLD_MATRIX[2].xyz), 0.0), vec4(0.0, 0.0, 0.0, 1.0));\n";
- } else {
- code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(1.0, 0.0, 0.0, 0.0),vec4(0.0, 1.0/length(WORLD_MATRIX[1].xyz), 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0),vec4(0.0, 0.0, 0.0 ,1.0));\n";
+ code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(length(WORLD_MATRIX[0].xyz), 0.0, 0.0, 0.0),vec4(0.0, length(WORLD_MATRIX[1].xyz), 0.0, 0.0),vec4(0.0, 0.0, length(WORLD_MATRIX[2].xyz), 0.0),vec4(0.0, 0.0, 0.0, 1.0));\n";
}
} break;
case BILLBOARD_PARTICLES: {
@@ -1303,7 +1301,7 @@ void BaseMaterial3D::flush_changes() {
void BaseMaterial3D::_queue_shader_change() {
MutexLock lock(material_mutex);
- if (!element.in_list()) {
+ if (is_initialized && !element.in_list()) {
dirty_materials->add(&element);
}
}
@@ -2779,6 +2777,7 @@ BaseMaterial3D::BaseMaterial3D(bool p_orm) :
flags[FLAG_USE_TEXTURE_REPEAT] = true;
+ is_initialized = true;
_queue_shader_change();
}
diff --git a/scene/resources/material.h b/scene/resources/material.h
index e2838e1399..5d7a5324ca 100644
--- a/scene/resources/material.h
+++ b/scene/resources/material.h
@@ -440,6 +440,7 @@ private:
_FORCE_INLINE_ void _queue_shader_change();
_FORCE_INLINE_ bool _is_shader_dirty() const;
+ bool is_initialized = false;
bool orm;
Color albedo;
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index e74f759855..59faa50114 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -99,8 +99,9 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
#endif
parent = nparent;
} else {
- // i == 0 is root node. Confirm that it doesn't have a parent defined.
+ // i == 0 is root node.
ERR_FAIL_COND_V_MSG(n.parent != -1, nullptr, vformat("Invalid scene: root node %s cannot specify a parent node.", snames[n.name]));
+ ERR_FAIL_COND_V_MSG(n.type == TYPE_INSTANCED && base_scene_idx < 0, nullptr, vformat("Invalid scene: root node %s in an instance, but there's no base scene.", snames[n.name]));
}
Node *node = nullptr;
diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp
index 0495a9e92c..d9ec0bfd69 100644
--- a/scene/resources/particles_material.cpp
+++ b/scene/resources/particles_material.cpp
@@ -741,7 +741,7 @@ void ParticlesMaterial::flush_changes() {
void ParticlesMaterial::_queue_shader_change() {
MutexLock lock(material_mutex);
- if (!element.in_list()) {
+ if (is_initialized && !element.in_list()) {
dirty_materials->add(&element);
}
}
@@ -1533,6 +1533,7 @@ ParticlesMaterial::ParticlesMaterial() :
current_key.invalid_key = 1;
+ is_initialized = true;
_queue_shader_change();
}
diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h
index 8ab26aff77..36bc456978 100644
--- a/scene/resources/particles_material.h
+++ b/scene/resources/particles_material.h
@@ -226,6 +226,7 @@ private:
_FORCE_INLINE_ void _queue_shader_change();
_FORCE_INLINE_ bool _is_shader_dirty() const;
+ bool is_initialized = false;
Vector3 direction;
float spread;
float flatness;
diff --git a/servers/rendering/renderer_scene_occlusion_cull.h b/servers/rendering/renderer_scene_occlusion_cull.h
index e06b3ba153..4e4b1b94db 100644
--- a/servers/rendering/renderer_scene_occlusion_cull.h
+++ b/servers/rendering/renderer_scene_occlusion_cull.h
@@ -76,26 +76,28 @@ public:
return false;
}
- float min_depth;
- if (p_cam_projection.is_orthogonal()) {
- min_depth = (-closest_point_view.z) - p_near;
- } else {
- float r = -p_near / closest_point_view.z;
- Vector3 closest_point_proj = Vector3(closest_point_view.x * r, closest_point_view.y * r, -p_near);
- min_depth = closest_point_proj.distance_to(closest_point_view);
- }
+ float min_depth = -closest_point_view.z * 0.95f;
Vector2 rect_min = Vector2(FLT_MAX, FLT_MAX);
Vector2 rect_max = Vector2(FLT_MIN, FLT_MIN);
for (int j = 0; j < 8; j++) {
- Vector3 c = RendererSceneOcclusionCull::HZBuffer::corners[j];
+ const Vector3 &c = RendererSceneOcclusionCull::HZBuffer::corners[j];
Vector3 nc = Vector3(1, 1, 1) - c;
Vector3 corner = Vector3(p_bounds[0] * c.x + p_bounds[3] * nc.x, p_bounds[1] * c.y + p_bounds[4] * nc.y, p_bounds[2] * c.z + p_bounds[5] * nc.z);
Vector3 view = p_cam_inv_transform.xform(corner);
- Vector3 projected = p_cam_projection.xform(view);
- Vector2 normalized = Vector2(projected.x * 0.5f + 0.5f, projected.y * 0.5f + 0.5f);
+ Plane vp = Plane(view, 1.0);
+ Plane projected = p_cam_projection.xform4(vp);
+
+ float w = projected.d;
+ if (w < 1.0) {
+ rect_min = Vector2(0.0f, 0.0f);
+ rect_max = Vector2(1.0f, 1.0f);
+ break;
+ }
+
+ Vector2 normalized = Vector2(projected.normal.x / w * 0.5f + 0.5f, projected.normal.y / w * 0.5f + 0.5f);
rect_min = rect_min.min(normalized);
rect_max = rect_max.max(normalized);
}
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index 4218214fda..89537f8b7c 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -2384,6 +2384,10 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionI
failed_builtin = true;
bool fail = false;
for (int i = 0; i < argcount; i++) {
+ if (p_func->arguments[i + 1]->type == Node::TYPE_ARRAY && !static_cast<const ArrayNode *>(p_func->arguments[i + 1])->is_indexed()) {
+ fail = true;
+ break;
+ }
if (get_scalar_type(args[i]) == args[i] && p_func->arguments[i + 1]->type == Node::TYPE_CONSTANT && convert_constant(static_cast<ConstantNode *>(p_func->arguments[i + 1]), builtin_func_defs[idx].args[i])) {
//all good, but needs implicit conversion later
} else if (args[i] != builtin_func_defs[idx].args[i]) {
@@ -2560,6 +2564,11 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionI
} else {
arg_name = get_datatype_name(args[i]);
}
+ if (args3[i] > 0) {
+ arg_name += "[";
+ arg_name += itos(args3[i]);
+ arg_name += "]";
+ }
err += arg_name;
}
err += ")";
diff --git a/servers/text_server.cpp b/servers/text_server.cpp
index 2f343e8f80..4886a6f582 100644
--- a/servers/text_server.cpp
+++ b/servers/text_server.cpp
@@ -447,6 +447,8 @@ void TextServer::_bind_methods() {
BIND_ENUM_CONSTANT(GRAPHEME_IS_TAB);
BIND_ENUM_CONSTANT(GRAPHEME_IS_ELONGATION);
BIND_ENUM_CONSTANT(GRAPHEME_IS_PUNCTUATION);
+ BIND_ENUM_CONSTANT(GRAPHEME_IS_UNDERSCORE);
+ BIND_ENUM_CONSTANT(GRAPHEME_IS_CONNECTED);
/* Hinting */
BIND_ENUM_CONSTANT(HINTING_NONE);
diff --git a/servers/text_server.h b/servers/text_server.h
index 62e02e3c97..90ad9b493b 100644
--- a/servers/text_server.h
+++ b/servers/text_server.h
@@ -91,6 +91,7 @@ public:
GRAPHEME_IS_ELONGATION = 1 << 7, // Elongation (e.g. kashida), glyph can be duplicated or truncated to fit line to width.
GRAPHEME_IS_PUNCTUATION = 1 << 8, // Punctuation, except underscore (can be used as word break, but not line break or justifiction).
GRAPHEME_IS_UNDERSCORE = 1 << 9, // Underscore (can be used as word break).
+ GRAPHEME_IS_CONNECTED = 1 << 10, // Connected to previous grapheme.
};
enum Hinting {
diff --git a/servers/xr/xr_interface.h b/servers/xr/xr_interface.h
index 4f5d4bad10..534fa18d8a 100644
--- a/servers/xr/xr_interface.h
+++ b/servers/xr/xr_interface.h
@@ -110,7 +110,7 @@ public:
virtual uint32_t get_view_count() = 0; /* returns the view count we need (1 is monoscopic, 2 is stereoscopic but can be more) */
virtual Transform3D get_camera_transform() = 0; /* returns the position of our camera for updating our camera node. For monoscopic this is equal to the views transform, for stereoscopic this should be an average */
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) = 0; /* get each views transform */
- virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) = 0; /* get each view projection matrix */
+ virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) = 0; /* get each view projection matrix */
// note, external color/depth/vrs texture support will be added here soon.
diff --git a/servers/xr/xr_interface_extension.cpp b/servers/xr/xr_interface_extension.cpp
index 6340485bde..315442fc57 100644
--- a/servers/xr/xr_interface_extension.cpp
+++ b/servers/xr/xr_interface_extension.cpp
@@ -186,7 +186,7 @@ Transform3D XRInterfaceExtension::get_transform_for_view(uint32_t p_view, const
return Transform3D();
}
-CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) {
+CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
CameraMatrix cm;
PackedFloat64Array arr;
@@ -202,7 +202,7 @@ CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real
return CameraMatrix();
}
-void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, float p_k1, float p_k2, float p_upscale, float p_aspect_ratio) {
+void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, double p_k1, double p_k2, double p_upscale, double p_aspect_ratio) {
BlitToScreen blit;
ERR_FAIL_COND_MSG(!can_add_blits, "add_blit can only be called from an XR plugin from within _commit_views!");
diff --git a/servers/xr/xr_interface_extension.h b/servers/xr/xr_interface_extension.h
index 94914a7b3f..3b7af4c0a2 100644
--- a/servers/xr/xr_interface_extension.h
+++ b/servers/xr/xr_interface_extension.h
@@ -83,15 +83,15 @@ public:
virtual uint32_t get_view_count() override;
virtual Transform3D get_camera_transform() override;
virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
- virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override;
+ virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
GDVIRTUAL0R(Size2, _get_render_target_size);
GDVIRTUAL0R(uint32_t, _get_view_count);
GDVIRTUAL0R(Transform3D, _get_camera_transform);
GDVIRTUAL2R(Transform3D, _get_transform_for_view, uint32_t, const Transform3D &);
- GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, real_t, real_t, real_t);
+ GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, double, double, double);
- void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), float p_k1 = 0.0, float p_k2 = 0.0, float p_upscale = 1.0, float p_aspect_ratio = 1.0);
+ void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), double p_k1 = 0.0, double p_k2 = 0.0, double p_upscale = 1.0, double p_aspect_ratio = 1.0);
virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override;
GDVIRTUAL2(_commit_views, RID, const Rect2 &);
diff --git a/servers/xr_server.cpp b/servers/xr_server.cpp
index c18a9f8b4e..f6e6e5953f 100644
--- a/servers/xr_server.cpp
+++ b/servers/xr_server.cpp
@@ -86,11 +86,11 @@ void XRServer::_bind_methods() {
ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING_NAME, "tracker_name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id")));
};
-real_t XRServer::get_world_scale() const {
+double XRServer::get_world_scale() const {
return world_scale;
};
-void XRServer::set_world_scale(real_t p_world_scale) {
+void XRServer::set_world_scale(double p_world_scale) {
if (p_world_scale < 0.01) {
p_world_scale = 0.01;
} else if (p_world_scale > 1000.0) {
diff --git a/servers/xr_server.h b/servers/xr_server.h
index af183e175d..6d07263755 100644
--- a/servers/xr_server.h
+++ b/servers/xr_server.h
@@ -81,7 +81,7 @@ private:
Ref<XRInterface> primary_interface; /* we'll identify one interface as primary, this will be used by our viewports */
- real_t world_scale; /* scale by which we multiply our tracker positions */
+ double world_scale; /* scale by which we multiply our tracker positions */
Transform3D world_origin; /* our world origin point, maps a location in our virtual world to the origin point in our real world tracking volume */
Transform3D reference_frame; /* our reference frame */
@@ -107,8 +107,8 @@ public:
I may remove access to this property in GDScript in favour of exposing it on the XROrigin3D node
*/
- real_t get_world_scale() const;
- void set_world_scale(real_t p_world_scale);
+ double get_world_scale() const;
+ void set_world_scale(double p_world_scale);
/*
The world maps the 0,0,0 coordinate of our real world coordinate system for our tracking volume to a location in our
diff --git a/tests/test_code_edit.h b/tests/test_code_edit.h
index 9579d8ebef..fc8cec60af 100644
--- a/tests/test_code_edit.h
+++ b/tests/test_code_edit.h
@@ -808,6 +808,2261 @@ TEST_CASE("[SceneTree][CodeEdit] line gutters") {
memdelete(code_edit);
}
+TEST_CASE("[SceneTree][CodeEdit] delimiters") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ const Point2 OUTSIDE_DELIMETER = Point2(-1, -1);
+
+ code_edit->clear_string_delimiters();
+ code_edit->clear_comment_delimiters();
+
+ SUBCASE("[CodeEdit] add and remove delimiters") {
+ SUBCASE("[CodeEdit] add and remove string delimiters") {
+ /* Add a delimiter.*/
+ code_edit->add_string_delimiter("\"", "\"", false);
+ CHECK(code_edit->has_string_delimiter("\""));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ ERR_PRINT_OFF;
+
+ /* Adding a duplicate start key is not allowed. */
+ code_edit->add_string_delimiter("\"", "\'", false);
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Adding a duplicate end key is allowed. */
+ code_edit->add_string_delimiter("'", "\"", false);
+ CHECK(code_edit->has_string_delimiter("'"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ /* Both start and end keys have to be symbols. */
+ code_edit->add_string_delimiter("f", "\"", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("f"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ code_edit->add_string_delimiter("f", "\"", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("f"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ code_edit->add_string_delimiter("@", "f", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("@"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ code_edit->add_string_delimiter("f", "f", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("f"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ /* Blank start keys are not allowed */
+ code_edit->add_string_delimiter("", "#", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ ERR_PRINT_ON;
+
+ /* Blank end keys are allowed. */
+ code_edit->add_string_delimiter("#", "", false);
+ CHECK(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 3);
+
+ /* Remove a delimiter. */
+ code_edit->remove_string_delimiter("#");
+ CHECK_FALSE(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ /* Set should override existing, and test multiline */
+ TypedArray<String> delimiters;
+ delimiters.push_back("^^ ^^");
+
+ code_edit->set_string_delimiters(delimiters);
+ CHECK_FALSE(code_edit->has_string_delimiter("\""));
+ CHECK(code_edit->has_string_delimiter("^^"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* clear should remove all. */
+ code_edit->clear_string_delimiters();
+ CHECK_FALSE(code_edit->has_string_delimiter("^^"));
+ CHECK(code_edit->get_string_delimiters().size() == 0);
+ }
+
+ SUBCASE("[CodeEdit] add and remove comment delimiters") {
+ /* Add a delimiter.*/
+ code_edit->add_comment_delimiter("\"", "\"", false);
+ CHECK(code_edit->has_comment_delimiter("\""));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ ERR_PRINT_OFF;
+
+ /* Adding a duplicate start key is not allowed. */
+ code_edit->add_comment_delimiter("\"", "\'", false);
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Adding a duplicate end key is allowed. */
+ code_edit->add_comment_delimiter("'", "\"", false);
+ CHECK(code_edit->has_comment_delimiter("'"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ /* Both start and end keys have to be symbols. */
+ code_edit->add_comment_delimiter("f", "\"", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("f"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ code_edit->add_comment_delimiter("f", "\"", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("f"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ code_edit->add_comment_delimiter("@", "f", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("@"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ code_edit->add_comment_delimiter("f", "f", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("f"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ /* Blank start keys are not allowed. */
+ code_edit->add_comment_delimiter("", "#", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ ERR_PRINT_ON;
+
+ /* Blank end keys are allowed. */
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 3);
+
+ /* Remove a delimiter. */
+ code_edit->remove_comment_delimiter("#");
+ CHECK_FALSE(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ /* Set should override existing, and test multiline. */
+ TypedArray<String> delimiters;
+ delimiters.push_back("^^ ^^");
+
+ code_edit->set_comment_delimiters(delimiters);
+ CHECK_FALSE(code_edit->has_comment_delimiter("\""));
+ CHECK(code_edit->has_comment_delimiter("^^"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* clear should remove all. */
+ code_edit->clear_comment_delimiters();
+ CHECK_FALSE(code_edit->has_comment_delimiter("^^"));
+ CHECK(code_edit->get_comment_delimiters().size() == 0);
+ }
+
+ SUBCASE("[CodeEdit] add and remove mixed delimiters") {
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ ERR_PRINT_OFF;
+
+ /* Disallow adding a string with the same start key as comment. */
+ code_edit->add_string_delimiter("#", "", false);
+ CHECK_FALSE(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 0);
+
+ code_edit->add_string_delimiter("\"", "\"", false);
+ CHECK(code_edit->has_string_delimiter("\""));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Disallow adding a comment with the same start key as string. */
+ code_edit->add_comment_delimiter("\"", "", false);
+ CHECK_FALSE(code_edit->has_comment_delimiter("\""));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ ERR_PRINT_ON;
+
+ /* Cannot remove string with remove comment. */
+ code_edit->remove_comment_delimiter("\"");
+ CHECK(code_edit->has_string_delimiter("\""));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Cannot remove comment with remove string. */
+ code_edit->remove_string_delimiter("#");
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Clear comments leave strings. */
+ code_edit->clear_comment_delimiters();
+ CHECK(code_edit->has_string_delimiter("\""));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Clear string leave comments. */
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ code_edit->clear_string_delimiters();
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+ }
+ }
+
+ SUBCASE("[CodeEdit] single line delimiters") {
+ SUBCASE("[CodeEdit] single line string delimiters") {
+ /* Blank end key should set lineonly to true. */
+ code_edit->add_string_delimiter("#", "", false);
+ CHECK(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Insert line above, line with string then line below. */
+ code_edit->insert_text_at_caret(" \n#\n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column after start key is in string and start / end positions are correct. */
+ CHECK(code_edit->is_in_string(1, 1) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(2, 1));
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check region metadata. */
+ int idx = code_edit->is_in_string(1, 1);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "");
+
+ /* Check nested strings are handeled correctly. */
+ code_edit->set_text(" \n# # \n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before first start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column after the first start key is in string and start / end positions are correct. */
+ CHECK(code_edit->is_in_string(1, 1) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1));
+
+ /* Check column after the second start key returns data for the first. */
+ CHECK(code_edit->is_in_string(1, 5) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1));
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check is in string with no column retruns true if entire line is comment excluding whitespace. */
+ code_edit->set_text(" \n # # \n ");
+ CHECK(code_edit->is_in_string(1) != -1);
+
+ code_edit->set_text(" \n text # # \n ");
+ CHECK(code_edit->is_in_string(1) == -1);
+
+ /* Removing delimiter should update. */
+ code_edit->set_text(" \n # # \n ");
+
+ code_edit->remove_string_delimiter("#");
+ CHECK_FALSE(code_edit->has_string_delimiter("$"));
+ CHECK(code_edit->get_string_delimiters().size() == 0);
+
+ CHECK(code_edit->is_in_string(1) == -1);
+
+ /* Adding and clear should update. */
+ code_edit->add_string_delimiter("#", "", false);
+ CHECK(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+ CHECK(code_edit->is_in_string(1) != -1);
+
+ code_edit->clear_string_delimiters();
+ CHECK_FALSE(code_edit->has_string_delimiter("$"));
+ CHECK(code_edit->get_string_delimiters().size() == 0);
+
+ CHECK(code_edit->is_in_string(1) == -1);
+ }
+
+ SUBCASE("[CodeEdit] single line comment delimiters") {
+ /* Blank end key should set lineonly to true. */
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Insert line above, line with comment then line below. */
+ code_edit->insert_text_at_caret(" \n#\n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column after start key is in comment and start / end positions are correct. */
+ CHECK(code_edit->is_in_comment(1, 1) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(2, 1));
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check region metadata. */
+ int idx = code_edit->is_in_comment(1, 1);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "");
+
+ /* Check nested comments are handeled correctly. */
+ code_edit->set_text(" \n# # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before first start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column after the first start key is in comment and start / end positions are correct. */
+ CHECK(code_edit->is_in_comment(1, 1) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1));
+
+ /* Check column after the second start key returns data for the first. */
+ CHECK(code_edit->is_in_comment(1, 5) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1));
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check is in comment with no column retruns true if entire line is comment excluding whitespace. */
+ code_edit->set_text(" \n # # \n ");
+ CHECK(code_edit->is_in_comment(1) != -1);
+
+ code_edit->set_text(" \n text # # \n ");
+ CHECK(code_edit->is_in_comment(1) == -1);
+
+ /* Removing delimiter should update. */
+ code_edit->set_text(" \n # # \n ");
+
+ code_edit->remove_comment_delimiter("#");
+ CHECK_FALSE(code_edit->has_comment_delimiter("$"));
+ CHECK(code_edit->get_comment_delimiters().size() == 0);
+
+ CHECK(code_edit->is_in_comment(1) == -1);
+
+ /* Adding and clear should update. */
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+ CHECK(code_edit->is_in_comment(1) != -1);
+
+ code_edit->clear_comment_delimiters();
+ CHECK_FALSE(code_edit->has_comment_delimiter("$"));
+ CHECK(code_edit->get_comment_delimiters().size() == 0);
+
+ CHECK(code_edit->is_in_comment(1) == -1);
+ }
+
+ SUBCASE("[CodeEdit] single line mixed delimiters") {
+ /* Blank end key should set lineonly to true. */
+ /* Add string delimiter. */
+ code_edit->add_string_delimiter("&", "", false);
+ CHECK(code_edit->has_string_delimiter("&"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Add comment delimiter. */
+ code_edit->add_comment_delimiter("#", "", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Nest a string delimiter inside a comment. */
+ code_edit->set_text(" \n# & \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before first start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column after the first start key is in comment and start / end positions are correct. */
+ CHECK(code_edit->is_in_comment(1, 1) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1));
+
+ /* Check column after the second start key returns data for the first, and does not state string. */
+ CHECK(code_edit->is_in_comment(1, 5) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1));
+ CHECK(code_edit->is_in_string(1, 5) == -1);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Remove the comment delimiter. */
+ code_edit->remove_comment_delimiter("#");
+ CHECK_FALSE(code_edit->has_comment_delimiter("$"));
+ CHECK(code_edit->get_comment_delimiters().size() == 0);
+
+ /* The "first" comment region is no longer valid. */
+ CHECK(code_edit->is_in_comment(1, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 1) == OUTSIDE_DELIMETER);
+
+ /* The "second" region as string is now valid. */
+ CHECK(code_edit->is_in_string(1, 5) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(4, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1));
+ }
+ }
+
+ SUBCASE("[CodeEdit] multiline delimiters") {
+ SUBCASE("[CodeEdit] multiline string delimiters") {
+ code_edit->clear_string_delimiters();
+ code_edit->clear_comment_delimiters();
+
+ /* Add string delimiter. */
+ code_edit->add_string_delimiter("#", "#", false);
+ CHECK(code_edit->has_string_delimiter("#"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* First test over a single line. */
+ code_edit->set_text(" \n # # \n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column before closing delimiter is in string. */
+ CHECK(code_edit->is_in_string(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(5, 1));
+
+ /* Check column after end key is not in string. */
+ CHECK(code_edit->is_in_string(1, 6) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 6) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 6) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check the region metadata. */
+ int idx = code_edit->is_in_string(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test over a multiple blank lines. */
+ code_edit->set_text(" \n # \n\n # \n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in string. */
+ CHECK(code_edit->is_in_string(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3));
+
+ /* Check blank middle line. */
+ CHECK(code_edit->is_in_string(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3));
+
+ /* Check column just before end key is in string. */
+ CHECK(code_edit->is_in_string(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3));
+
+ /* Check column after end key is not in string. */
+ CHECK(code_edit->is_in_string(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* Next test over a multiple non-blank lines. */
+ code_edit->set_text(" \n # \n \n # \n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in string. */
+ CHECK(code_edit->is_in_string(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3));
+
+ /* Check middle line. */
+ CHECK(code_edit->is_in_string(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3));
+
+ /* Check column just before end key is in string. */
+ CHECK(code_edit->is_in_string(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3));
+
+ /* Check column after end key is not in string. */
+ CHECK(code_edit->is_in_string(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_string(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test nested strings. */
+ code_edit->add_string_delimiter("^", "^", false);
+ CHECK(code_edit->has_string_delimiter("^"));
+ CHECK(code_edit->get_string_delimiters().size() == 2);
+
+ code_edit->set_text(" \n # ^\n \n^ # \n ");
+
+ /* Check line above is not in string. */
+ CHECK(code_edit->is_in_string(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in string. */
+ CHECK(code_edit->is_in_string(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in string. */
+ CHECK(code_edit->is_in_string(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3));
+
+ /* Check middle line. */
+ CHECK(code_edit->is_in_string(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3));
+
+ /* Check column just before end key is in string. */
+ CHECK(code_edit->is_in_string(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3));
+
+ /* Check column after end key is not in string. */
+ CHECK(code_edit->is_in_string(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in string. */
+ CHECK(code_edit->is_in_string(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_string(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test no end key. */
+ code_edit->set_text(" \n # \n ");
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_string(1, 2);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(-1, -1));
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Check is in string with no column retruns true if entire line is string excluding whitespace. */
+ code_edit->set_text(" \n # \n\n #\n ");
+ CHECK(code_edit->is_in_string(1) != -1);
+ CHECK(code_edit->is_in_string(2) != -1);
+ CHECK(code_edit->is_in_string(3) != -1);
+
+ code_edit->set_text(" \n test # \n\n # test \n ");
+ CHECK(code_edit->is_in_string(1) == -1);
+ CHECK(code_edit->is_in_string(2) != -1);
+ CHECK(code_edit->is_in_string(3) == -1);
+ }
+
+ SUBCASE("[CodeEdit] multiline comment delimiters") {
+ /* Add comment delimiter. */
+ code_edit->add_comment_delimiter("#", "#", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* First test over a single line. */
+ code_edit->set_text(" \n # # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column before closing delimiter is in comment. */
+ CHECK(code_edit->is_in_comment(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(5, 1));
+
+ /* Check column after end key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 6) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 6) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 6) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(2, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER);
+
+ /* Check the region metadata. */
+ int idx = code_edit->is_in_comment(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test over a multiple blank lines. */
+ code_edit->set_text(" \n # \n\n # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in comment. */
+ CHECK(code_edit->is_in_comment(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3));
+
+ /* Check blank middle line. */
+ CHECK(code_edit->is_in_comment(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3));
+
+ /* Check column just before end key is in comment. */
+ CHECK(code_edit->is_in_comment(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3));
+
+ /* Check column after end key is not in comment. */
+ CHECK(code_edit->is_in_comment(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* Next test over a multiple non-blank lines. */
+ code_edit->set_text(" \n # \n \n # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in comment. */
+ CHECK(code_edit->is_in_comment(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3));
+
+ /* Check middle line. */
+ CHECK(code_edit->is_in_comment(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3));
+
+ /* Check column just before end key is in comment. */
+ CHECK(code_edit->is_in_comment(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3));
+
+ /* Check column after end key is not in comment. */
+ CHECK(code_edit->is_in_comment(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_comment(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test nested comments. */
+ code_edit->add_comment_delimiter("^", "^", false);
+ CHECK(code_edit->has_comment_delimiter("^"));
+ CHECK(code_edit->get_comment_delimiters().size() == 2);
+
+ code_edit->set_text(" \n # ^\n \n^ # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in comment. */
+ CHECK(code_edit->is_in_comment(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3));
+
+ /* Check middle line. */
+ CHECK(code_edit->is_in_comment(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3));
+
+ /* Check column just before end key is in comment. */
+ CHECK(code_edit->is_in_comment(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3));
+
+ /* Check column after end key is not in comment. */
+ CHECK(code_edit->is_in_comment(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_comment(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Next test no end key. */
+ code_edit->set_text(" \n # \n ");
+
+ /* check the region metadata. */
+ idx = code_edit->is_in_comment(1, 2);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(-1, -1));
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Check is in comment with no column retruns true if entire line is comment excluding whitespace. */
+ code_edit->set_text(" \n # \n\n #\n ");
+ CHECK(code_edit->is_in_comment(1) != -1);
+ CHECK(code_edit->is_in_comment(2) != -1);
+ CHECK(code_edit->is_in_comment(3) != -1);
+
+ code_edit->set_text(" \n test # \n\n # test \n ");
+ CHECK(code_edit->is_in_comment(1) == -1);
+ CHECK(code_edit->is_in_comment(2) != -1);
+ CHECK(code_edit->is_in_comment(3) == -1);
+ }
+
+ SUBCASE("[CodeEdit] multiline mixed delimiters") {
+ /* Add comment delimiter. */
+ code_edit->add_comment_delimiter("#", "#", false);
+ CHECK(code_edit->has_comment_delimiter("#"));
+ CHECK(code_edit->get_comment_delimiters().size() == 1);
+
+ /* Add string delimiter. */
+ code_edit->add_string_delimiter("^", "^", false);
+ CHECK(code_edit->has_string_delimiter("^"));
+ CHECK(code_edit->get_string_delimiters().size() == 1);
+
+ /* Nest a string inside a comment. */
+ code_edit->set_text(" \n # ^\n \n^ # \n ");
+
+ /* Check line above is not in comment. */
+ CHECK(code_edit->is_in_comment(0, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER);
+
+ /* Check column before start key is not in comment. */
+ CHECK(code_edit->is_in_comment(1, 0) == -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER);
+
+ /* Check column just after start key is in comment. */
+ CHECK(code_edit->is_in_comment(1, 2) != -1);
+ CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3));
+
+ /* Check middle line. */
+ CHECK(code_edit->is_in_comment(2, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3));
+
+ /* Check column just before end key is in comment. */
+ CHECK(code_edit->is_in_comment(3, 0) != -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1));
+ CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3));
+
+ /* Check column after end key is not in comment. */
+ CHECK(code_edit->is_in_comment(3, 3) == -1);
+ CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER);
+
+ /* Check line after is not in comment. */
+ CHECK(code_edit->is_in_comment(4, 1) == -1);
+ CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER);
+ CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER);
+
+ /* check the region metadata. */
+ int idx = code_edit->is_in_comment(1, 2);
+ CHECK(code_edit->get_delimiter_start_key(idx) == "#");
+ CHECK(code_edit->get_delimiter_end_key(idx) == "#");
+
+ /* Check is in comment with no column retruns true as inner delimiter should not be counted. */
+ CHECK(code_edit->is_in_comment(1) != -1);
+ CHECK(code_edit->is_in_comment(2) != -1);
+ CHECK(code_edit->is_in_comment(3) != -1);
+ }
+ }
+
+ memdelete(code_edit);
+}
+
+TEST_CASE("[SceneTree][CodeEdit] indent") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ SUBCASE("[CodeEdit] indent settings") {
+ code_edit->set_indent_size(10);
+ CHECK(code_edit->get_indent_size() == 10);
+ CHECK(code_edit->get_tab_size() == 10);
+
+ code_edit->set_auto_indent_enabled(false);
+ CHECK_FALSE(code_edit->is_auto_indent_enabled());
+
+ code_edit->set_auto_indent_enabled(true);
+ CHECK(code_edit->is_auto_indent_enabled());
+
+ code_edit->set_indent_using_spaces(false);
+ CHECK_FALSE(code_edit->is_indent_using_spaces());
+
+ code_edit->set_indent_using_spaces(true);
+ CHECK(code_edit->is_indent_using_spaces());
+
+ /* Only the first char is registered. */
+ TypedArray<String> auto_indent_prefixes;
+ auto_indent_prefixes.push_back("::");
+ auto_indent_prefixes.push_back("s");
+ auto_indent_prefixes.push_back("1");
+ code_edit->set_auto_indent_prefixes(auto_indent_prefixes);
+
+ auto_indent_prefixes = code_edit->get_auto_indent_prefixes();
+ CHECK(auto_indent_prefixes.has(":"));
+ CHECK(auto_indent_prefixes.has("s"));
+ CHECK(auto_indent_prefixes.has("1"));
+ }
+
+ SUBCASE("[CodeEdit] indent tabs") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(false);
+
+ /* Do nothing if not editable. */
+ code_edit->set_editable(false);
+
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0).is_empty());
+
+ code_edit->indent_lines();
+ CHECK(code_edit->get_line(0).is_empty());
+
+ code_edit->set_editable(true);
+
+ /* Simple indent. */
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "\t");
+
+ /* Check input action. */
+ SEND_GUI_ACTION(code_edit, "ui_text_indent");
+ CHECK(code_edit->get_line(0) == "\t\t");
+
+ /* Insert in place. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test");
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "test\t");
+
+ /* Indent lines does entire line and works without selection. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test");
+ code_edit->indent_lines();
+ CHECK(code_edit->get_line(0) == "\ttest");
+
+ /* Selection does entire line. */
+ code_edit->set_text("test");
+ code_edit->select_all();
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+
+ /* Handles multiple lines. */
+ code_edit->set_text("test\ntext");
+ code_edit->select_all();
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+ CHECK(code_edit->get_line(1) == "\ttext");
+
+ /* Do not indent line if last col is zero. */
+ code_edit->set_text("test\ntext");
+ code_edit->select(0, 0, 1, 0);
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Indent even if last column of first line. */
+ code_edit->set_text("test\ntext");
+ code_edit->select(0, 4, 1, 0);
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Check selection is adjusted. */
+ code_edit->set_text("test");
+ code_edit->select(0, 1, 0, 2);
+ code_edit->do_indent();
+ CHECK(code_edit->get_selection_from_column() == 2);
+ CHECK(code_edit->get_selection_to_column() == 3);
+ CHECK(code_edit->get_line(0) == "\ttest");
+ code_edit->undo();
+ }
+
+ SUBCASE("[CodeEdit] indent spaces") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(true);
+
+ /* Do nothing if not editable. */
+ code_edit->set_editable(false);
+
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0).is_empty());
+
+ code_edit->indent_lines();
+ CHECK(code_edit->get_line(0).is_empty());
+
+ code_edit->set_editable(true);
+
+ /* Simple indent. */
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " ");
+
+ /* Check input action. */
+ SEND_GUI_ACTION(code_edit, "ui_text_indent");
+ CHECK(code_edit->get_line(0) == " ");
+
+ /* Insert in place. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test");
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == "test ");
+
+ /* Indent lines does entire line and works without selection. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test");
+ code_edit->indent_lines();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Selection does entire line. */
+ code_edit->set_text("test");
+ code_edit->select_all();
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* single indent only add required spaces. */
+ code_edit->set_text(" test");
+ code_edit->select_all();
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Handles multiple lines. */
+ code_edit->set_text("test\ntext");
+ code_edit->select_all();
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " test");
+ CHECK(code_edit->get_line(1) == " text");
+
+ /* Do not indent line if last col is zero. */
+ code_edit->set_text("test\ntext");
+ code_edit->select(0, 0, 1, 0);
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Indent even if last column of first line. */
+ code_edit->set_text("test\ntext");
+ code_edit->select(0, 4, 1, 0);
+ code_edit->do_indent();
+ CHECK(code_edit->get_line(0) == " test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Check selection is adjusted. */
+ code_edit->set_text("test");
+ code_edit->select(0, 1, 0, 2);
+ code_edit->do_indent();
+ CHECK(code_edit->get_selection_from_column() == 5);
+ CHECK(code_edit->get_selection_to_column() == 6);
+ CHECK(code_edit->get_line(0) == " test");
+ }
+
+ SUBCASE("[CodeEdit] unindent tabs") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(false);
+
+ /* Do nothing if not editable. */
+ code_edit->set_text("\t");
+
+ code_edit->set_editable(false);
+
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "\t");
+
+ code_edit->unindent_lines();
+ CHECK(code_edit->get_line(0) == "\t");
+
+ code_edit->set_editable(true);
+
+ /* Simple unindent. */
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "");
+
+ /* Should inindent inplace. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test\t");
+
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+
+ /* Backspace does a simple unindent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("\t");
+ code_edit->backspace();
+ CHECK(code_edit->get_line(0) == "");
+
+ /* Unindent lines does entire line and works without selection. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("\ttest");
+ code_edit->unindent_lines();
+ CHECK(code_edit->get_line(0) == "test");
+
+ /* Caret on col zero unindent line. */
+ code_edit->set_text("\t\ttest");
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+
+ /* Check input action. */
+ code_edit->set_text("\t\ttest");
+ SEND_GUI_ACTION(code_edit, "ui_text_dedent");
+ CHECK(code_edit->get_line(0) == "\ttest");
+
+ /* Selection does entire line. */
+ code_edit->set_text("\t\ttest");
+ code_edit->select_all();
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "\ttest");
+
+ /* Handles multiple lines. */
+ code_edit->set_text("\ttest\n\ttext");
+ code_edit->select_all();
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Do not unindent line if last col is zero. */
+ code_edit->set_text("\ttest\n\ttext");
+ code_edit->select(0, 0, 1, 0);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == "\ttext");
+
+ /* Unindent even if last column of first line. */
+ code_edit->set_text("\ttest\n\ttext");
+ code_edit->select(0, 5, 1, 1);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Check selection is adjusted. */
+ code_edit->set_text("\ttest");
+ code_edit->select(0, 1, 0, 2);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_selection_from_column() == 0);
+ CHECK(code_edit->get_selection_to_column() == 1);
+ CHECK(code_edit->get_line(0) == "test");
+ }
+
+ SUBCASE("[CodeEdit] unindent spaces") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(true);
+
+ /* Do nothing if not editable. */
+ code_edit->set_text(" ");
+
+ code_edit->set_editable(false);
+
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == " ");
+
+ code_edit->unindent_lines();
+ CHECK(code_edit->get_line(0) == " ");
+
+ code_edit->set_editable(true);
+
+ /* Simple unindent. */
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "");
+
+ /* Should inindent inplace. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test ");
+
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+
+ /* Backspace does a simple unindent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret(" ");
+ code_edit->backspace();
+ CHECK(code_edit->get_line(0) == "");
+
+ /* Backspace with letter. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret(" a");
+ code_edit->backspace();
+ CHECK(code_edit->get_line(0) == " ");
+
+ /* Unindent lines does entire line and works without selection. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret(" test");
+ code_edit->unindent_lines();
+ CHECK(code_edit->get_line(0) == "test");
+
+ /* Caret on col zero unindent line. */
+ code_edit->set_text(" test");
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Only as far as needed */
+ code_edit->set_text(" test");
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Check input action. */
+ code_edit->set_text(" test");
+ SEND_GUI_ACTION(code_edit, "ui_text_dedent");
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Selection does entire line. */
+ code_edit->set_text(" test");
+ code_edit->select_all();
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == " test");
+
+ /* Handles multiple lines. */
+ code_edit->set_text(" test\n text");
+ code_edit->select_all();
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Do not unindent line if last col is zero. */
+ code_edit->set_text(" test\n text");
+ code_edit->select(0, 0, 1, 0);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == " text");
+
+ /* Unindent even if last column of first line. */
+ code_edit->set_text(" test\n text");
+ code_edit->select(0, 5, 1, 1);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_line(0) == "test");
+ CHECK(code_edit->get_line(1) == "text");
+
+ /* Check selection is adjusted. */
+ code_edit->set_text(" test");
+ code_edit->select(0, 4, 0, 5);
+ code_edit->do_unindent();
+ CHECK(code_edit->get_selection_from_column() == 0);
+ CHECK(code_edit->get_selection_to_column() == 1);
+ CHECK(code_edit->get_line(0) == "test");
+ }
+
+ SUBCASE("[CodeEdit] auto indent") {
+ SUBCASE("[CodeEdit] auto indent tabs") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(false);
+
+ /* Simple indent on new line. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test:");
+ CHECK(code_edit->get_line(1) == "\t");
+
+ /* new blank line should still indent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_blank");
+ CHECK(code_edit->get_line(0) == "test:");
+ CHECK(code_edit->get_line(1) == "\t");
+
+ /* new line above should not indent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_above");
+ CHECK(code_edit->get_line(0) == "");
+ CHECK(code_edit->get_line(1) == "test:");
+
+ /* Whitespace between symbol and caret is okay. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: ");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: ");
+ CHECK(code_edit->get_line(1) == "\t");
+
+ /* Comment between symbol and caret is okay. */
+ code_edit->add_comment_delimiter("#", "");
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: # comment");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: # comment");
+ CHECK(code_edit->get_line(1) == "\t");
+ code_edit->remove_comment_delimiter("#");
+
+ /* Strings between symbol and caret are not okay. */
+ code_edit->add_string_delimiter("#", "");
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: # string");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: # string");
+ CHECK(code_edit->get_line(1) == "");
+ code_edit->remove_comment_delimiter("#");
+
+ /* If between brace pairs an extra line is added. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test{");
+ CHECK(code_edit->get_line(1) == "\t");
+ CHECK(code_edit->get_line(2) == "}");
+
+ /* Except when we are going above. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_above");
+ CHECK(code_edit->get_line(0) == "");
+ CHECK(code_edit->get_line(1) == "test{}");
+
+ /* or below. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_blank");
+ CHECK(code_edit->get_line(0) == "test{}");
+ CHECK(code_edit->get_line(1) == "");
+ }
+
+ SUBCASE("[CodeEdit] auto indent spaces") {
+ code_edit->set_indent_size(4);
+ code_edit->set_auto_indent_enabled(true);
+ code_edit->set_indent_using_spaces(true);
+
+ /* Simple indent on new line. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test:");
+ CHECK(code_edit->get_line(1) == " ");
+
+ /* new blank line should still indent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_blank");
+ CHECK(code_edit->get_line(0) == "test:");
+ CHECK(code_edit->get_line(1) == " ");
+
+ /* new line above should not indent. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test:");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_above");
+ CHECK(code_edit->get_line(0) == "");
+ CHECK(code_edit->get_line(1) == "test:");
+
+ /* Whitespace between symbol and caret is okay. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: ");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: ");
+ CHECK(code_edit->get_line(1) == " ");
+
+ /* Comment between symbol and caret is okay. */
+ code_edit->add_comment_delimiter("#", "");
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: # comment");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: # comment");
+ CHECK(code_edit->get_line(1) == " ");
+ code_edit->remove_comment_delimiter("#");
+
+ /* Strings between symbol and caret are not okay. */
+ code_edit->add_string_delimiter("#", "");
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test: # string");
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test: # string");
+ CHECK(code_edit->get_line(1) == "");
+ code_edit->remove_comment_delimiter("#");
+
+ /* If between brace pairs an extra line is added. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline");
+ CHECK(code_edit->get_line(0) == "test{");
+ CHECK(code_edit->get_line(1) == " ");
+ CHECK(code_edit->get_line(2) == "}");
+
+ /* Except when we are going above. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_above");
+ CHECK(code_edit->get_line(0) == "");
+ CHECK(code_edit->get_line(1) == "test{}");
+
+ /* or below. */
+ code_edit->set_text("");
+ code_edit->insert_text_at_caret("test{}");
+ code_edit->set_caret_column(5);
+ SEND_GUI_ACTION(code_edit, "ui_text_newline_blank");
+ CHECK(code_edit->get_line(0) == "test{}");
+ CHECK(code_edit->get_line(1) == "");
+ }
+ }
+
+ memdelete(code_edit);
+}
+
+TEST_CASE("[SceneTree][CodeEdit] folding") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ SUBCASE("[CodeEdit] folding settings") {
+ code_edit->set_line_folding_enabled(true);
+ CHECK(code_edit->is_line_folding_enabled());
+
+ code_edit->set_line_folding_enabled(false);
+ CHECK_FALSE(code_edit->is_line_folding_enabled());
+ }
+
+ SUBCASE("[CodeEdit] folding") {
+ code_edit->set_line_folding_enabled(true);
+
+ // No indent.
+ code_edit->set_text("line1\nline2\nline3");
+ for (int i = 0; i < 2; i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Indented lines.
+ code_edit->set_text("\tline1\n\tline2\n\tline3");
+ for (int i = 0; i < 2; i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Indent.
+ code_edit->set_text("line1\n\tline2\nline3");
+ CHECK(code_edit->can_fold_line(0));
+ for (int i = 1; i < 2; i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2);
+
+ // Nested indents.
+ code_edit->set_text("line1\n\tline2\n\t\tline3\nline4");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK(code_edit->can_fold_line(1));
+ for (int i = 2; i < 3; i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK(code_edit->is_line_folded(1));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK_FALSE(code_edit->is_line_folded(3));
+ CHECK(code_edit->get_next_visible_line_offset_from(2, 1) == 2);
+
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK_FALSE(code_edit->is_line_folded(2));
+ CHECK_FALSE(code_edit->is_line_folded(3));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3);
+
+ // Check metadata.
+ CHECK(code_edit->get_folded_lines().size() == 1);
+ CHECK((int)code_edit->get_folded_lines()[0] == 0);
+
+ // Cannot unfold nested.
+ code_edit->unfold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // (un)Fold all / toggle.
+ code_edit->unfold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Check metadata.
+ CHECK(code_edit->get_folded_lines().size() == 0);
+
+ code_edit->fold_all_lines();
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3);
+
+ code_edit->unfold_all_lines();
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ code_edit->toggle_foldable_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3);
+
+ // Can also unfold from hidden line.
+ code_edit->unfold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Blank lines.
+ code_edit->set_text("line1\n\tline2\n\n\n\ttest\n\nline3");
+ CHECK(code_edit->can_fold_line(0));
+ for (int i = 1; i < code_edit->get_line_count(); i++) {
+ CHECK_FALSE(code_edit->can_fold_line(i));
+ code_edit->fold_line(i);
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ for (int i = 1; i < code_edit->get_line_count(); i++) {
+ CHECK_FALSE(code_edit->is_line_folded(i));
+ }
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 6);
+
+ // End of file.
+ code_edit->set_text("line1\n\tline2");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Comment & string blocks.
+ // Single line block
+ code_edit->add_comment_delimiter("#", "", true);
+ code_edit->set_text("#line1\n#\tline2");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Has to be full line.
+ code_edit->set_text("test #line1\n#\tline2");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ code_edit->set_text("#line1\ntest #\tline2");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // String.
+ code_edit->add_string_delimiter("^", "", true);
+ code_edit->set_text("^line1\n^\tline2");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Has to be full line.
+ code_edit->set_text("test ^line1\n^\tline2");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ code_edit->set_text("^line1\ntest ^\tline2");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Multiline blocks.
+ code_edit->add_comment_delimiter("&", "&", false);
+ code_edit->set_text("&line1\n\tline2&");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Has to be full line.
+ code_edit->set_text("test &line1\n\tline2&");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ code_edit->set_text("&line1\n\tline2& test");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Strings.
+ code_edit->add_string_delimiter("$", "$", false);
+ code_edit->set_text("$line1\n\tline2$");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Has to be full line.
+ code_edit->set_text("test $line1\n\tline2$");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ code_edit->set_text("$line1\n\tline2$ test");
+ CHECK_FALSE(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK_FALSE(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1);
+
+ // Non-indented comments/ strings.
+ // Single line
+ code_edit->set_text("test\n\tline1\n#line1\n#line2\n\ttest");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
+
+ code_edit->set_text("test\n\tline1\n^line1\n^line2\n\ttest");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
+
+ // Multiline
+ code_edit->set_text("test\n\tline1\n&line1\nline2&\n\ttest");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
+
+ code_edit->set_text("test\n\tline1\n$line1\nline2$\n\ttest");
+ CHECK(code_edit->can_fold_line(0));
+ CHECK_FALSE(code_edit->can_fold_line(1));
+ code_edit->fold_line(1);
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ code_edit->fold_line(0);
+ CHECK(code_edit->is_line_folded(0));
+ CHECK_FALSE(code_edit->is_line_folded(1));
+ CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
+ }
+
+ memdelete(code_edit);
+}
+
+TEST_CASE("[SceneTree][CodeEdit] completion") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ SUBCASE("[CodeEdit] auto brace completion") {
+ code_edit->set_auto_brace_completion_enabled(true);
+ CHECK(code_edit->is_auto_brace_completion_enabled());
+
+ code_edit->set_highlight_matching_braces_enabled(true);
+ CHECK(code_edit->is_highlight_matching_braces_enabled());
+
+ /* Try setters, any length. */
+ Dictionary auto_brace_completion_pairs;
+ auto_brace_completion_pairs["["] = "]";
+ auto_brace_completion_pairs["'"] = "'";
+ auto_brace_completion_pairs[";"] = "'";
+ auto_brace_completion_pairs["'''"] = "'''";
+ code_edit->set_auto_brace_completion_pairs(auto_brace_completion_pairs);
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+ CHECK(code_edit->get_auto_brace_completion_pairs()["["] == "]");
+ CHECK(code_edit->get_auto_brace_completion_pairs()["'"] == "'");
+ CHECK(code_edit->get_auto_brace_completion_pairs()[";"] == "'");
+ CHECK(code_edit->get_auto_brace_completion_pairs()["'''"] == "'''");
+
+ ERR_PRINT_OFF;
+
+ /* No duplicate start keys. */
+ code_edit->add_auto_brace_completion_pair("[", "]");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ /* No empty keys. */
+ code_edit->add_auto_brace_completion_pair("[", "");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ code_edit->add_auto_brace_completion_pair("", "]");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ code_edit->add_auto_brace_completion_pair("", "");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ /* Must be a symbol. */
+ code_edit->add_auto_brace_completion_pair("a", "]");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ code_edit->add_auto_brace_completion_pair("[", "a");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ code_edit->add_auto_brace_completion_pair("a", "a");
+ CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4);
+
+ ERR_PRINT_ON;
+
+ /* Check metadata. */
+ CHECK(code_edit->has_auto_brace_completion_open_key("["));
+ CHECK(code_edit->has_auto_brace_completion_open_key("'"));
+ CHECK(code_edit->has_auto_brace_completion_open_key(";"));
+ CHECK(code_edit->has_auto_brace_completion_open_key("'''"));
+ CHECK_FALSE(code_edit->has_auto_brace_completion_open_key("("));
+
+ CHECK(code_edit->has_auto_brace_completion_close_key("]"));
+ CHECK(code_edit->has_auto_brace_completion_close_key("'"));
+ CHECK(code_edit->has_auto_brace_completion_close_key("'''"));
+ CHECK_FALSE(code_edit->has_auto_brace_completion_close_key(")"));
+
+ CHECK(code_edit->get_auto_brace_completion_close_key("[") == "]");
+ CHECK(code_edit->get_auto_brace_completion_close_key("'") == "'");
+ CHECK(code_edit->get_auto_brace_completion_close_key(";") == "'");
+ CHECK(code_edit->get_auto_brace_completion_close_key("'''") == "'''");
+ CHECK(code_edit->get_auto_brace_completion_close_key("(").is_empty());
+
+ /* Check typing inserts closing pair. */
+ code_edit->clear();
+ SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT);
+ CHECK(code_edit->get_line(0) == "[]");
+
+ /* Should first match and insert smaller key. */
+ code_edit->clear();
+ SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ CHECK(code_edit->get_line(0) == "''");
+ CHECK(code_edit->get_caret_column() == 1);
+
+ /* Move out from centre, Should match and insert larger key. */
+ SEND_GUI_ACTION(code_edit, "ui_text_caret_right");
+ SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ CHECK(code_edit->get_line(0) == "''''''");
+ CHECK(code_edit->get_caret_column() == 3);
+
+ /* Backspace should remove all. */
+ SEND_GUI_ACTION(code_edit, "ui_text_backspace");
+ CHECK(code_edit->get_line(0).is_empty());
+
+ /* If in between and typing close key should "skip". */
+ SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT);
+ CHECK(code_edit->get_line(0) == "[]");
+ CHECK(code_edit->get_caret_column() == 1);
+ SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETRIGHT);
+ CHECK(code_edit->get_line(0) == "[]");
+ CHECK(code_edit->get_caret_column() == 2);
+
+ /* If current is char and inserting a string, do not autocomplete. */
+ code_edit->clear();
+ SEND_GUI_KEY_EVENT(code_edit, KEY_A);
+ SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ CHECK(code_edit->get_line(0) == "A'");
+
+ /* If in comment, do not complete. */
+ code_edit->add_comment_delimiter("#", "");
+ code_edit->clear();
+ SEND_GUI_KEY_EVENT(code_edit, KEY_NUMBERSIGN);
+ SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ CHECK(code_edit->get_line(0) == "#'");
+
+ /* If in string, and inserting string do not complete. */
+ code_edit->clear();
+ SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE);
+ SEND_GUI_KEY_EVENT(code_edit, KEY_QUOTEDBL);
+ CHECK(code_edit->get_line(0) == "'\"'");
+ }
+
+ SUBCASE("[CodeEdit] autocomplete") {
+ code_edit->set_code_completion_enabled(true);
+ CHECK(code_edit->is_code_completion_enabled());
+
+ /* Set prefixes, single char only, disallow empty. */
+ TypedArray<String> completion_prefixes;
+ completion_prefixes.push_back("");
+ completion_prefixes.push_back(".");
+ completion_prefixes.push_back(".");
+ completion_prefixes.push_back(",,");
+
+ ERR_PRINT_OFF;
+ code_edit->set_code_completion_prefixes(completion_prefixes);
+ ERR_PRINT_ON;
+ completion_prefixes = code_edit->get_code_completion_prefixes();
+ CHECK(completion_prefixes.size() == 2);
+ CHECK(completion_prefixes.has("."));
+ CHECK(completion_prefixes.has(","));
+
+ code_edit->set_text("test\ntest");
+ CHECK(code_edit->get_text_for_code_completion() == String::chr(0xFFFF) + "test\ntest");
+ }
+
+ SUBCASE("[CodeEdit] autocomplete request") {
+ SIGNAL_WATCH(code_edit, "request_code_completion");
+ code_edit->set_code_completion_enabled(true);
+
+ Array signal_args;
+ signal_args.push_back(Array());
+
+ /* Force request. */
+ code_edit->request_code_completion();
+ SIGNAL_CHECK_FALSE("request_code_completion");
+ code_edit->request_code_completion(true);
+ SIGNAL_CHECK("request_code_completion", signal_args);
+
+ /* Manual request should force. */
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_query");
+ SIGNAL_CHECK("request_code_completion", signal_args);
+
+ /* Insert prefix. */
+ TypedArray<String> completion_prefixes;
+ completion_prefixes.push_back(".");
+ code_edit->set_code_completion_prefixes(completion_prefixes);
+
+ code_edit->insert_text_at_caret(".");
+ code_edit->request_code_completion();
+ SIGNAL_CHECK("request_code_completion", signal_args);
+
+ /* Should work with space too. */
+ code_edit->insert_text_at_caret(" ");
+ code_edit->request_code_completion();
+ SIGNAL_CHECK("request_code_completion", signal_args);
+
+ /* Should work when complete ends with prefix. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("t");
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "test.", "test.");
+ code_edit->update_code_completion_options();
+ code_edit->confirm_code_completion();
+ CHECK(code_edit->get_line(0) == "test.");
+ SIGNAL_CHECK("request_code_completion", signal_args);
+
+ SIGNAL_UNWATCH(code_edit, "request_code_completion");
+ }
+
+ SUBCASE("[CodeEdit] autocomplete completion") {
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+ code_edit->set_code_completion_enabled(true);
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+
+ code_edit->update_code_completion_options();
+ code_edit->set_code_completion_selected_index(1);
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+ CHECK(code_edit->get_code_completion_option(0).size() == 0);
+ CHECK(code_edit->get_code_completion_options().size() == 0);
+
+ /* Adding does not update the list. */
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_0.", "item_0");
+
+ code_edit->set_code_completion_selected_index(1);
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+ CHECK(code_edit->get_code_completion_option(0).size() == 0);
+ CHECK(code_edit->get_code_completion_options().size() == 0);
+
+ /* After update, pending add should not be counted, */
+ /* also does not work on col 0 */
+ code_edit->insert_text_at_caret("i");
+ code_edit->update_code_completion_options();
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0", Color(1, 0, 0), RES(), Color(1, 0, 0));
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_1.", "item_1");
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_2.", "item_2");
+
+ ERR_PRINT_OFF;
+ code_edit->set_code_completion_selected_index(1);
+ ERR_PRINT_ON;
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+ CHECK(code_edit->get_code_completion_option(0).size() == 6);
+ CHECK(code_edit->get_code_completion_options().size() == 1);
+
+ /* Check cancel closes completion. */
+ SEND_GUI_ACTION(code_edit, "ui_cancel");
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+
+ code_edit->update_code_completion_options();
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+ code_edit->set_code_completion_selected_index(1);
+ CHECK(code_edit->get_code_completion_selected_index() == 1);
+ CHECK(code_edit->get_code_completion_option(0).size() == 6);
+ CHECK(code_edit->get_code_completion_options().size() == 3);
+
+ /* Check data. */
+ Dictionary option = code_edit->get_code_completion_option(0);
+ CHECK((int)option["kind"] == (int)CodeEdit::CodeCompletionKind::KIND_CLASS);
+ CHECK(option["display_text"] == "item_0.");
+ CHECK(option["insert_text"] == "item_0");
+ CHECK(option["font_color"] == Color(1, 0, 0));
+ CHECK(option["icon"] == RES());
+ CHECK(option["default_value"] == Color(1, 0, 0));
+
+ /* Set size for mouse input. */
+ code_edit->set_size(Size2(100, 100));
+
+ /* Check input. */
+ SEND_GUI_ACTION(code_edit, "ui_end");
+ CHECK(code_edit->get_code_completion_selected_index() == 2);
+
+ SEND_GUI_ACTION(code_edit, "ui_home");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_ACTION(code_edit, "ui_page_down");
+ CHECK(code_edit->get_code_completion_selected_index() == 2);
+
+ SEND_GUI_ACTION(code_edit, "ui_page_up");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_ACTION(code_edit, "ui_up");
+ CHECK(code_edit->get_code_completion_selected_index() == 2);
+
+ SEND_GUI_ACTION(code_edit, "ui_down");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_KEY_EVENT(code_edit, KEY_T);
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_ACTION(code_edit, "ui_left");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_ACTION(code_edit, "ui_right");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ SEND_GUI_ACTION(code_edit, "ui_text_backspace");
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ Point2 caret_pos = code_edit->get_caret_draw_pos();
+ caret_pos.y -= code_edit->get_line_height();
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_DOWN, MOUSE_BUTTON_NONE);
+ CHECK(code_edit->get_code_completion_selected_index() == 1);
+
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_UP, MOUSE_BUTTON_NONE);
+ CHECK(code_edit->get_code_completion_selected_index() == 0);
+
+ /* Single click selects. */
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MASK_LEFT);
+ CHECK(code_edit->get_code_completion_selected_index() == 2);
+
+ /* Double click inserts. */
+ SEND_GUI_DOUBLE_CLICK(code_edit, caret_pos);
+ CHECK(code_edit->get_code_completion_selected_index() == -1);
+ CHECK(code_edit->get_line(0) == "item_2");
+
+ code_edit->set_auto_brace_completion_enabled(false);
+
+ /* Does nothing in readonly. */
+ code_edit->undo();
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ code_edit->set_editable(false);
+ code_edit->confirm_code_completion();
+ code_edit->set_editable(true);
+ CHECK(code_edit->get_line(0) == "i");
+
+ /* Replace */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0 test");
+
+ /* Replace string. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("\"item_1 test\"");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "\"item_0\"");
+
+ /* Normal replace if no end is given. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("\"item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "\"item_0\" test");
+
+ /* Insert at completion. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
+ CHECK(code_edit->get_line(0) == "item_01 test");
+
+ /* Insert at completion with string should have same output. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("\"item_1 test\"");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
+ CHECK(code_edit->get_line(0) == "\"item_0\"1 test\"");
+
+ /* Merge symbol at end on insert text. */
+ /* End on completion entry. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0( test");
+ CHECK(code_edit->get_caret_column() == 7);
+
+ /* End of text*/
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1( test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0( test");
+ CHECK(code_edit->get_caret_column() == 6);
+
+ /* End of both. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1( test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0( test");
+ CHECK(code_edit->get_caret_column() == 7);
+
+ /* Full set. */
+ /* End on completion entry. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 8);
+
+ /* End of text*/
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1() test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 6);
+
+ /* End of both. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1() test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 8);
+
+ /* Autobrace completion. */
+ code_edit->set_auto_brace_completion_enabled(true);
+
+ /* End on completion entry. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 7);
+
+ /* End of text*/
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1( test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0( test");
+ CHECK(code_edit->get_caret_column() == 6);
+
+ /* End of both. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1( test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0( test");
+ CHECK(code_edit->get_caret_column() == 7);
+
+ /* Full set. */
+ /* End on completion entry. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1 test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 8);
+
+ /* End of text*/
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1() test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 6);
+
+ /* End of both. */
+ code_edit->clear();
+ code_edit->insert_text_at_caret("item_1() test");
+ code_edit->set_caret_column(2);
+ code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
+ code_edit->update_code_completion_options();
+ SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
+ CHECK(code_edit->get_line(0) == "item_0() test");
+ CHECK(code_edit->get_caret_column() == 8);
+ }
+
+ memdelete(code_edit);
+}
+
+TEST_CASE("[SceneTree][CodeEdit] symbol lookup") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ code_edit->set_symbol_lookup_on_click_enabled(true);
+ CHECK(code_edit->is_symbol_lookup_on_click_enabled());
+
+ /* Set size for mouse input. */
+ code_edit->set_size(Size2(100, 100));
+
+ code_edit->set_text("this is some text");
+
+ Point2 caret_pos = code_edit->get_caret_draw_pos();
+ caret_pos.x += 55;
+ SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE);
+ CHECK(code_edit->get_text_for_symbol_lookup() == "this is s" + String::chr(0xFFFF) + "ome text");
+
+ SIGNAL_WATCH(code_edit, "symbol_validate");
+
+#ifdef OSX_ENABLED
+ SEND_GUI_KEY_EVENT(code_edit, KEY_META);
+#else
+ SEND_GUI_KEY_EVENT(code_edit, KEY_CTRL);
+#endif
+
+ Array signal_args;
+ Array arg;
+ arg.push_back("some");
+ signal_args.push_back(arg);
+ SIGNAL_CHECK("symbol_validate", signal_args);
+
+ SIGNAL_UNWATCH(code_edit, "symbol_validate");
+
+ memdelete(code_edit);
+}
+
+TEST_CASE("[SceneTree][CodeEdit] line length guidelines") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+
+ TypedArray<int> guide_lines;
+
+ code_edit->set_line_length_guidelines(guide_lines);
+ CHECK(code_edit->get_line_length_guidelines().size() == 0);
+
+ guide_lines.push_back(80);
+ guide_lines.push_back(120);
+
+ /* Order should be preserved. */
+ code_edit->set_line_length_guidelines(guide_lines);
+ CHECK((int)code_edit->get_line_length_guidelines()[0] == 80);
+ CHECK((int)code_edit->get_line_length_guidelines()[1] == 120);
+
+ memdelete(code_edit);
+}
+
} // namespace TestCodeEdit
#endif // TEST_CODE_EDIT_H
diff --git a/tests/test_macros.h b/tests/test_macros.h
index bf1001fa67..2f0bc6dcfa 100644
--- a/tests/test_macros.h
+++ b/tests/test_macros.h
@@ -131,8 +131,12 @@ int register_test_command(String p_command, TestFunc p_function);
register_test_command(m_command, m_function); \
DOCTEST_GLOBAL_NO_WARNINGS_END()
-// Utility macro to send an action event to a given object
+// Utility macros to send an event actions to a given object
// Requires Message Queue and InputMap to be setup.
+// SEND_GUI_ACTION - takes an object and a input map key. e.g SEND_GUI_ACTION(code_edit, "ui_text_newline").
+// SEND_GUI_KEY_EVENT - takes an object and a keycode set. e.g SEND_GUI_KEY_EVENT(code_edit, KEY_A | KEY_MASK_CMD).
+// SEND_GUI_MOUSE_EVENT - takes an object, position, mouse button and mouse mask e.g SEND_GUI_MOUSE_EVENT(code_edit, Vector2(50, 50), MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE);
+// SEND_GUI_DOUBLE_CLICK - takes an object and a postion. e.g SEND_GUI_DOUBLE_CLICK(code_edit, Vector2(50, 50));
#define SEND_GUI_ACTION(m_object, m_action) \
{ \
@@ -144,6 +148,37 @@ int register_test_command(String p_command, TestFunc p_function);
MessageQueue::get_singleton()->flush(); \
}
+#define SEND_GUI_KEY_EVENT(m_object, m_input) \
+ { \
+ Ref<InputEventKey> event = InputEventKey::create_reference(m_input); \
+ event->set_pressed(true); \
+ m_object->gui_input(event); \
+ MessageQueue::get_singleton()->flush(); \
+ }
+
+#define _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask) \
+ Ref<InputEventMouseButton> event; \
+ event.instantiate(); \
+ event->set_position(m_local_pos); \
+ event->set_button_index(m_input); \
+ event->set_button_mask(m_mask); \
+ event->set_pressed(true);
+
+#define SEND_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask) \
+ { \
+ _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask); \
+ m_object->get_viewport()->push_input(event); \
+ MessageQueue::get_singleton()->flush(); \
+ }
+
+#define SEND_GUI_DOUBLE_CLICK(m_object, m_local_pos) \
+ { \
+ _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_LEFT); \
+ event->set_double_click(true); \
+ m_object->get_viewport()->push_input(event); \
+ MessageQueue::get_singleton()->flush(); \
+ }
+
// Utility class / macros for testing signals
//
// Use SIGNAL_WATCH(*object, "signal_name") to start watching
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 3b5ec77b73..081c18acae 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -192,13 +192,13 @@ Files extracted from upstream source:
## harfbuzz
- Upstream: https://github.com/harfbuzz/harfbuzz
-- Version: 2.8.0 (03538e872a0610a65fad692b33d3646f387cf578, 2021)
+- Version: 3.0.0 (9c387e20d65a7a366ac270d789f6ad266014c9e0, 2021)
- License: MIT
Files extracted from upstream source:
- the `src` folder
-- `AUTHORS`, `COPYING`, `NEWS`, `THANKS`
+- `AUTHORS`, `COPYING`, `THANKS`
## icu4c
diff --git a/thirdparty/harfbuzz/COPYING b/thirdparty/harfbuzz/COPYING
index 57343164f2..48d1b30f90 100644
--- a/thirdparty/harfbuzz/COPYING
+++ b/thirdparty/harfbuzz/COPYING
@@ -4,14 +4,14 @@ files names COPYING in subdirectories where applicable.
Copyright © 2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020 Google, Inc.
Copyright © 2018,2019,2020 Ebrahim Byagowi
-Copyright © 2019,2020 Facebook, Inc.
+Copyright © 2019,2020 Facebook, Inc.
Copyright © 2012 Mozilla Foundation
Copyright © 2011 Codethink Limited
Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies)
Copyright © 2009 Keith Stribley
Copyright © 2009 Martin Hosken and SIL International
Copyright © 2007 Chris Wilson
-Copyright © 2006 Behdad Esfahbod
+Copyright © 2005,2006,2020,2021 Behdad Esfahbod
Copyright © 2005 David Turner
Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc.
Copyright © 1998-2004 David Turner and Werner Lemberg
diff --git a/thirdparty/harfbuzz/NEWS b/thirdparty/harfbuzz/NEWS
deleted file mode 100644
index 321c550188..0000000000
--- a/thirdparty/harfbuzz/NEWS
+++ /dev/null
@@ -1,2457 +0,0 @@
-Overview of changes leading to 2.8.0
-Tuesday, March 16, 2021
-====================================
-- Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine.
- Previously these were shaped using the generalized Arabic shaper. (David Corbett)
-- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett)
-- Update language tags. (David Corbett)
-- Variations: reduce error: do not round each interpolated delta. (Just van Rossum)
-- Documentation improvements. (Khaled Hosny, Nathan Willis)
-- Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu)
-- Fuzzer-found fixes and other improvements when memory failures happen. (Behdad)
-- Removed most atomic implementations now that we have C++11 atomic impl. (Behdad)
-- General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad)
-
-
-Overview of changes leading to 2.7.4
-Sunday, December 27, 2020
-====================================
-- Fix missing --enable-introspection configure option from previous release
- tarball.
-- Documentation updates.
-
-Overview of changes leading to 2.7.3
-Wednesday, December 23, 2020
-====================================
-- Update USE shaper to 2020-08-13 specification, and other improvements.
-- Don’t disable liga feature in myanmar shaper, to match Uniscribe.
-- Improvements to language and script tags handling.
-- Update language system tag registry to OpenType 1.8.4
-- Support for serializing and deserializing Unicode buffers. Serialized buffers
- are now delimited with `<>` or `[]` based on whether it is a Unicode or
- glyphs buffer.
-- Increase buffer work limits to handle fonts with many complex lookups.
-- Handle more shaping operations in trace output.
-- Memory access fixes.
-- More OOM fixes.
-- Improved documentation.
-- Build system improvements.
-- New API:
-+hb_buffer_has_positions()
-+hb_buffer_serialize()
-+hb_buffer_serialize_unicode()
-+hb_buffer_deserialize_unicode()
-
-
-Overview of changes leading to 2.7.2
-Saturday, August 29, 2020
-====================================
-- Fix a regression in the previous release that caused a crash with Kaithi.
-- More OOM fixes.
-
-
-Overview of changes leading to 2.7.1
-Thursday, August 13, 2020
-====================================
-- ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present.
-- Reverted a GDEF processing regression.
-- A couple of fixes to handle OOM better.
-
-
-Overview of changes leading to 2.7.0
-Saturday, July 25, 2020
-====================================
-- Use an implementation for round that always rounds up, some minor fluctuations
- are expected on var font specially when hb-ot callback is used.
-- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN.
-- Remove AAT's `lcar` table support from _get_ligature_carets API, not even much
- use on macOS installed fonts (only two files). GDEF support is the recommended
- one and expected to work properly after issues fixed two releases ago.
-- Minor memory fixes to handle OOM better specially in hb-ft.
-- Minor .so files versioning scheme change and remove stable/unstable scheme
- differences, was never used in practice (always default to stable scheme).
-- We are now suggesting careful packaging of the library using meson,
- https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson
- for more information.
-- Distribution package URL is changed, either use GitHub generated tarballs,
- `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz`
- or, even more preferably use commit hash of the release and git checkouts like,
- `git+https://github.com/harfbuzz/harfbuzz#commit=$commit`
-
-
-Overview of changes leading to 2.6.8
-Monday, June 22, 2020
-====================================
-- New API to fetch glyph alternates from GSUB table.
-- hb-coretext build fix for macOS < 10.10.
-- Meson build fixes, cmake port removal is postponed but please prepare for
- it and give us feedback.
- Autotools is still our main build system however please consider
- experimenting with meson also for packaging the library.
-- New API:
-+hb_ot_layout_lookup_get_glyph_alternates()
-
-
-Overview of changes leading to 2.6.7
-Wednesday, June 3, 2020
-====================================
-- Update to Unicode 13.0.0.
-- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was
- completely broken for all the other fonts since 2.1.2.
-- As a part of our migration to meson, this release will be the last one
- to provide cmake port files but autotools still is our main build system.
- There is a possibility that the next version or the after be released
- using meson.
-
-
-Overview of changes leading to 2.6.6
-Tuesday, May 12, 2020
-====================================
-- A fix in AAT kerning for Geeza Pro.
-- Better support for resource fork fonts on macOS.
-
-
-Overview of changes leading to 2.6.5
-Friday, April 17, 2020
-====================================
-- Add experimental meson build system. Autotools is still the primary
- and supported build system.
-- AAT is now always preferred for horizontal scripts when both AAT and OT
- layout tables exist at the same time.
-- Subsetter improvements.
-- New API:
-+hb_ft_font_lock_face()
-+hb_ft_font_unlock_face()
-
-
-Overview of changes leading to 2.6.4
-Monday, October 29, 2019
-====================================
-- Small bug fix.
-- Build fixes.
-
-
-Overview of changes leading to 2.6.3
-Monday, October 28, 2019
-====================================
-- Misc small fixes, mostly to build-related issues.
-- New API:
-+hb_font_get_nominal_glyphs()
-
-
-Overview of changes leading to 2.6.2
-Monday, September 30, 2019
-====================================
-- Misc small fixes, mostly to build-related issues.
-
-
-Overview of changes leading to 2.6.1
-Thursday, August 22, 2019
-====================================
-- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0.
-- Change interpretation of font PTEM size / CoreText font size handling.
- See https://github.com/harfbuzz/harfbuzz/pull/1484
-- hb-ot-font: Prefer symbol cmap subtable if present.
-- Apply 'dist'/'abvm'/'blwm' features to all scripts.
-- Drop experimental DirectWrite API.
-
-
-Overview of changes leading to 2.6.0
-Tuesday, August 13, 2019
-====================================
-- New OpenType metrics, baseline, and metadata table access APIs.
-- New API to set font variations to a named-instance.
-- New hb-gdi.h header and API for creating hb_face_t from HFONT.
-- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building.
-- More size-reduction configurable options, enabled by HB_TINY.
-- New API:
-+hb_font_set_var_named_instance()
-+hb_gdi_face_create()
-+hb_ot_layout_baseline_tag_t
-+hb_ot_layout_get_baseline()
-+hb_ot_meta_tag_t
-+hb_ot_meta_get_entry_tags()
-+hb_ot_meta_reference_entry()
-+hb_ot_metrics_tag_t
-+hb_ot_metrics_get_position()
-+hb_ot_metrics_get_variation()
-+hb_ot_metrics_get_x_variation()
-+hb_ot_metrics_get_y_variation()
-
-
-Overview of changes leading to 2.5.3
-Wednesday, June 26, 2019
-====================================
-- Fix UCD script data for Unicode 10+ scripts. This was broken since 2.5.0.
-- More optimizations for HB_TINY.
-
-
-Overview of changes leading to 2.5.2
-Thursday, June 20, 2019
-====================================
-- More hb-config.hh facilities to shrink library size, namely when built as
- HB_TINY.
-- New documentation of custom configurations in CONFIG.md.
-- Fix build on gcc 4.8. That's supported again.
-- Universal Shaping Engine improvements thanks to David Corbett.
-- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft,
- such that Type1 fonts will continue kerning.
-
-
-Overview of changes leading to 2.5.1
-Friday, May 31, 2019
-====================================
-- Fix build with various versions of Visual Studio.
-- Improved documentation, thanks to Nathan Willis.
-- Bugfix in subsetting glyf table.
-- Improved scripts for cross-compiling for Windows using mingw.
-- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER.
- A deprecated macro is added for backwards-compatibility.
-
-
-Overview of changes leading to 2.5.0
-Friday, May 24, 2019
-====================================
-- This release does not include much functional changes, but includes major internal
- code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been
- dropped.
-- New hb-config.hh facility for compiling smaller library for embedded and web usecases.
-- New Unicode Character Databse implementation that is half the size of previously-used
- UCDN.
-- Subsetter improvements.
-- Improved documentation, thanks to Nathan Willis.
-- Misc shaping fixes.
-
-
-Overview of changes leading to 2.4.0
-Monday, March 25, 2019
-====================================
-- Unicode 12.
-- Misc fixes.
-- Subsetter improvements.
-- New API:
-HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
-hb_directwrite_face_create()
-
-
-Overview of changes leading to 2.3.1
-Wednesday, January 30, 2019
-====================================
-- AAT bug fixes.
-- Misc internal housekeeping cleanup.
-
-
-Overview of changes leading to 2.3.0
-Thursday, December 20, 2018
-====================================
-- Fix regression on big-endian architectures. Ouch!
-- Misc bug and build fixes.
-- Fix subsetting of simple GSUB/GDEF.
-- Merge CFF / CFF2 support contributed by Adobe. This mostly involves
- the subsetter, but also get_glyph_extents on CFF fonts.
-
-New API in hb-aat.h:
-+hb_aat_layout_has_substitution()
-+hb_aat_layout_has_positioning()
-+hb_aat_layout_has_tracking()
-
-
-Overview of changes leading to 2.2.0
-Thursday, November 29, 2018
-====================================
-- Misc shaping bug fixes.
-- Add font variations named-instance API.
-- Deprecate font variations axis enumeration API and add replacement.
-- AAT shaping improvements:
- o Fixed 'kern' table Format 2 implementation.
- o Implement 'feat' table API for feature detection.
- o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'.
-
-New API:
-+hb_aat_layout_feature_type_t
-+hb_aat_layout_feature_selector_t
-+hb_aat_layout_get_feature_types()
-+hb_aat_layout_feature_type_get_name_id
-+hb_aat_layout_feature_selector_info_t
-+HB_AAT_LAYOUT_NO_SELECTOR_INDEX
-+hb_aat_layout_feature_type_get_selector_infos()
-+hb_ot_var_axis_flags_t
-+hb_ot_var_axis_info_t
-+hb_ot_var_get_axis_infos()
-+hb_ot_var_find_axis_info()
-+hb_ot_var_get_named_instance_count()
-+hb_ot_var_named_instance_get_subfamily_name_id()
-+hb_ot_var_named_instance_get_postscript_name_id()
-+hb_ot_var_named_instance_get_design_coords()
-
-Deprecated API:
-+HB_OT_VAR_NO_AXIS_INDEX
-+hb_ot_var_axis_t
-+hb_ot_var_get_axes()
-+hb_ot_var_find_axis()
-
-
-Overview of changes leading to 2.1.3
-Friday, November 16, 2018
-====================================
-- Fix AAT 'mort' shaping, which was broken in 2.1.2
-
-
-Overview of changes leading to 2.1.2
-Friday, November 16, 2018
-====================================
-- Various internal changes.
-- AAT shaping improvements:
- o Implement kern table Format 1 state-machine-based kerning.
- o Implement cross-stream kerning (cursive positioning, etc).
- o Ignore emptyish GSUB tables (zero scripts) if morx present.
- o Don't apply GPOS if morx is being applied. Matches Apple.
-
-
--Overview of changes leading to 2.1.1
-Monday, November 5, 2018
-====================================
-- AAT improvements:
- o Implement 'mort' table.
- o Implement 'kern' subtables Format 1 and Format 3.
-
-
-Overview of changes leading to 2.1.0
-Tuesday, October 30, 2018
-====================================
-- AAT shaping improvements:
- o Allow user controlling AAT features, for whole buffer only currently.
- o Several 'morx' fixes.
- o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default
- San Francisco fonts.
-- Support for color fonts:
- o COLR/CPAL API to fetch color layers.
- o SVG table to fetch SVG documents.
- o CBDT/sbix API to fetch PNG images.
-- New 'name' table API.
-- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs
- in vertical layout.
-- Various fuzzer-found bug fixes.
-
-Changed API:
-
-A type and a macro added in 2.0.0 were renamed:
-
-hb_name_id_t -> hb_ot_name_id_t
-HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID
-
-New API:
-
-+hb_color_t
-+HB_COLOR
-+hb_color_get_alpha()
-+hb_color_get_red()
-+hb_color_get_green()
-+hb_color_get_blue()
-+hb_ot_color_has_palettes()
-+hb_ot_color_palette_get_count()
-+hb_ot_color_palette_get_name_id()
-+hb_ot_color_palette_color_get_name_id()
-+hb_ot_color_palette_flags_t
-+hb_ot_color_palette_get_flags()
-+hb_ot_color_palette_get_colors()
-+hb_ot_color_has_layers()
-+hb_ot_color_layer_t
-+hb_ot_color_glyph_get_layers()
-+hb_ot_color_has_svg()
-+hb_ot_color_glyph_reference_svg()
-+hb_ot_color_has_png()
-+hb_ot_color_glyph_reference_png()
-
-+hb_ot_name_id_t
-+HB_OT_NAME_ID_INVALID
-+HB_OT_NAME_ID_COPYRIGHT
-+HB_OT_NAME_ID_FONT_FAMILY
-+HB_OT_NAME_ID_FONT_SUBFAMILY
-+HB_OT_NAME_ID_UNIQUE_ID
-+HB_OT_NAME_ID_FULL_NAME
-+HB_OT_NAME_ID_VERSION_STRING
-+HB_OT_NAME_ID_POSTSCRIPT_NAME
-+HB_OT_NAME_ID_TRADEMARK
-+HB_OT_NAME_ID_MANUFACTURER
-+HB_OT_NAME_ID_DESIGNER
-+HB_OT_NAME_ID_DESCRIPTION
-+HB_OT_NAME_ID_VENDOR_URL
-+HB_OT_NAME_ID_DESIGNER_URL
-+HB_OT_NAME_ID_LICENSE
-+HB_OT_NAME_ID_LICENSE_URL
-+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
-+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
-+HB_OT_NAME_ID_MAC_FULL_NAME
-+HB_OT_NAME_ID_SAMPLE_TEXT
-+HB_OT_NAME_ID_CID_FINDFONT_NAME
-+HB_OT_NAME_ID_WWS_FAMILY
-+HB_OT_NAME_ID_WWS_SUBFAMILY
-+HB_OT_NAME_ID_LIGHT_BACKGROUND
-+HB_OT_NAME_ID_DARK_BACKGROUND
-+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
-+hb_ot_name_entry_t
-+hb_ot_name_list_names()
-+hb_ot_name_get_utf8()
-+hb_ot_name_get_utf16()
-+hb_ot_name_get_utf32()
-
-
-Overview of changes leading to 2.0.2
-Saturday, October 20, 2018
-====================================
-- Fix two minor memory access issues in AAT tables.
-
-
-Overview of changes leading to 2.0.1
-Friday, October 19, 2018
-====================================
-- Fix hb-version.h reported release version that went wrong (1.8.0)
- with previous release.
-- Fix extrapolation in 'trak' table.
-- Fix hb-font infinite-recursion issue with some font funcs and
- subclassed fonts.
-- Implement variation-kerning format in kerx table, although without
- variation.
-- Fix return value of hb_map_is_empty().
-
-
-Overview of changes leading to 2.0.0
-Thursday, October 18, 2018
-====================================
-- Added AAT shaping support (morx/kerx/trak).
- Automatically used if GSUB/GPOS are not available respectively.
- Set HB_OPTIONS=aat env var to have morx/kerx preferred over
- GSUB/GPOS.
-- Apply TrueType kern table internally, instead of relying on
- hb_font_t callbacks.
-- Khmer shaper significantly rewritten to better match Uniscribe.
-- Indic3 tags ('dev3', etc) are passed to USE shaper.
-- .dfont Mac font containers implemented.
-- Script- and language-mapping revamped to better use BCP 47.
-- Misc USE and Indic fixes.
-- Misc everything fixes.
-- Too many things to list. Biggest release since 0.9.1, with
- over 500 commits in just over 5 weeks! Didn't intend it to
- be a big release. Just happened to become.
-- hb-ft now locks underlying FT_Face during use.
-
-API changes:
-
-- Newly-created hb_font_t's now have our internal "hb-ot-font"
- callbacks set on them, so they should work out of the box
- without any callbacks set. If callbacks are set, everything
- is back to what it was before, the fallback callbacks are
- null. If you to get the internal implementation modified,
- sub_font it.
-
-- New hb_font_funcs_set_nominal_glyphs_func() allows speeding
- up character to glyph mapping.
-
-New API:
-+HB_FEATURE_GLOBAL_START
-+HB_FEATURE_GLOBAL_END
-+hb_buffer_set_invisible_glyph()
-+hb_buffer_get_invisible_glyph()
-+hb_font_funcs_set_nominal_glyphs_func()
-+hb_ot_layout_table_select_script()
-+hb_ot_layout_script_select_language()
-+hb_ot_layout_feature_get_name_ids()
-+hb_ot_layout_feature_get_characters()
-+hb_name_id_t
-+HB_NAME_ID_INVALID
-+HB_OT_MAX_TAGS_PER_SCRIPT
-+hb_ot_tags_from_script_and_language()
-+hb_ot_tags_to_script_and_language()
-
-Deprecated API:
--hb_font_funcs_set_glyph_func()
--hb_unicode_eastasian_width_func_t
--hb_unicode_funcs_set_eastasian_width_func()
--hb_unicode_eastasian_width()
--hb_unicode_decompose_compatibility_func_t
--HB_UNICODE_MAX_DECOMPOSITION_LEN
--hb_unicode_funcs_set_decompose_compatibility_func()
--hb_unicode_decompose_compatibility()
--hb_font_funcs_set_glyph_h_kerning_func()
--hb_font_funcs_set_glyph_v_kerning_func()
--hb_font_get_glyph_h_kerning()
--hb_font_get_glyph_v_kerning()
--hb_font_get_glyph_kerning_for_direction()
--hb_ot_layout_table_choose_script()
--hb_ot_layout_script_find_language()
--hb_ot_tags_from_script()
--hb_ot_tag_from_language()
-
-
-Overview of changes leading to 1.9.0
-Monday, September 10, 2018
-====================================
-- Added 'cmap' API to hb_face_t.
-- Face-builder API.
-- hb-ot-font re-creation should be much leaner now, as the
- font tables it uses are cached on hb_face_t now.
-- Internal source header file name changes:
- hb-*-private.hh is renamed to hb-*.hh.
-
-New API:
-+HB_UNICODE_MAX
-+hb_face_collect_unicodes()
-+hb_face_collect_variation_selectors()
-+hb_face_collect_variation_unicodes()
-+hb_face_builder_create()
-+hb_face_builder_add_table()
-
-
-Overview of changes leading to 1.8.8
-Tuesday, August 14, 2018
-====================================
-- Fix hb-icu crash on architectures where compare_exchange_weak() can
- fail falsely. This bug was introduced in 1.8.4.
- https://bugs.chromium.org/p/chromium/issues/detail?id=873568
-- More internal refactoring of atomic operations and singletons.
-- API changes:
- The following functions do NOT reference their return value before
- returning:
- * hb_unicode_funcs_get_default()
- * hb_glib_get_unicode_funcs()
- * hb_icu_get_unicode_funcs()
- This is consistent with their naming ("get", instead of "reference")
- as well as how they are used in the wild (ie. no one calls destroy()
- on their return value.)
-
-
-Overview of changes leading to 1.8.7
-Wednesday, August 8, 2018
-====================================
-- Fix assertion failure with GDEF-blacklisted fonts.
-
-
-Overview of changes leading to 1.8.6
-Tuesday, August 7, 2018
-====================================
-- Internal code shuffling.
-- New API to speed up getting advance widths for implementations
- that have heavy overhead in get_h_advance callback:
-+hb_font_funcs_set_glyph_h_advances_func
-+hb_font_funcs_set_glyph_v_advances_func
-+hb_font_get_glyph_advances_for_direction
-+hb_font_get_glyph_h_advances
-+hb_font_get_glyph_h_advances_func_t
-+hb_font_get_glyph_v_advances
-+hb_font_get_glyph_v_advances_func_t
-
-
-Overview of changes leading to 1.8.5
-Wednesday, August 1, 2018
-====================================
-- Major Khmer shaper improvements to better match Microsoft.
-- Indic bug fixes.
-- Internal improvements to atomic operations.
-
-
-Overview of changes leading to 1.8.4
-Tuesday, July 17, 2018
-====================================
-- Fix build on non-C++11.
-- Use C++-style GCC atomics and C++11 atomics.
-
-
-Overview of changes leading to 1.8.3
-Wednesday, July 11, 2018
-====================================
-- A couple of Indic / USE bug fixes.
-- Disable vectorization, as it was causing unaligned access bus error on
- certain 32bit architectures.
-
-
-Overview of changes leading to 1.8.2
-Tuesday, July 3, 2018
-====================================
-- Fix infinite loop in Khmer shaper.
-- Improve hb_blob_create_from_file() for streams.
-
-
-Overview of changes leading to 1.8.1
-Tuesday, June 12, 2018
-====================================
-- Fix hb-version.h file generation; last two releases went out with wrong ones.
-- Add correctness bug in hb_set_t operations, introduced in 1.7.7.
-- Remove HB_SUBSET_BUILTIN build option. Not necessary.
-
-
-Overview of changes leading to 1.8.0
-Tuesday, June 5, 2018
-====================================
-- Update to Unicode 11.0.0.
-
-
-Overview of changes leading to 1.7.7
-Tuesday, June 5, 2018
-====================================
-- Lots of internal changes, but not yet exposed externally.
-- All HarfBuzz objects are significantly smaller in size now.
-- Sinhala: Position repha on top of post-consonant, not base.
- This better matches Windows 10 behavior, which was changed
- from previous Windows versions.
-- New build options:
- o New cpp macro HB_NO_ATEXIT
- o New cpp macro HB_SUBSET_BUILTIN
-- Significant libharfbuzz-subset changes. API subject to change.
-- New API in libharfbuzz:
-
-+hb_blob_create_from_file()
-+hb_face_count()
-
-A hashmap implementation:
-+hb-map.h
-+HB_MAP_VALUE_INVALID
-+hb_map_t
-+hb_map_create()
-+hb_map_get_empty()
-+hb_map_reference()
-+hb_map_destroy()
-+hb_map_set_user_data()
-+hb_map_get_user_data()
-+hb_map_allocation_successful()
-+hb_map_clear()
-+hb_map_is_empty()
-+hb_map_get_population()
-+hb_map_set()
-+hb_map_get()
-+hb_map_del()
-+hb_map_has()
-
-
-Overview of changes leading to 1.7.6
-Wednesday, March 7, 2018
-====================================
-
-- Fix to hb_set_t binary operations. Ouch.
-- New experimental harfbuzz-subset library. All of hb-subset.h
- is experimental right now and API WILL change.
-
-- New API:
-hb_blob_copy_writable_or_fail()
-HB_OT_TAG_BASE
-hb_set_previous()
-hb_set_previous_range()
-
-
-Overview of changes leading to 1.7.5
-Tuesday, January 30, 2018
-====================================
-
-- Separate Khmer shaper from Indic.
-- First stab at AAT morx. Not hooked up.
-- Misc bug fixes.
-
-
-Overview of changes leading to 1.7.4
-Wednesday, December 20, 2017
-====================================
-
-- Fix collect_glyphs() regression caused by hb_set_t changes.
-
-
-Overview of changes leading to 1.7.3
-Monday, December 18, 2017
-====================================
-
-- hb_set_t performance tuning and optimizations.
-- Speed up collect_glyphs() and reject garbage data.
-- In hb_coretext_font_create() set font point-size (ptem).
-- Misc fixes.
-
-
-Overview of changes leading to 1.7.2
-Monday, December 4, 2017
-====================================
-
-- Optimize hb_set_add_range().
-- Misc fixes.
-- New API:
-hb_coretext_font_create()
-
-
-Overview of changes leading to 1.7.1
-Tuesday, November 14, 2017
-====================================
-
-- Fix atexit object destruction regression.
-- Fix minor integer-overflow.
-
-
-Overview of changes leading to 1.7.0
-Monday, November 13, 2017
-====================================
-
-- Minor Indic fixes.
-- Implement kerning and glyph names in hb-ot-font.
-- Various DSO optimization re .data and .bss sizes.
-- Make C++11 optional; build fixes.
-- Mark all other backends "unsafe-to-break".
-- Graphite fix.
-
-
-Overview of changes leading to 1.6.3
-Thursday, October 26th, 2017
-====================================
-
-- Fix hb_set_t some more. Should be solid now.
-- Implement get_glyph_name() for hb-ot-font.
-- Misc fixes.
-
-
-Overview of changes leading to 1.6.2
-Monday, October 23nd, 2017
-====================================
-
-- Yesterday's release had a bad crasher; don't use it. That's what
- happens when one works on Sunday...
- https://github.com/harfbuzz/harfbuzz/issues/578
-- Build fixes for FreeBSD and Chrome Android.
-
-
-Overview of changes leading to 1.6.1
-Sunday, October 22nd, 2017
-====================================
-
-- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
- To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
-- Faster hb_set_t implementation.
-- Don't use deprecated ICU API.
-- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
-- Deprecated API:
- hb_set_invert()
-
-
-Overview of changes leading to 1.6.0
-Friday, October the 13th, 2017
-====================================
-
-- Update to Unicode 10.
-
-- Various Indic and Universal Shaping Engine fixes as a result of
- HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
- the Igalia offices in A Coruña, Spain. Thanks Igalia for having
- us!
-
-- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
-
-- Implement optical sizing / tracking in CoreText backend, using
- new API hb_font_set_ptem().
-
-- Allow notifying hb_font_t that underlying FT_Face changed sizing,
- using new API hb_ft_font_changed().
-
-- More Graphite backend RTL fixes.
-
-- Fix caching of variable font shaping plans.
-
-- hb-view / hb-shape now accept following new arguments:
-
- o --unicodes: takes a list of hex numbers that represent Unicode
- codepoints.
-
-New API:
-+hb_face_get_table_tags()
-+hb_font_set_ptem()
-+hb_font_get_ptem()
-+hb_ft_font_changed()
-
-
-Overview of changes leading to 1.5.1
-Tuesday, September 5, 2017
-====================================
-
-- Fix "unsafe-to-break" in fallback shaping and other corner cases.
- All our tests pass with --verify now, meaning unsafe-to-break API
- works as expected.
-- Add --unicodes to hb-view / hb-shape.
-- [indic] Treat Consonant_With_Stacker as consonant. This will need
- further tweaking.
-- hb_buffer_diff() tweaks.
-
-
-Overview of changes leading to 1.5.0
-Wednesday, August 23, 2017
-====================================
-
-- Misc new API, for appending a buffer to another, and for comparing
- contents of two buffers for types of differences.
-
-- New "unsafe-to-break" API. Can be used to speed up reshaping
- in line-breaking situations. Essentially, after shaping, it returns
- positions in the input string (some of the cluster boundaries) that
- are "safe to break" in that if the text is segmented at that position
- and two sides reshaped and concatenated, the shaping result is
- exactly the same as shaping the text in one piece.
-
- hb-view and hb-shape and hb-shape now take --verify, which verifies
- the above property.
-
- Some corner cases of the implementation are still not quite working.
- Those will be fixed in subsequent releases.
-
-- New API:
-
-hb_buffer_append()
-
-hb_glyph_flags_t
-HB_GLYPH_FLAG_UNSAFE_TO_BREAK
-HB_GLYPH_FLAG_DEFINED
-hb_glyph_info_get_glyph_flags()
-
-HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
-
-hb_buffer_diff_flags_t
-HB_BUFFER_DIFF_FLAG_EQUAL
-HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
-HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
-HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
-HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
-HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
-HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
-HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
-HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
-hb_buffer_diff
-
-
-Overview of changes leading to 1.4.8
-Tuesday, August 8, 2017
-====================================
-
-- Major fix to avar table handling.
-- Rename hb-shape --show-message to --trace.
-- Build fixes.
-
-
-Overview of changes leading to 1.4.7
-Tuesday, July 18, 2017
-====================================
-
-- Multiple Indic, Tibetan, and Cham fixes.
-- CoreText: Allow disabling kerning.
-- Adjust Arabic feature order again.
-- Misc build fixes.
-
-
-Overview of changes leading to 1.4.6
-Sunday, April 23, 2017
-====================================
-
-- Graphite2: Fix RTL positioning issue.
-- Backlist GDEF of more versions of Padauk and Tahoma.
-- New, experimental, cmake alternative build system.
-
-
-Overview of changes leading to 1.4.5
-Friday, March 10, 2017
-====================================
-
-- Revert "Fix Context lookup application when moving back after a glyph..."
- This introduced memory access problems. To be fixed properly soon.
-
-
-Overview of changes leading to 1.4.4
-Sunday, March 5, 2017
-====================================
-
-- Fix Context lookup application when moving back after a glyph deletion.
-- Fix buffer-overrun in Bengali.
-
-
-Overview of changes leading to 1.4.3
-Saturday, February 25, 2017
-====================================
-
-- Route Adlam script to Arabic shaper.
-- Misc fixes.
-- New API:
- hb_font_set_face()
-- Deprecate API:
- hb_graphite2_font_get_gr_font()
-
-
-Overview of changes leading to 1.4.2
-Monday, January 23, 2017
-====================================
-
-- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
-- hb-shape and hb-view now accept --variations.
-- New API:
-
-hb_variation_t
-hb_variation_from_string()
-hb_variation_to_string()
-
-hb_font_set_variations()
-hb_font_set_var_coords_design()
-hb_font_get_var_coords_normalized()
-
-hb-ot-var.h:
-hb_ot_var_axis_t
-hb_ot_var_has_data()
-hb_ot_var_get_axis_count()
-hb_ot_var_get_axes()
-hb_ot_var_find_axis()
-hb_ot_var_normalize_variations()
-hb_ot_var_normalize_coords()
-
-- MVAR to be implemented later. Access to named instances to be
- implemented later as well.
-
-- Misc fixes.
-
-
-Overview of changes leading to 1.4.1
-Thursday, January 5, 2017
-====================================
-
-- Always build and use UCDN for Unicode data by default.
- Reduces dependence on version of Unicode data in glib,
- specially in the Windows bundles we are shipping, which
- have very old glib.
-
-
-Overview of changes leading to 1.4.0
-Thursday, January 5, 2017
-====================================
-
-- Merged "OpenType GX" branch which adds core of support for
- OpenType 1.8 Font Variations. To that extent, the relevant
- new API is:
-
-New API:
-hb_font_set_var_coords_normalized()
-
- with supporting API:
-
-New API:
-HB_OT_LAYOUT_NO_VARIATIONS_INDEX
-hb_ot_layout_table_find_feature_variations()
-hb_ot_layout_feature_with_variations_get_lookups()
-hb_shape_plan_create2()
-hb_shape_plan_create_cached2()
-
- Currently variations in GSUB/GPOS/GDEF are fully supported,
- and no other tables are supported. In particular, fvar/avar
- are NOT supported, hence the hb_font_set_var_coords_normalized()
- taking normalized coordinates. API to take design coordinates
- will be added in the future.
-
- HVAR/VVAR/MVAR support will also be added to hb-ot-font in the
- future.
-
-- Fix regression in GDEF glyph class processing.
-- Add decompositions for Chakma, Limbu, and Balinese in USE shaper.
-- Misc fixes.
-
-
-Overview of changes leading to 1.3.4
-Monday, December 5, 2016
-====================================
-
-- Fix vertical glyph origin in hb-ot-font.
-- Implement CBDT/CBLC color font glyph extents in hb-ot-font.
-
-
-Overview of changes leading to 1.3.3
-Wednesday, September 28, 2016
-====================================
-
-- Implement parsing of OpenType MATH table.
-New API:
-HB_OT_TAG_MATH
-HB_OT_MATH_SCRIPT
-hb_ot_math_constant_t
-hb_ot_math_kern_t
-hb_ot_math_glyph_variant_t
-hb_ot_math_glyph_part_flags_t
-hb_ot_math_glyph_part_t
-hb_ot_math_has_data
-hb_ot_math_get_constant
-hb_ot_math_get_glyph_italics_correction
-hb_ot_math_get_glyph_top_accent_attachment
-hb_ot_math_get_glyph_kerning
-hb_ot_math_is_glyph_extended_shape
-hb_ot_math_get_glyph_variants
-hb_ot_math_get_min_connector_overlap
-hb_ot_math_get_glyph_assembly
-
-
-Overview of changes leading to 1.3.2
-Wednesday, September 27, 2016
-====================================
-
-- Fix build of hb-coretext on older OS X versions.
-
-
-Overview of changes leading to 1.3.1
-Wednesday, September 7, 2016
-====================================
-
-- Blacklist bad GDEF of more fonts (Padauk).
-- More CoreText backend crash fixes with OS X 10.9.5.
-- Misc fixes.
-
-
-Overview of changes leading to 1.3.0
-Thursday, July 21, 2016
-====================================
-
-- Update to Unicode 9.0.0
-- Move Javanese from Indic shaper to Universal Shaping Engine.
-- Allow MultipleSubst to delete a glyph (matching Windows engine).
-- Update Universal Shaping Engine to latest draft from Microsoft.
-- DirectWrite backend improvements. Note: this backend is for testing ONLY.
-- CoreText backend improvements with unreachable fonts.
-- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font.
-- Blacklist bad GDEF of more fonts (Tahoma & others).
-- Misc fixes.
-
-
-Overview of changes leading to 1.2.7
-Monday, May 2, 2016
-====================================
-
-- Blacklist another version of Times New Roman (Bold) Italic from Windows 7.
-- Fix Mongolian Free Variation Selectors shaping with certain fonts.
-- Fix Tibetan shorthand contractions shaping.
-- Improved list of language tag mappings.
-- Unbreak build on Windows CE.
-- Make 'glyf' table loading lazy in hb-ot-font.
-
-
-Overview of changes leading to 1.2.6
-Friday, April 8, 2016
-====================================
-
-- Blacklist GDEF table of another set of Times New Roman (Bold) Italic.
-- DirectWrite backend improvements. Note: DirectWrite backend is
- exclusively for our internal testing and should NOT be used in any
- production system whatsoever.
-
-
-Overview of changes leading to 1.2.5
-Monday, April 4, 2016
-====================================
-
-- Fix GDEF mark-filtering-set, which was broken in 1.2.3.
-
-
-Overview of changes leading to 1.2.4
-Thursday, March 17, 2016
-====================================
-
-- Synthesize GDEF glyph class for any glyph that does not have one in GDEF.
- I really hope we don't discover broken fonts that shape badly with this
- change.
-- Misc build and other minor fixes.
-- API changes:
- - Added HB_NDEBUG. It's fine for production systems to define this to
- disable high-overhead debugging checks. However, I also reduced the
- overhead of those checks, so it's a non-issue right now. You can
- forget it. Just not defining anything at all is fine.
-
-
-Overview of changes leading to 1.2.3
-Thursday, February 25, 2016
-====================================
-
-- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic,
- due to bug in glyph class of ASCII double-quote character. This should
- address "regression" introduced in 1.2.0 when we switched mark zeroing
- in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE.
- This fourth release in a week should finally stablize things...
-
-- hb-ot-font's get_glyph() implementation saw some optimizations. Though,
- might be really hard to measure in real-world situations.
-
-- Also, two rather small API changes:
-
-We now disable some time-consuming internal bookkeeping if built with NDEBUG
-defined. This is a first time that we use NDEBUG to disable debug code. If
-there exist production systems that do NOT want to enable NDEBUG, please let
-me know and I'll add HB_NDEBUG.
-
-Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph()
-
-New API:
-- hb_font_get_nominal_glyph_func_t
-- hb_font_get_variation_glyph_func_t
-- hb_font_funcs_set_nominal_glyph_func()
-- hb_font_funcs_set_variation_glyph_func()
-- hb_font_get_nominal_glyph()
-- hb_font_get_variation_glyph()
-
-Deprecated API:
-- hb_font_get_glyph_func_t
-- hb_font_funcs_set_glyph_func()
-
-Clients that implement their own font-funcs are encouraged to replace
-their get_glyph() implementation with a get_nominal_glyph() and
-get_variation_glyph() pair. The variation version can assume that
-variation_selector argument is not zero. Old (deprecated) functions
-will continue working indefinitely using internal gymnastics; it is
-just more efficient to use the new functions.
-
-
-Overview of changes leading to 1.2.2
-Wednesday, February 24, 2016
-====================================
-
-- Fix regression with mark positioning with fonts that have
- non-zero mark advances. This was introduced in 1.2.0 while
- trying to make mark and cursive attachments to work together.
- I have partially reverted that, so this version is much more
- like what we had before. All clients who updated to 1.2.0
- should update to this version.
-
-
-Overview of changes leading to 1.2.1
-Tuesday, February 23, 2016
-====================================
-
-- CoreText: Fix bug with wrong scale if font scale was changed later.
- https://github.com/libass/libass/issues/212
-- CoreText: Drastically speed up font initialization.
-- CoreText: Fix tiny leak.
-- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
- https://github.com/harfbuzz/harfbuzz/issues/217
-- Add test/shaping/README.md about how to add tests to the suite.
-
-
-Overview of changes leading to 1.2.0
-Friday, February 19, 2016
-====================================
-
-- Fix various issues (hangs mostly) in case of memory allocation failure.
-- Change mark zeroing types of most shapers from BY_UNICODE_LATE to
- BY_GDEF_LATE. This seems to be what Uniscribe does.
-- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY. That's
- what Windows does.
-- Allow GPOS cursive connection on marks, and fix the interaction with
- mark attachment. This work resulted in some changes to how mark
- attachments work. See:
- https://github.com/harfbuzz/harfbuzz/issues/211
- https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
-- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
-- Add nmake-based build system for Windows.
-- Minor speedup.
-- Misc. improvements.
-
-
-Overview of changes leading to 1.1.3
-Monday, January 11, 2016
-====================================
-
-- Ported Indic shaper to Unicode 8.0 data.
-- Universal Shaping Engine fixes.
-- Speed up CoreText shaper when font fallback happens in CoreText.
-- Documentation improvements, thanks to Khaled Hosny.
-- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi.
-- Misc bug fixes.
-- New API:
-
- * Font extents:
- hb_font_extents_t
- hb_font_get_font_extents_func_t
- hb_font_get_font_h_extents_func_t
- hb_font_get_font_v_extents_func_t
- hb_font_funcs_set_font_h_extents_func
- hb_font_funcs_set_font_v_extents_func
- hb_font_get_h_extents
- hb_font_get_v_extents
- hb_font_get_extents_for_direction
-
- * Buffer message (aka debug):
- hb_buffer_message_func_t
- hb_buffer_set_message_func()
- Actual message protocol to be fleshed out later.
-
-
-Overview of changes leading to 1.1.2
-Wednesday, November 26, 2015
-====================================
-
-- Fix badly-broken fallback shaper that affected terminology.
- https://github.com/harfbuzz/harfbuzz/issues/187
-- Fix y_scaling in Graphite shaper.
-- API changes:
- * An unset glyph_h_origin() function in font-funcs now (sensibly)
- implies horizontal origin at 0,0. Ie, the nil callback returns
- true instead of false. As such, implementations that have a
- glyph_h_origin() that simply returns true, can remove that function
- with HarfBuzz >= 1.1.2. This results in a tiny speedup.
-
-
-Overview of changes leading to 1.1.1
-Wednesday, November 24, 2015
-====================================
-
-- Build fixes, specially for hb-coretext.
-
-
-Overview of changes leading to 1.1.0
-Wednesday, November 18, 2015
-====================================
-
-- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
- https://github.com/harfbuzz/harfbuzz/issues/141
-- Disable use of decompose_compatibility() callback.
-- Implement "shaping" of various Unicode space characters, even
- if the font does not support them.
- https://github.com/harfbuzz/harfbuzz/issues/153
-- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
- U+2010 HYPHEN.
-- Changes resulting from libFuzzer continuous fuzzing:
- * Reject font tables that need more than 8 edits,
- * Bound buffer growth during shaping to 32x,
- * Fix assertions and other issues at OOM / buffer max-growth.
-- Misc fixes and optimizations.
-- API changes:
- * All fonts created with hb_font_create() now inherit from
- (ie. have parent) hb_font_get_empty().
-
-
-Overview of changes leading to 1.0.6
-Thursday, October 15, 2015
-====================================
-
-- Reduce max nesting level in OT lookups from 8 to 6.
- Should not affect any real font as far as I know.
-- Fix memory access issue in ot-font.
-- Revert default load-flags of fonts created using hb_ft_font_create()
- back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in
- last release (1.0.5), but caused major issues, so revert.
- https://github.com/harfbuzz/harfbuzz/issues/143
-
-
-Overview of changes leading to 1.0.5
-Tuesday, October 13, 2015
-====================================
-
-- Fix multiple memory access bugs discovered using libFuzzer.
- https://github.com/harfbuzz/harfbuzz/issues/139
- Everyone should upgrade to this version as soon as possible.
- We now have continuous fuzzing set up, to avoid issues like
- these creeping in again.
-- Misc fixes.
-
-- New API:
- * hb_font_set_parent().
- * hb_ft_font_[sg]et_load_flags()
- The default flags for fonts created using hb_ft_font_create()
- has changed to default to FT_LOAD_DEFAULT now. Previously it
- was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING.
-
-- API changes:
- * Fonts now default to units-per-EM as their scale, instead of 0.
- * hb_font_create_sub_font() does NOT make parent font immutable
- anymore. hb_font_make_immutable() does.
-
-
-Overview of changes leading to 1.0.4
-Wednesday, September 30, 2015
-====================================
-
-- Fix minor out-of-bounds read error.
-
-
-Overview of changes leading to 1.0.3
-Tuesday, September 1, 2015
-====================================
-
-- Start of user documentation, from Simon Cozens!
-- Implement glyph_extents() for TrueType fonts in hb-ot-font.
-- Improve GPOS cursive attachments with conflicting lookups.
-- More fixes for cluster-level = 1.
-- Uniscribe positioning fix.
-
-
-Overview of changes leading to 1.0.2
-Wednesday, August 19, 2015
-====================================
-
-- Fix shaping with cluster-level > 0.
-- Fix Uniscribe backend font-size scaling.
-- Declare dependencies in harfbuzz.pc.
- FreeType is not declared though, to avoid bugs in pkg-config
- 0.26 with recursive dependencies.
-- Slightly improved debug infrastructure. More to come later.
-- Misc build fixes.
-
-
-Overview of changes leading to 1.0.1
-Monday, July 27, 2015
-====================================
-
-- Fix out-of-bounds access in USE shaper.
-
-
-Overview of changes leading to 1.0.0
-Sunday, July 26, 2015
-====================================
-
-- Implement Universal Shaping Engine:
- https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm
- http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/
-- Bump version to 1.0.0. The soname was NOT bumped.
-
-
-Overview of changes leading to 0.9.42
-Thursday, July 26, 2015
-=====================================
-
-- New API to allow for retrieving finer-grained cluster
- mappings if the client desires to handle them. Default
- behavior is unchanged.
-- Fix cluster merging when removing default-ignorables.
-- Update to Unicode 8.0
-- hb-graphite2 fixes.
-- Misc fixes.
-- Removed HB_NO_MERGE_CLUSTERS hack.
-- New API:
- hb_buffer_cluster_level_t enum
- hb_buffer_get_cluster_level()
- hb_buffer_set_cluster_level()
- hb-shape / hb-view --cluster-level
-
-
-Overview of changes leading to 0.9.41
-Thursday, June 18, 2015
-=====================================
-
-- Fix hb-coretext with trailing whitespace in right-to-left.
-- New API: hb_buffer_reverse_range().
-- Allow implementing atomic ops in config.h.
-- Fix hb_language_t in language bindings.
-- Misc fixes.
-
-
-Overview of changes leading to 0.9.40
-Friday, March 20, 2015
-=====================================
-
-- Another hb-coretext crasher fix. Ouch!
-- Happy Norouz!
-
-
-Overview of changes leading to 0.9.39
-Wednesday, March 4, 2015
-=====================================
-
-- Critical hb-coretext fixes.
-- Optimizations and refactoring; no functional change
- expected.
-- Misc build fixes.
-
-
-Overview of changes leading to 0.9.38
-Friday, January 23, 2015
-=====================================
-
-- Fix minor out-of-bounds access in Indic shaper.
-- Change New Tai Lue shaping engine from South-East Asian to default,
- reflecting change in Unicode encoding model.
-- Add hb-shape --font-size. Can take up to two numbers for separate
- x / y size.
-- Fix CoreText and FreeType scale issues with negative scales.
-- Reject blobs larger than 2GB. This might break some icu-le-hb clients
- that need security fixes. See:
- http://www.icu-project.org/trac/ticket/11450
-- Avoid accessing font tables during face destruction, in casce rogue
- clients released face data already.
-- Fix up gobject-introspection a bit. Python bindings kinda working.
- See README.python.
-- Misc fixes.
-- API additions:
- hb_ft_face_create_referenced()
- hb_ft_font_create_referenced()
-
-
-Overview of changes leading to 0.9.37
-Wednesday, December 17, 2014
-=====================================
-
-- Fix out-of-bounds access in Context lookup format 3.
-- Indic: Allow ZWJ/ZWNJ before syllable modifiers.
-
-
-Overview of changes leading to 0.9.36
-Thursday, November 20, 2014
-=====================================
-
-- First time that three months went by without a release since
- 0.9.2 was released on August 10, 2012!
-- Fix performance bug in hb_ot_collect_glyphs():
- https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
-- Add basic vertical-text support to hb-ot-font.
-- Misc build fixes.
-
-
-Overview of changes leading to 0.9.35
-Saturday, August 13, 2014
-=====================================
-
-- Fix major shape-plan caching bug when more than one shaper were
- provided to hb_shape_full() (as exercised by XeTeX).
- http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html
-- Fix Arabic fallback shaping regression. This was broken in 0.9.32.
-- Major hb-coretext fixes. That backend is complete now, including
- respecing buffer direction and language, down to vertical writing.
-- Build fixes for Windows CE. Should build fine now.
-- Misc fixes:
- Use atexit() only if it's safe to call from shared library
- https://bugs.freedesktop.org/show_bug.cgi?id=82246
- Mandaic had errors in its Unicode Joining_Type
- https://bugs.freedesktop.org/show_bug.cgi?id=82306
-- API changes:
-
- * hb_buffer_clear_contents() does not reset buffer flags now.
-
- After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't
- need to set flags for different pieces of text. The flags now
- are something the client sets up once, depending on how it
- actually uses the buffer. As such, don't clear it in
- clear_contents().
-
- I don't expect any changes to be needed to any existing client.
-
-
-Overview of changes leading to 0.9.34
-Saturday, August 2, 2014
-=====================================
-
-- hb_feature_from_string() now accepts CSS font-feature-settings format.
-- As a result, hb-shape / hb-view --features also accept CSS-style strings.
- Eg, "'liga' off" is accepted now.
-- Add old-spec Myanmar shaper:
- https://bugs.freedesktop.org/show_bug.cgi?id=81775
-- Don't apply 'calt' in Hangul shaper.
-- Fix mark advance zeroing for Hebrew shaper:
- https://bugs.freedesktop.org/show_bug.cgi?id=76767
-- Implement Windows-1256 custom Arabic shaping. Only built on Windows,
- and requires help from get_glyph(). Used by Firefox.
- https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
-- Disable 'liga' in vertical text.
-- Build fixes.
-- API changes:
-
- * Make HB_BUFFER_FLAG_BOT/EOT easier to use.
-
- Previously, we expected users to provide BOT/EOT flags when the
- text *segment* was at paragraph boundaries. This meant that for
- clients that provide full paragraph to HarfBuzz (eg. Pango), they
- had code like this:
-
- hb_buffer_set_flags (hb_buffer,
- (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) |
- (item_offset + item_length == paragraph_length ?
- HB_BUFFER_FLAG_EOT : 0));
-
- hb_buffer_add_utf8 (hb_buffer,
- paragraph_text, paragraph_length,
- item_offset, item_length);
-
- After this change such clients can simply say:
-
- hb_buffer_set_flags (hb_buffer,
- HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT);
-
- hb_buffer_add_utf8 (hb_buffer,
- paragraph_text, paragraph_length,
- item_offset, item_length);
-
- Ie, HarfBuzz itself checks whether the segment is at the beginning/end
- of the paragraph. Clients that only pass item-at-a-time to HarfBuzz
- continue not setting any flags whatsoever.
-
- Another way to put it is: if there's pre-context text in the buffer,
- HarfBuzz ignores the BOT flag. If there's post-context, it ignores
- EOT flag.
-
-
-Overview of changes leading to 0.9.33
-Tuesday, July 22, 2014
-=====================================
-
-- Turn off ARabic 'cswh' feature that was accidentally turned on.
-- Add HB_TAG_MAX_SIGNED.
-- Make hb_face_make_immutable() really make face immutable!
-- Windows build fixes.
-
-
-Overview of changes leading to 0.9.32
-Thursday, July 17, 2014
-=====================================
-
-- Apply Arabic shaping features in spec order exactly.
-- Another fix for Mongolian free variation selectors.
-- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt'
- together.
-- Minor adjustment to U+FFFD logic.
-- Fix hb-coretext build.
-
-
-Overview of changes leading to 0.9.31
-Wednesday, July 16, 2014
-=====================================
-
-- Only accept valid UTF-8/16/32; we missed many cases before.
-- Better shaping of invalid UTF-8/16/32. Falls back to
- U+FFFD REPLACEMENT CHARACTER now.
-- With all changes in this release, the buffer will contain fully
- valid Unicode after hb_buffer_add_utf8/16/32 no matter how
- broken the input is. This can be overridden though. See below.
-- Fix Mongolian Variation Selectors for fonts without GDEF.
-- Fix minor invalid buffer access.
-- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language()
- now uses these instead of private tags.
-- Build fixes.
-- New API:
- * hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32()
- used to do, ie. no validity check on the input at all. add_utf32
- now replaces invalid Unicode codepoints with the replacement
- character (see below).
- * hb_buffer_set_replacement_codepoint()
- * hb_buffer_get_replacement_codepoint()
- Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when
- we detected broken input, we replaced that with (hb_codepoint_t)-1.
- This has changed to use U+FFFD now, but can be changed using these
- new API.
-
-
-Overview of changes leading to 0.9.30
-Wednesday, July 9, 2014
-=====================================
-
-- Update to Unicode 7.0.0:
- * New scripts Manichaean and Psalter Pahlavi are shaped using
- Arabic shaper.
- * All the other new scripts to through the generic shaper for
- now.
-- Minor Indic improvements.
-- Fix graphite2 backend cluster mapping [crasher!]
-- API changes:
- * New HB_SCRIPT_* values for Unicode 7.0 scripts.
- * New function hb_ot_layout_language_get_required_feature().
-- Build fixes.
-
-
-Overview of changes leading to 0.9.29
-Thursday, May 29, 2014
-=====================================
-
-- Implement cmap in hb-ot-font.h. No variation-selectors yet.
-- Myanmar: Allow MedialYa+Asat.
-- Various Indic fixes:
- * Support most characters in Extended Devanagary and Vedic
- Unicode blocks.
- * Allow digits and a some punctuation as consonant placeholders.
-- Build fixes.
-
-
-Overview of changes leading to 0.9.28
-Monday, April 28, 2014
-=====================================
-
-- Unbreak old-spec Indic shaping. (bug 76705)
-- Fix shaping of U+17DD and U+0FC6.
-- Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default
- for shipping libraries. It's an option for further experimentation
- right now. When we are sure how to do it properly, we will add
- public run-time API for the functionality.
-- Build fixes.
-
-
-Overview of changes leading to 0.9.27
-Tuesday, March 18, 2014
-=====================================
-
-- Don't use "register" storage class specifier
-- Wrap definition of free_langs() with HAVE_ATEXIT
-- Add coretext_aat shaper and hb_coretext_face_create() constructor
-- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks
-- Add Myanmar test case from OpenType Myanmar spec
-- Only do fallback Hebrew composition if no GPOS 'mark' available
-- Allow bootstrapping without gtk-doc
-- Use AM_MISSING_PROG for ragel and git
-- Typo in ucdn's Makefile.am
-- Improve MemoryBarrier() implementation
-
-
-Overview of changes leading to 0.9.26
-Thursday, January 30, 2014
-=====================================
-
-- Misc fixes.
-- Fix application of 'rtlm' feature.
-- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH.
-- New header: hb-ot-shape.h
-- Uniscribe: fix scratch-buffer accounting.
-- Reorder Tai Tham SAKOT to after tone-marks.
-- Add Hangul shaper.
-- New files:
- hb-ot-shape-complex-hangul.cc
- hb-ot-shape-complex-hebrew.cc
- hb-ot-shape-complex-tibetan.cc
-- Disable 'cswh' feature in Arabic shaper.
-- Coretext: better handle surrogate pairs.
-- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE.
-
-
-Overview of changes leading to 0.9.25
-Wednesday, December 4, 2013
-=====================================
-
-- Myanmar shaper improvements.
-- Avoid font fallback in CoreText backend.
-- Additional OpenType language tag mappiongs.
-- More aggressive shape-plan caching.
-- Build with / require automake 1.13.
-- Build with libtool 2.4.2.418 alpha to support ppc64le.
-
-
-Overview of changes leading to 0.9.24
-Tuesday, November 13, 2013
-=====================================
-
-- Misc compiler warning fixes with clang.
-- No functional changes.
-
-
-Overview of changes leading to 0.9.23
-Monday, October 28, 2013
-=====================================
-
-- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013.
-- Fix (Chain)Context recursion with non-monotone lookup positions.
-- Misc Indic bug fixes.
-- New Javanese / Buginese shaping, similar to Windows 8.1.
-
-
-Overview of changes leading to 0.9.22
-Thursday, October 3, 2013
-=====================================
-
-- Fix use-after-end-of-scope in hb_language_from_string().
-- Fix hiding of default_ignorables if font doesn't have space glyph.
-- Protect against out-of-range lookup indices.
-
-- API Changes:
-
- * Added hb_ot_layout_table_get_lookup_count()
-
-
-Overview of changes leading to 0.9.21
-Monday, September 16, 2013
-=====================================
-
-- Rename gobject-introspection library name from harfbuzz to HarfBuzz.
-- Remove (long disabled) hb-old and hb-icu-le test shapers.
-- Misc gtk-doc and gobject-introspection annotations.
-- Misc fixes.
-- API changes:
-
- * Add HB_SET_VALUE_INVALID
-
-Overview of changes leading to 0.9.20
-Thursday, August 29, 2013
-=====================================
-
-General:
-- Misc substitute_closure() fixes.
-- Build fixes.
-
-Documentation:
-- gtk-doc boilerplate integrated. Docs are built now, but
- contain no contents. By next release hopefully we have
- some content in. Enable using --enable-gtk-doc.
-
-GObject and Introspection:
-- Added harfbuzz-gobject library (hb-gobject.h) that has type
- bindings for all HarfBuzz objects and enums. Enable using
- --with-gobject.
-- Added gobject-introspection boilerplate. Nothing useful
- right now. Work in progress. Gets enabled automatically if
- --with-gobject is used. Override with --disable-introspection.
-
-OpenType shaper:
-- Apply 'mark' in Myanmar shaper.
-- Don't apply 'dlig' by default.
-
-Uniscribe shaper:
-- Support user features.
-- Fix loading of fonts that are also installed on the system.
-- Fix shaping of Arabic Presentation Forms.
-- Fix build with wide chars.
-
-CoreText shaper:
-- Support user features.
-
-Source changes:
-- hb_face_t code moved to hb-face.h / hb-face.cc.
-- Added hb-deprecated.h.
-
-API changes:
-- Added HB_DISABLE_DEPRECATED.
-- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by
- HB_SCRIPT_CANADIAN_SYLLABICS.
-- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by
- HB_BUFFER_FLAG_DEFAULT.
-- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by
- HB_BUFFER_SERIALIZE_FLAG_DEFAULT.
-
-
-Overview of changes leading to 0.9.19
-Tuesday, July 16, 2013
-=====================================
-
-- Build fixes.
-- Better handling of multiple variation selectors in a row.
-- Pass on variation selector to GSUB if not consumed by cmap.
-- Fix undefined memory access.
-- Add Javanese config to Indic shaper.
-- Misc bug fixes.
-
-Overview of changes leading to 0.9.18
-Tuesday, May 28, 2013
-=====================================
-
-New build system:
-
-- All unneeded code is all disabled by default,
-
-- Uniscribe and CoreText shapers can be enabled with their --with options,
-
-- icu_le and old shapers cannot be enabled for now,
-
-- glib, freetype, and cairo will be detected automatically.
- They can be force on/off'ed with their --with options,
-
-- icu and graphite2 are default off, can be enabled with their --with
- options,
-
-Moreover, ICU support is now build into a separate library:
-libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
-Distros can enable ICU now without every application on earth
-getting linked to via libharfbuzz.so.
-
-For distros I recommend that they make sure they are building --with-glib
---with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
-And package harfbuzz and harfbuzz-icu separately.
-
-
-Overview of changes leading to 0.9.17
-Monday, May 20, 2013
-=====================================
-
-- Build fixes.
-- Fix bug in hb_set_get_min().
-- Fix regression with Arabic mark positioning / width-zeroing.
-
-Overview of changes leading to 0.9.16
-Friday, April 19, 2013
-=====================================
-
-- Major speedup in OpenType lookup processing. With the Amiri
- Arabic font, this release is over 3x faster than previous
- release. All scripts / languages should see this speedup.
-
-- New --num-iterations option for hb-shape / hb-view; useful for
- profiling.
-
-Overview of changes leading to 0.9.15
-Friday, April 05, 2013
-=====================================
-
-- Build fixes.
-- Fix crasher in graphite2 shaper.
-- Fix Arabic mark width zeroing regression.
-- Don't compose Hangul jamo into Unicode syllables.
-
-
-Overview of changes leading to 0.9.14
-Thursday, March 21, 2013
-=====================================
-
-- Build fixes.
-- Fix time-consuming sanitize with malicious fonts.
-- Implement hb_buffer_deserialize_glyphs() for both json and text.
-- Do not ignore Hangul filler characters.
-- Indic fixes:
- * Fix Malayalam pre-base reordering interaction with post-forms.
- * Further adjust ZWJ handling. Should fix known regressions from
- 0.9.13.
-
-
-Overview of changes leading to 0.9.13
-Thursday, February 25, 2013
-=====================================
-
-- Build fixes.
-- Ngapi HarfBuzz Hackfest in London (February 2013):
- * Fixed all known Indic bugs,
- * New Win8-style Myanmar shaper,
- * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
- * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
- matching GSUB/GPOS lookups,
- * Fix 'Phags-Pa U+A872 shaping,
- * Fix partial disabling of default-on features,
- * Allow disabling of TrueType kerning.
-- Fix possible crasher with broken fonts with overlapping tables.
-- Removed generated files from git again. So, one needs ragel to
- bootstrap from the git tree.
-
-API changes:
-- hb_shape() and related APIs now abort if buffer direction is
- HB_DIRECTION_INVALID. Previously, hb_shape() was calling
- hb_buffer_guess_segment_properties() on the buffer before
- shaping. The heuristics in that function are fragile. If the
- user really wants the old behvaior, they can call that function
- right before calling hb_shape() to get the old behavior.
-- hb_blob_create_sub_blob() always creates sub-blob with
- HB_MEMORY_MODE_READONLY. See comments for the reason.
-
-
-Overview of changes leading to 0.9.12
-Thursday, January 18, 2013
-=====================================
-
-- Build fixes for Sun compiler.
-- Minor bug fix.
-
-Overview of changes leading to 0.9.11
-Thursday, January 10, 2013
-=====================================
-
-- Build fixes.
-- Fix GPOS mark attachment with null Anchor offsets.
-- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
-- Fix multi-threaded shaper data creation crash.
-- Add atomic ops for Solaris.
-
-API changes:
-- Rename hb_buffer_clear() to hb_buffer_clear_contents().
-
-
-Overview of changes leading to 0.9.10
-Thursday, January 3, 2013
-=====================================
-
-- [Indic] Fixed rendering of Malayalam dot-reph
-- Updated OT language tags.
-- Updated graphite2 backend.
-- Improved hb_ot_layout_get_size_params() logic.
-- Improve hb-shape/hb-view help output.
-- Fixed hb-set.h implementation to not crash.
-- Fixed various issues with hb_ot_layout_collect_lookups().
-- Various build fixes.
-
-New API:
-
-hb_graphite2_face_get_gr_face()
-hb_graphite2_font_get_gr_font()
-hb_coretext_face_get_cg_font()
-
-Modified API:
-
-hb_ot_layout_get_size_params()
-
-
-Overview of changes leading to 0.9.9
-Wednesday, December 5, 2012
-====================================
-
-- Fix build on Windows.
-- Minor improvements.
-
-
-Overview of changes leading to 0.9.8
-Tuesday, December 4, 2012
-====================================
-
-
-- Actually implement hb_shape_plan_get_shaper ().
-- Make UCDB data tables const.
-- Lots of internal refactoring in OTLayout tables.
-- Flesh out hb_ot_layout_lookup_collect_glyphs().
-
-New API:
-
-hb_ot_layout_collect_lookups()
-hb_ot_layout_get_size_params()
-
-
-Overview of changes leading to 0.9.7
-Sunday, November 21, 2012
-====================================
-
-
-HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
-
-- Fix Arabic contextual joining using pre-context text.
-- Fix Sinhala "split matra" mess.
-- Fix Khmer shaping with broken fonts.
-- Implement Thai "PUA" shaping for old fonts.
-- Do NOT route Kharoshthi script through the Indic shaper.
-- Disable fallback positioning for Indic and Thai shapers.
-- Misc fixes.
-
-
-hb-shape / hb-view changes:
-
-- Add --text-before and --text-after
-- Add --bot / --eot / --preserve-default-ignorables
-- hb-shape --output-format=json
-
-
-New API:
-
-hb_buffer_clear()
-
-hb_buffer_flags_t
-
-HB_BUFFER_FLAGS_DEFAULT
-HB_BUFFER_FLAG_BOT
-HB_BUFFER_FLAG_EOT
-HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
-
-hb_buffer_set_flags()
-hb_buffer_get_flags()
-
-HB_BUFFER_SERIALIZE_FLAGS
-hb_buffer_serialize_glyphs()
-hb_buffer_deserialize_glyphs()
-hb_buffer_serialize_list_formats()
-
-hb_set_add_range()
-hb_set_del_range()
-hb_set_get_population()
-hb_set_next_range()
-
-hb_face_[sg]et_glyph_count()
-
-hb_segment_properties_t
-HB_SEGMENT_PROPERTIES_DEFAULT
-hb_segment_properties_equal()
-hb_segment_properties_hash()
-
-hb_buffer_set_segment_properties()
-hb_buffer_get_segment_properties()
-
-hb_ot_layout_glyph_class_t
-hb_ot_layout_get_glyph_class()
-hb_ot_layout_get_glyphs_in_class()
-
-hb_shape_plan_t
-hb_shape_plan_create()
-hb_shape_plan_create_cached()
-hb_shape_plan_get_empty()
-hb_shape_plan_reference()
-hb_shape_plan_destroy()
-hb_shape_plan_set_user_data()
-hb_shape_plan_get_user_data()
-hb_shape_plan_execute()
-hb_shape_plan_get_shaper()
-
-hb_ot_shape_plan_collect_lookups()
-
-
-API changes:
-
-- Remove "mask" parameter from hb_buffer_add().
-- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
-- hb-set.h API const correction.
-- Renamed hb_set_min/max() to hb_set_get_min/max().
-- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
-- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
-
-
-
-Overview of changes leading to 0.9.6
-Sunday, November 13, 2012
-====================================
-
-- Don't clear pre-context text if no new context is provided.
-- Fix ReverseChainingSubstLookup, which was totally borked.
-- Adjust output format of hb-shape a bit.
-- Include config.h.in in-tree. Makes it easier for alternate build systems.
-- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
-- Use ICU LayoutEngine's C API instead of C++. Avoids much headache.
-- Drop glyphs for all of Unicode Default_Ignorable characters.
-- Misc build fixes.
-
-Arabic shaper:
-- Enable 'dlig' and 'mset' features in Arabic shaper.
-- Implement 'Phags-pa shaping, improve Mongolian.
-
-Indic shaper:
-- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
-- Initial support for Consonant Medials.
-- Start adding new-style Myanmar shaping.
-- Make reph and 'pref' logic introspect the font.
-- Route Meetei-Mayek through the Indic shaper.
-- Don't apply 'liga' in Indic shaper.
-- Improve Malayalam pre-base reordering Ra interaction with Chillus.
-
-
-
-Overview of changes leading to 0.9.5
-Sunday, October 14, 2012
-====================================
-
-- Synthetic-GSUB Arabic fallback shaping.
-
-- Misc Indic improvements.
-
-- Add build system support for pthread.
-
-- Imported UCDN for in-tree Unicode callbacks implementation.
-
-- Context-aware Arabic joining.
-
-- Misc other fixes.
-
-- New API:
-
- hb_feature_to/from-string()
- hb_buffer_[sg]et_content_type()
-
-
-
-Overview of changes leading to 0.9.4
-Tuesday, Sep 03, 2012
-====================================
-
-- Indic improvements with old-spec Malayalam.
-
-- Better fallback glyph positioning, specially with Thai / Lao marks.
-
-- Implement dotted-circle insertion.
-
-- Better Arabic fallback shaping / ligation.
-
-- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name.
-
-- Misc fixes.
-
-
-
-Overview of changes leading to 0.9.3
-Friday, Aug 18, 2012
-====================================
-
-- Fixed fallback mark positioning for left-to-right text.
-
-- Improve mark positioning for the remaining combining classes.
-
-- Unbreak Thai and fallback Arabic shaping.
-
-- Port Arabic shaper to shape-plan caching.
-
-- Use new ICU normalizer functions.
-
-
-
-Overview of changes leading to 0.9.2
-Friday, Aug 10, 2012
-====================================
-
-- Over a thousand commits! This is the first major release of HarfBuzz.
-
-- HarfBuzz is feature-complete now! It should be in par, or better, than
- both Pango's shapers and old HarfBuzz / Qt shapers.
-
-- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
-
-- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
- Sinhala, N'ko, Mongolian, and Mandaic.
-
-- New Thai / Lao shaper.
-
-- Tibetan / Hangul support in the generic shaper.
-
-- Synthetic GDEF support for fonts without a GDEF table.
-
-- Fallback mark positioning for fonts without a GPOS table.
-
-- Unicode normalization shaping heuristic during glyph mapping.
-
-- New experimental Graphite2 backend.
-
-- New Uniscribe backend (primarily for testing).
-
-- New CoreText backend (primarily for testing).
-
-- Major optimization and speedup.
-
-- Test suites and testing infrastructure (work in progress).
-
-- Greatly improved hb-view cmdline tool.
-
-- hb-shape cmdline tool.
-
-- Unicode 6.1 support.
-
-Summary of API changes:
-
-o Changed API:
-
- - Users are expected to only include main header files now (ie. hb.h,
- hb-glib.h, hb-ft.h, ...)
-
- - All struct tag names had their initial underscore removed.
- Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
-
- - All set_user_data() functions now take a "replace" boolean parameter.
-
- - hb_buffer_create() takes zero arguments now.
- Use hb_buffer_pre_allocate() to pre-allocate.
-
- - hb_buffer_add_utf*() now accept -1 for length parameteres,
- meaning "nul-terminated".
-
- - hb_direction_t enum values changed.
-
- - All *_from_string() APIs now take a length parameter to allow for
- non-nul-terminated strings. A -1 length means "nul-terminated".
-
- - Typedef for hb_language_t changed.
-
- - hb_get_table_func_t renamed to hb_reference_table_func_t.
-
- - hb_ot_layout_table_choose_script()
-
- - Various renames in hb-unicode.h.
-
-o New API:
-
- - hb_buffer_guess_properties()
- Automatically called by hb_shape().
-
- - hb_buffer_normalize_glyphs()
-
- - hb_tag_from_string()
-
- - hb-coretext.h
-
- - hb-uniscribe.h
-
- - hb_face_reference_blob()
- - hb_face_[sg]et_index()
- - hb_face_set_upem()
-
- - hb_font_get_glyph_name_func_t
- hb_font_get_glyph_from_name_func_t
- hb_font_funcs_set_glyph_name_func()
- hb_font_funcs_set_glyph_from_name_func()
- hb_font_get_glyph_name()
- hb_font_get_glyph_from_name()
- hb_font_glyph_to_string()
- hb_font_glyph_from_string()
-
- - hb_font_set_funcs_data()
-
- - hb_ft_font_set_funcs()
- - hb_ft_font_get_face()
-
- - hb-gobject.h (work in progress)
-
- - hb_ot_shape_glyphs_closure()
- hb_ot_layout_substitute_closure_lookup()
-
- - hb-set.h
-
- - hb_shape_full()
-
- - hb_unicode_combining_class_t
-
- - hb_unicode_compose_func_t
- hb_unicode_decompose_func_t
- hb_unicode_decompose_compatibility_func_t
- hb_unicode_funcs_set_compose_func()
- hb_unicode_funcs_set_decompose_func()
- hb_unicode_funcs_set_decompose_compatibility_func()
- hb_unicode_compose()
- hb_unicode_decompose()
- hb_unicode_decompose_compatibility()
-
-o Removed API:
-
- - hb_ft_get_font_funcs()
-
- - hb_ot_layout_substitute_start()
- hb_ot_layout_substitute_lookup()
- hb_ot_layout_substitute_finish()
- hb_ot_layout_position_start()
- hb_ot_layout_position_lookup()
- hb_ot_layout_position_finish()
-
-
-
-Overview of changes leading to 0.6.0
-Friday, May 27, 2011
-====================================
-
-- Vertical text support in GPOS
-- Almost all API entries have unit tests now, under test/
-- All thread-safety issues are fixed
-
-Summary of API changes follows.
-
-
-* Simple Types API:
-
- o New API:
- HB_LANGUAGE_INVALID
- hb_language_get_default()
- hb_direction_to_string()
- hb_direction_from_string()
- hb_script_get_horizontal_direction()
- HB_UNTAG()
-
- o Renamed API:
- hb_category_t renamed to hb_unicode_general_category_t
-
- o Changed API:
- hb_language_t is a typed pointers now
-
- o Removed API:
- HB_TAG_STR()
-
-
-* Use ISO 15924 tags for hb_script_t:
-
- o New API:
- hb_script_from_iso15924_tag()
- hb_script_to_iso15924_tag()
- hb_script_from_string()
-
- o Changed API:
- HB_SCRIPT_* enum members changed value.
-
-
-* Buffer API streamlined:
-
- o New API:
- hb_buffer_reset()
- hb_buffer_set_length()
- hb_buffer_allocation_successful()
-
- o Renamed API:
- hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
- hb_buffer_add_glyph() renamed to hb_buffer_add()
-
- o Removed API:
- hb_buffer_clear()
- hb_buffer_clear_positions()
-
- o Changed API:
- hb_buffer_get_glyph_infos() takes an out length parameter now
- hb_buffer_get_glyph_positions() takes an out length parameter now
-
-
-* Blob API streamlined:
-
- o New API:
- hb_blob_get_data()
- hb_blob_get_data_writable()
-
- o Renamed API:
- hb_blob_create_empty() renamed to hb_blob_get_empty()
-
- o Removed API:
- hb_blob_lock()
- hb_blob_unlock()
- hb_blob_is_writable()
- hb_blob_try_writable()
-
- o Changed API:
- hb_blob_create() takes user_data before destroy now
-
-
-* Unicode functions API:
-
- o Unicode function vectors can subclass other unicode function vectors now.
- Unimplemented callbacks in the subclass automatically chainup to the parent.
-
- o All hb_unicode_funcs_t callbacks take a user_data now. Their setters
- take a user_data and its respective destroy callback.
-
- o New API:
- hb_unicode_funcs_get_empty()
- hb_unicode_funcs_get_default()
- hb_unicode_funcs_get_parent()
-
- o Changed API:
- hb_unicode_funcs_create() now takes a parent_funcs.
-
- o Removed func getter functions:
- hb_unicode_funcs_get_mirroring_func()
- hb_unicode_funcs_get_general_category_func()
- hb_unicode_funcs_get_script_func()
- hb_unicode_funcs_get_combining_class_func()
- hb_unicode_funcs_get_eastasian_width_func()
-
-
-* Face API:
-
- o Renamed API:
- hb_face_get_table() renamed to hb_face_reference_table()
- hb_face_create_for_data() renamed to hb_face_create()
-
- o Changed API:
- hb_face_create_for_tables() takes user_data before destroy now
- hb_face_reference_table() returns empty blob instead of NULL
- hb_get_table_func_t accepts the face as first parameter now
-
-* Font API:
-
- o Fonts can subclass other fonts now. Unimplemented callbacks in the
- subclass automatically chainup to the parent. When chaining up,
- scale is adjusted if the parent font has a different scale.
-
- o All hb_font_funcs_t callbacks take a user_data now. Their setters
- take a user_data and its respective destroy callback.
-
- o New API:
- hb_font_get_parent()
- hb_font_funcs_get_empty()
- hb_font_create_sub_font()
-
- o Removed API:
- hb_font_funcs_copy()
- hb_font_unset_funcs()
-
- o Removed func getter functions:
- hb_font_funcs_get_glyph_func()
- hb_font_funcs_get_glyph_advance_func()
- hb_font_funcs_get_glyph_extents_func()
- hb_font_funcs_get_contour_point_func()
- hb_font_funcs_get_kerning_func()
-
- o Changed API:
- hb_font_create() takes a face and references it now
- hb_font_set_funcs() takes user_data before destroy now
- hb_font_set_scale() accepts signed integers now
- hb_font_get_contour_point_func_t now takes glyph first, then point_index
- hb_font_get_glyph_func_t returns a success boolean now
-
-
-* Changed object model:
-
- o All object types have a _get_empty() now:
- hb_blob_get_empty()
- hb_buffer_get_empty()
- hb_face_get_empty()
- hb_font_get_empty()
- hb_font_funcs_get_empty()
- hb_unicode_funcs_get_empty()
-
- o Added _set_user_data() and _get_user_data() for all object types:
- hb_blob_get_user_data()
- hb_blob_set_user_data()
- hb_buffer_get_user_data()
- hb_buffer_set_user_data()
- hb_face_get_user_data()
- hb_face_set_user_data()
- hb_font_funcs_get_user_data()
- hb_font_funcs_set_user_data()
- hb_font_get_user_data()
- hb_font_set_user_data()
- hb_unicode_funcs_get_user_data()
- hb_unicode_funcs_set_user_data()
-
- o Removed the _get_reference_count() from all object types:
- hb_blob_get_reference_count()
- hb_buffer_get_reference_count()
- hb_face_get_reference_count()
- hb_font_funcs_get_reference_count()
- hb_font_get_reference_count()
- hb_unicode_funcs_get_reference_count()
-
- o Added _make_immutable() and _is_immutable() for all object types except for buffer:
- hb_blob_make_immutable()
- hb_blob_is_immutable()
- hb_face_make_immutable()
- hb_face_is_immutable()
-
-
-* Changed API for vertical text support
-
- o The following callbacks where removed:
- hb_font_get_glyph_advance_func_t
- hb_font_get_kerning_func_t
-
- o The following new callbacks added instead:
- hb_font_get_glyph_h_advance_func_t
- hb_font_get_glyph_v_advance_func_t
- hb_font_get_glyph_h_origin_func_t
- hb_font_get_glyph_v_origin_func_t
- hb_font_get_glyph_h_kerning_func_t
- hb_font_get_glyph_v_kerning_func_t
-
- o The following API removed as such:
- hb_font_funcs_set_glyph_advance_func()
- hb_font_funcs_set_kerning_func()
- hb_font_get_glyph_advance()
- hb_font_get_kerning()
-
- o New API added instead:
- hb_font_funcs_set_glyph_h_advance_func()
- hb_font_funcs_set_glyph_v_advance_func()
- hb_font_funcs_set_glyph_h_origin_func()
- hb_font_funcs_set_glyph_v_origin_func()
- hb_font_funcs_set_glyph_h_kerning_func()
- hb_font_funcs_set_glyph_v_kerning_func()
- hb_font_get_glyph_h_advance()
- hb_font_get_glyph_v_advance()
- hb_font_get_glyph_h_origin()
- hb_font_get_glyph_v_origin()
- hb_font_get_glyph_h_kerning()
- hb_font_get_glyph_v_kerning()
-
- o The following higher-leve API added for convenience:
- hb_font_get_glyph_advance_for_direction()
- hb_font_get_glyph_origin_for_direction()
- hb_font_add_glyph_origin_for_direction()
- hb_font_subtract_glyph_origin_for_direction()
- hb_font_get_glyph_kerning_for_direction()
- hb_font_get_glyph_extents_for_origin()
- hb_font_get_glyph_contour_point_for_origin()
-
-
-* OpenType Layout API:
-
- o New API:
- hb_ot_layout_position_start()
- hb_ot_layout_substitute_start()
- hb_ot_layout_substitute_finish()
-
-
-* Glue code:
-
- o New API:
- hb_glib_script_to_script()
- hb_glib_script_from_script()
- hb_icu_script_to_script()
- hb_icu_script_from_script()
-
-
-* Version API added:
-
- o New API:
- HB_VERSION_MAJOR
- HB_VERSION_MINOR
- HB_VERSION_MICRO
- HB_VERSION_STRING
- HB_VERSION_CHECK()
- hb_version()
- hb_version_string()
- hb_version_check()
-
-
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh
index f2785a6f58..63fac84524 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh
@@ -54,7 +54,7 @@ struct Anchor
DEFINE_SIZE_STATIC (4);
};
-typedef LArrayOf<Anchor> GlyphAnchors;
+typedef Array32Of<Anchor> GlyphAnchors;
struct ankr
{
@@ -64,7 +64,7 @@ struct ankr
unsigned int i,
unsigned int num_glyphs) const
{
- const NNOffsetTo<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs);
+ const NNOffset16To<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs);
if (!offset)
return Null (Anchor);
const GlyphAnchors &anchors = &(this+anchorData) + *offset;
@@ -83,9 +83,9 @@ struct ankr
protected:
HBUINT16 version; /* Version number (set to zero) */
HBUINT16 flags; /* Flags (currently unused; set to zero) */
- LOffsetTo<Lookup<NNOffsetTo<GlyphAnchors>>>
+ Offset32To<Lookup<NNOffset16To<GlyphAnchors>>>
lookupTable; /* Offset to the table's lookup table */
- LNNOffsetTo<HBUINT8>
+ NNOffset32To<HBUINT8>
anchorData; /* Offset to the glyph data table */
public:
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
index 98ed20d8eb..e70ce97174 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
@@ -30,6 +30,9 @@
#include "hb-aat-layout.hh"
#include "hb-open-type.hh"
+namespace OT {
+struct GDEF;
+};
namespace AAT {
@@ -164,7 +167,7 @@ struct LookupSegmentArray
HBGlyphID last; /* Last GlyphID in this segment */
HBGlyphID first; /* First GlyphID in this segment */
- NNOffsetTo<UnsizedArrayOf<T>>
+ NNOffset16To<UnsizedArrayOf<T>>
valuesZ; /* A 16-bit offset from the start of
* the table to the data. */
public:
@@ -659,7 +662,7 @@ struct ClassTable
}
protected:
HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */
- ArrayOf<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus
+ Array16Of<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus
* firstGlyph). */
public:
DEFINE_SIZE_ARRAY (4, classArray);
@@ -678,7 +681,8 @@ struct ObsoleteTypes
const void *base,
const T *array)
{
- return (offset - ((const char *) array - (const char *) base)) / T::static_size;
+ /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
+ return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
}
template <typename T>
static unsigned int byteOffsetToIndex (unsigned int offset,
@@ -862,6 +866,7 @@ struct hb_aat_apply_context_t :
hb_buffer_t *buffer;
hb_sanitize_context_t sanitizer;
const ankr *ankr_table;
+ const OT::GDEF *gdef_table;
/* Unused. For debug tracing only. */
unsigned int lookup_index;
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh
index 359e859cfc..573f0cf9f6 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh
@@ -144,7 +144,7 @@ struct FeatureName
protected:
HBUINT16 feature; /* Feature type. */
HBUINT16 nSettings; /* The number of records in the setting name array. */
- LNNOffsetTo<UnsizedArrayOf<SettingName>>
+ NNOffset32To<UnsizedArrayOf<SettingName>>
settingTableZ; /* Offset in bytes from the beginning of this table to
* this feature's setting name array. The actual type of
* record this offset refers to will depend on the
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
index 49506e9f5a..556d4ad75b 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
@@ -79,7 +79,7 @@ struct DecompositionAction
* to decompose before more frequent ones. The ligatures
* on the line of text will decompose in increasing
* value of this field. */
- ArrayOf<HBUINT16>
+ Array16Of<HBUINT16>
decomposedglyphs;
/* Number of 16-bit glyph indexes that follow;
* the ligature will be decomposed into these glyphs.
@@ -310,7 +310,7 @@ struct WidthDeltaPair
DEFINE_SIZE_STATIC (24);
};
-typedef OT::LArrayOf<WidthDeltaPair> WidthDeltaCluster;
+typedef OT::Array32Of<WidthDeltaPair> WidthDeltaCluster;
struct JustificationCategory
{
@@ -358,20 +358,20 @@ struct JustificationHeader
}
protected:
- OffsetTo<JustificationCategory>
+ Offset16To<JustificationCategory>
justClassTable; /* Offset to the justification category state table. */
- OffsetTo<WidthDeltaCluster>
+ Offset16To<WidthDeltaCluster>
wdcTable; /* Offset from start of justification table to start
* of the subtable containing the width delta factors
* for the glyphs in your font.
*
* The width delta clusters table. */
- OffsetTo<PostcompensationActionChain>
+ Offset16To<PostcompensationActionChain>
pcTable; /* Offset from start of justification table to start
* of postcompensation subtable (set to zero if none).
*
* The postcompensation subtable, if present in the font. */
- Lookup<OffsetTo<WidthDeltaCluster>>
+ Lookup<Offset16To<WidthDeltaCluster>>
lookupTable; /* Lookup table associating glyphs with width delta
* clusters. See the description of Width Delta Clusters
* table for details on how to interpret the lookup values. */
@@ -398,13 +398,13 @@ struct just
FixedVersion<>version; /* Version of the justification table
* (0x00010000u for version 1.0). */
HBUINT16 format; /* Format of the justification table (set to 0). */
- OffsetTo<JustificationHeader>
+ Offset16To<JustificationHeader>
horizData; /* Byte offset from the start of the justification table
* to the header for tables that contain justification
* information for horizontal text.
* If you are not including this information,
* store 0. */
- OffsetTo<JustificationHeader>
+ Offset16To<JustificationHeader>
vertData; /* ditto, vertical */
public:
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
index 1cd412164e..d0eacf0e61 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh
@@ -710,18 +710,18 @@ struct KerxSubTableFormat6
{
struct Long
{
- LNNOffsetTo<Lookup<HBUINT32>> rowIndexTable;
- LNNOffsetTo<Lookup<HBUINT32>> columnIndexTable;
- LNNOffsetTo<UnsizedArrayOf<FWORD32>> array;
+ NNOffset32To<Lookup<HBUINT32>> rowIndexTable;
+ NNOffset32To<Lookup<HBUINT32>> columnIndexTable;
+ NNOffset32To<UnsizedArrayOf<FWORD32>> array;
} l;
struct Short
{
- LNNOffsetTo<Lookup<HBUINT16>> rowIndexTable;
- LNNOffsetTo<Lookup<HBUINT16>> columnIndexTable;
- LNNOffsetTo<UnsizedArrayOf<FWORD>> array;
+ NNOffset32To<Lookup<HBUINT16>> rowIndexTable;
+ NNOffset32To<Lookup<HBUINT16>> columnIndexTable;
+ NNOffset32To<UnsizedArrayOf<FWORD>> array;
} s;
} u;
- LNNOffsetTo<UnsizedArrayOf<FWORD>> vector;
+ NNOffset32To<UnsizedArrayOf<FWORD>> vector;
public:
DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + 24);
};
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
index e3bc268d26..a807bdcfc5 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh
@@ -30,6 +30,7 @@
#include "hb-open-type.hh"
#include "hb-aat-layout-common.hh"
#include "hb-ot-layout-common.hh"
+#include "hb-ot-layout-gdef-table.hh"
#include "hb-aat-map.hh"
/*
@@ -215,7 +216,9 @@ struct ContextualSubtable
hb_aat_apply_context_t *c_) :
ret (false),
c (c_),
+ gdef (*c->gdef_table),
mark_set (false),
+ has_glyph_classes (gdef.has_glyph_classes ()),
mark (0),
table (table_),
subs (table+table->substitutionTables) {}
@@ -263,6 +266,9 @@ struct ContextualSubtable
{
buffer->unsafe_to_break (mark, hb_min (buffer->idx + 1, buffer->len));
buffer->info[mark].codepoint = *replacement;
+ if (has_glyph_classes)
+ _hb_glyph_info_set_glyph_props (&buffer->info[mark],
+ gdef.get_glyph_props (*replacement));
ret = true;
}
@@ -287,6 +293,9 @@ struct ContextualSubtable
if (replacement)
{
buffer->info[idx].codepoint = *replacement;
+ if (has_glyph_classes)
+ _hb_glyph_info_set_glyph_props (&buffer->info[idx],
+ gdef.get_glyph_props (*replacement));
ret = true;
}
@@ -301,10 +310,12 @@ struct ContextualSubtable
bool ret;
private:
hb_aat_apply_context_t *c;
+ const OT::GDEF &gdef;
bool mark_set;
+ bool has_glyph_classes;
unsigned int mark;
const ContextualSubtable *table;
- const UnsizedOffsetListOf<Lookup<HBGlyphID>, HBUINT, false> &subs;
+ const UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false> &subs;
};
bool apply (hb_aat_apply_context_t *c) const
@@ -348,7 +359,7 @@ struct ContextualSubtable
protected:
StateTable<Types, EntryData>
machine;
- NNOffsetTo<UnsizedOffsetListOf<Lookup<HBGlyphID>, HBUINT, false>, HBUINT>
+ NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false>, HBUINT>
substitutionTables;
public:
DEFINE_SIZE_STATIC (20);
@@ -599,6 +610,9 @@ struct NoncontextualSubtable
{
TRACE_APPLY (this);
+ const OT::GDEF &gdef (*c->gdef_table);
+ bool has_glyph_classes = gdef.has_glyph_classes ();
+
bool ret = false;
unsigned int num_glyphs = c->face->get_num_glyphs ();
@@ -610,6 +624,9 @@ struct NoncontextualSubtable
if (replacement)
{
info[i].codepoint = *replacement;
+ if (has_glyph_classes)
+ _hb_glyph_info_set_glyph_props (&info[i],
+ gdef.get_glyph_props (*replacement));
ret = true;
}
}
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh
index 8c04a6482f..b1a1512821 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh
@@ -58,7 +58,7 @@ struct opbdFormat0
bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id,
hb_glyph_extents_t *extents, const void *base) const
{
- const OffsetTo<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ());
+ const Offset16To<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ());
if (!bounds_offset) return false;
const OpticalBounds &bounds = base+*bounds_offset;
@@ -79,7 +79,7 @@ struct opbdFormat0
}
protected:
- Lookup<OffsetTo<OpticalBounds>>
+ Lookup<Offset16To<OpticalBounds>>
lookupTable; /* Lookup table associating glyphs with the four
* int16 values for the left-side, top-side,
* right-side, and bottom-side optical bounds. */
@@ -92,7 +92,7 @@ struct opbdFormat1
bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id,
hb_glyph_extents_t *extents, const void *base) const
{
- const OffsetTo<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ());
+ const Offset16To<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ());
if (!bounds_offset) return false;
const OpticalBounds &bounds = base+*bounds_offset;
@@ -116,7 +116,7 @@ struct opbdFormat1
}
protected:
- Lookup<OffsetTo<OpticalBounds>>
+ Lookup<Offset16To<OpticalBounds>>
lookupTable; /* Lookup table associating glyphs with the four
* int16 values for the left-side, top-side,
* right-side, and bottom-side optical bounds. */
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh
index baa1c72020..68bcb2396f 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh
@@ -66,7 +66,7 @@ struct TrackTableEntry
NameID trackNameID; /* The 'name' table index for this track.
* (a short word or phrase like "loose"
* or "very tight") */
- NNOffsetTo<UnsizedArrayOf<FWORD>>
+ NNOffset16To<UnsizedArrayOf<FWORD>>
valuesZ; /* Offset from start of tracking table to
* per-size tracking values for this track. */
@@ -141,7 +141,7 @@ struct TrackData
protected:
HBUINT16 nTracks; /* Number of separate tracks included in this table. */
HBUINT16 nSizes; /* Number of point sizes included in this table. */
- LNNOffsetTo<UnsizedArrayOf<HBFixed>>
+ NNOffset32To<UnsizedArrayOf<HBFixed>>
sizeTable; /* Offset from start of the tracking table to
* Array[nSizes] of size values.. */
UnsizedArrayOf<TrackTableEntry>
@@ -212,10 +212,10 @@ struct trak
FixedVersion<>version; /* Version of the tracking table
* (0x00010000u for version 1.0). */
HBUINT16 format; /* Format of the tracking table (set to 0). */
- OffsetTo<TrackData>
+ Offset16To<TrackData>
horizData; /* Offset from start of tracking table to TrackData
* for horizontal text (or 0 if none). */
- OffsetTo<TrackData>
+ Offset16To<TrackData>
vertData; /* Offset from start of tracking table to TrackData
* for vertical text (or 0 if none). */
HBUINT16 reserved; /* Reserved. Set to 0. */
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout.cc b/thirdparty/harfbuzz/src/hb-aat-layout.cc
index 0e9f2b4954..e2d4de2ccd 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout.cc
+++ b/thirdparty/harfbuzz/src/hb-aat-layout.cc
@@ -55,6 +55,7 @@ AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (const hb_ot_shape_plan_t *p
buffer (buffer_),
sanitizer (),
ankr_table (&Null (AAT::ankr)),
+ gdef_table (face->table.GDEF->table),
lookup_index (0)
{
sanitizer.init (blob);
@@ -79,7 +80,7 @@ AAT::hb_aat_apply_context_t::set_ankr_table (const AAT::ankr *ankr_table_)
* @short_description: Apple Advanced Typography Layout
* @include: hb-aat.h
*
- * Functions for querying AAT Layout features in the font face.
+ * Functions for querying AAT Layout features in the font face.
*
* HarfBuzz supports all of the AAT tables used to implement shaping. Other
* AAT tables and their associated features are not supported.
@@ -172,13 +173,13 @@ static const hb_aat_feature_mapping_t feature_mappings[] =
{HB_TAG ('z','e','r','o'), HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF},
};
-/**
+/**
* hb_aat_layout_find_feature_mapping:
* @tag: The requested #hb_tag_t feature tag
*
* Fetches the AAT feature-and-selector combination that corresponds
* to a given OpenType feature tag.
- *
+ *
* Return value: the AAT features and selectors corresponding to the
* OpenType feature tag queried
*
@@ -248,7 +249,9 @@ hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
if (morx.has_data ())
{
AAT::hb_aat_apply_context_t c (plan, font, buffer, morx_blob);
+ if (!buffer->message (font, "start table morx")) return;
morx.apply (&c);
+ (void) buffer->message (font, "end table morx");
return;
}
@@ -257,7 +260,9 @@ hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
if (mort.has_data ())
{
AAT::hb_aat_apply_context_t c (plan, font, buffer, mort_blob);
+ if (!buffer->message (font, "start table mort")) return;
mort.apply (&c);
+ (void) buffer->message (font, "end table mort");
return;
}
}
@@ -313,8 +318,10 @@ hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
const AAT::kerx& kerx = *kerx_blob->as<AAT::kerx> ();
AAT::hb_aat_apply_context_t c (plan, font, buffer, kerx_blob);
+ if (!buffer->message (font, "start table kerx")) return;
c.set_ankr_table (font->face->table.ankr.get ());
kerx.apply (&c);
+ (void) buffer->message (font, "end table kerx");
}
diff --git a/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh b/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh
index 711f9aa6c1..6d771e1513 100644
--- a/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh
@@ -50,7 +50,7 @@ struct FTStringRange
}
protected:
- NNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset16To<UnsizedArrayOf<HBUINT8>>
tag; /* Offset from the start of the table to
* the beginning of the string */
HBUINT16 length; /* String length (in bytes) */
@@ -80,7 +80,7 @@ struct ltag
protected:
HBUINT32 version; /* Table version; currently 1 */
HBUINT32 flags; /* Table flags; currently none defined */
- LArrayOf<FTStringRange>
+ Array32Of<FTStringRange>
tagRanges; /* Range for each tag's string */
public:
DEFINE_SIZE_ARRAY (12, tagRanges);
diff --git a/thirdparty/harfbuzz/src/hb-algs.hh b/thirdparty/harfbuzz/src/hb-algs.hh
index bc170b0546..bbe097fe01 100644
--- a/thirdparty/harfbuzz/src/hb-algs.hh
+++ b/thirdparty/harfbuzz/src/hb-algs.hh
@@ -760,6 +760,14 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
+static inline void *
+hb_memcpy (void *__restrict dst, const void *__restrict src, size_t len)
+{
+ /* It's illegal to pass 0 as size to memcpy. */
+ if (unlikely (!len)) return dst;
+ return memcpy (dst, src, len);
+}
+
static inline int
hb_memcmp (const void *a, const void *b, unsigned int len)
{
@@ -1151,30 +1159,48 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
/* Operators. */
-struct hb_bitwise_and
+struct
{ HB_PARTIALIZE(2);
template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & b)
}
HB_FUNCOBJ (hb_bitwise_and);
-struct hb_bitwise_or
+struct
{ HB_PARTIALIZE(2);
template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | b)
}
HB_FUNCOBJ (hb_bitwise_or);
-struct hb_bitwise_xor
+struct
{ HB_PARTIALIZE(2);
template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a ^ b)
}
HB_FUNCOBJ (hb_bitwise_xor);
-struct hb_bitwise_sub
+struct
+{ HB_PARTIALIZE(2);
+ template <typename T> constexpr auto
+ operator () (const T &a, const T &b) const HB_AUTO_RETURN (~a & b)
+}
+HB_FUNCOBJ (hb_bitwise_lt);
+struct
{ HB_PARTIALIZE(2);
template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & ~b)
}
-HB_FUNCOBJ (hb_bitwise_sub);
+HB_FUNCOBJ (hb_bitwise_gt); // aka sub
+struct
+{ HB_PARTIALIZE(2);
+ template <typename T> constexpr auto
+ operator () (const T &a, const T &b) const HB_AUTO_RETURN (~a | b)
+}
+HB_FUNCOBJ (hb_bitwise_le);
+struct
+{ HB_PARTIALIZE(2);
+ template <typename T> constexpr auto
+ operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | ~b)
+}
+HB_FUNCOBJ (hb_bitwise_ge);
struct
{
template <typename T> constexpr auto
@@ -1197,6 +1223,12 @@ HB_FUNCOBJ (hb_sub);
struct
{ HB_PARTIALIZE(2);
template <typename T, typename T2> constexpr auto
+ operator () (const T &a, const T2 &b) const HB_AUTO_RETURN (b - a)
+}
+HB_FUNCOBJ (hb_rsub);
+struct
+{ HB_PARTIALIZE(2);
+ template <typename T, typename T2> constexpr auto
operator () (const T &a, const T2 &b) const HB_AUTO_RETURN (a * b)
}
HB_FUNCOBJ (hb_mul);
diff --git a/thirdparty/harfbuzz/src/hb-array.hh b/thirdparty/harfbuzz/src/hb-array.hh
index 02bd8d81c2..ab0dd6ebe3 100644
--- a/thirdparty/harfbuzz/src/hb-array.hh
+++ b/thirdparty/harfbuzz/src/hb-array.hh
@@ -36,6 +36,14 @@
template <typename Type>
struct hb_sorted_array_t;
+enum hb_not_found_t
+{
+ HB_NOT_FOUND_DONT_STORE,
+ HB_NOT_FOUND_STORE,
+ HB_NOT_FOUND_STORE_CLOSEST,
+};
+
+
template <typename Type>
struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
{
@@ -139,7 +147,9 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
return lfind (x, &i) ? &this->arrayZ[i] : not_found;
}
template <typename T>
- bool lfind (const T &x, unsigned *pos = nullptr) const
+ bool lfind (const T &x, unsigned *pos = nullptr,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
+ unsigned int to_store = (unsigned int) -1) const
{
for (unsigned i = 0; i < length; ++i)
if (hb_equal (x, this->arrayZ[i]))
@@ -149,6 +159,22 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
return true;
}
+ if (pos)
+ {
+ switch (not_found)
+ {
+ case HB_NOT_FOUND_DONT_STORE:
+ break;
+
+ case HB_NOT_FOUND_STORE:
+ *pos = to_store;
+ break;
+
+ case HB_NOT_FOUND_STORE_CLOSEST:
+ *pos = length;
+ break;
+ }
+ }
return false;
}
@@ -219,7 +245,7 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
unsigned P = sizeof (Type),
hb_enable_if (P == 1)>
const T *as () const
- { return length < hb_null_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
+ { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
template <typename T,
unsigned P = sizeof (Type),
@@ -231,9 +257,9 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
}
- /* Only call if you allocated the underlying array using malloc() or similar. */
- void free ()
- { ::free ((void *) arrayZ); arrayZ = nullptr; length = 0; }
+ /* Only call if you allocated the underlying array using hb_malloc() or similar. */
+ void fini ()
+ { hb_free ((void *) arrayZ); arrayZ = nullptr; length = 0; }
template <typename hb_serialize_context_t>
hb_array_t copy (hb_serialize_context_t *c) const
@@ -266,13 +292,6 @@ template <typename T, unsigned int length_> inline hb_array_t<T>
hb_array (T (&array_)[length_])
{ return hb_array_t<T> (array_); }
-enum hb_bfind_not_found_t
-{
- HB_BFIND_NOT_FOUND_DONT_STORE,
- HB_BFIND_NOT_FOUND_STORE,
- HB_BFIND_NOT_FOUND_STORE_CLOSEST,
-};
-
template <typename Type>
struct hb_sorted_array_t :
hb_iter_t<hb_sorted_array_t<Type>, Type&>,
@@ -323,7 +342,7 @@ struct hb_sorted_array_t :
}
template <typename T>
bool bfind (const T &x, unsigned int *i = nullptr,
- hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{
unsigned pos;
@@ -339,14 +358,14 @@ struct hb_sorted_array_t :
{
switch (not_found)
{
- case HB_BFIND_NOT_FOUND_DONT_STORE:
+ case HB_NOT_FOUND_DONT_STORE:
break;
- case HB_BFIND_NOT_FOUND_STORE:
+ case HB_NOT_FOUND_STORE:
*i = to_store;
break;
- case HB_BFIND_NOT_FOUND_STORE_CLOSEST:
+ case HB_NOT_FOUND_STORE_CLOSEST:
*i = pos;
break;
}
diff --git a/thirdparty/harfbuzz/src/hb-bimap.hh b/thirdparty/harfbuzz/src/hb-bimap.hh
index e9f3a6a52d..d409880751 100644
--- a/thirdparty/harfbuzz/src/hb-bimap.hh
+++ b/thirdparty/harfbuzz/src/hb-bimap.hh
@@ -58,10 +58,15 @@ struct hb_bimap_t
void set (hb_codepoint_t lhs, hb_codepoint_t rhs)
{
+ if (in_error ()) return;
if (unlikely (lhs == HB_MAP_VALUE_INVALID)) return;
if (unlikely (rhs == HB_MAP_VALUE_INVALID)) { del (lhs); return; }
+
forw_map.set (lhs, rhs);
+ if (in_error ()) return;
+
back_map.set (rhs, lhs);
+ if (in_error ()) forw_map.del (lhs);
}
hb_codepoint_t get (hb_codepoint_t lhs) const { return forw_map.get (lhs); }
diff --git a/thirdparty/harfbuzz/src/hb-bit-page.hh b/thirdparty/harfbuzz/src/hb-bit-page.hh
new file mode 100644
index 0000000000..263be3d044
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-bit-page.hh
@@ -0,0 +1,203 @@
+/*
+ * Copyright © 2012,2017 Google, Inc.
+ * Copyright © 2021 Behdad Esfahbod
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BIT_PAGE_HH
+#define HB_BIT_PAGE_HH
+
+#include "hb.hh"
+
+struct hb_bit_page_t
+{
+ void init0 () { v.clear (); }
+ void init1 () { v.clear (0xFF); }
+
+ constexpr unsigned len () const
+ { return ARRAY_LENGTH_CONST (v); }
+
+ bool is_empty () const
+ {
+ for (unsigned int i = 0; i < len (); i++)
+ if (v[i])
+ return false;
+ return true;
+ }
+
+ void add (hb_codepoint_t g) { elt (g) |= mask (g); }
+ void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
+ void set (hb_codepoint_t g, bool v) { if (v) add (g); else del (g); }
+ bool get (hb_codepoint_t g) const { return elt (g) & mask (g); }
+
+ void add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ elt_t *la = &elt (a);
+ elt_t *lb = &elt (b);
+ if (la == lb)
+ *la |= (mask (b) << 1) - mask(a);
+ else
+ {
+ *la |= ~(mask (a) - 1);
+ la++;
+
+ memset (la, 0xff, (char *) lb - (char *) la);
+
+ *lb |= ((mask (b) << 1) - 1);
+ }
+ }
+ void del_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ elt_t *la = &elt (a);
+ elt_t *lb = &elt (b);
+ if (la == lb)
+ *la &= ~((mask (b) << 1) - mask(a));
+ else
+ {
+ *la &= mask (a) - 1;
+ la++;
+
+ memset (la, 0, (char *) lb - (char *) la);
+
+ *lb &= ~((mask (b) << 1) - 1);
+ }
+ }
+ void set_range (hb_codepoint_t a, hb_codepoint_t b, bool v)
+ { if (v) add_range (a, b); else del_range (a, b); }
+
+ bool is_equal (const hb_bit_page_t &other) const
+ {
+ return 0 == hb_memcmp (&v, &other.v, sizeof (v));
+ }
+ bool is_subset (const hb_bit_page_t &larger_page) const
+ {
+ for (unsigned i = 0; i < len (); i++)
+ if (~larger_page.v[i] & v[i])
+ return false;
+ return true;
+ }
+
+ unsigned int get_population () const
+ {
+ unsigned int pop = 0;
+ for (unsigned int i = 0; i < len (); i++)
+ pop += hb_popcount (v[i]);
+ return pop;
+ }
+
+ bool next (hb_codepoint_t *codepoint) const
+ {
+ unsigned int m = (*codepoint + 1) & MASK;
+ if (!m)
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+ unsigned int i = m / ELT_BITS;
+ unsigned int j = m & ELT_MASK;
+
+ const elt_t vv = v[i] & ~((elt_t (1) << j) - 1);
+ for (const elt_t *p = &vv; i < len (); p = &v[++i])
+ if (*p)
+ {
+ *codepoint = i * ELT_BITS + elt_get_min (*p);
+ return true;
+ }
+
+ *codepoint = INVALID;
+ return false;
+ }
+ bool previous (hb_codepoint_t *codepoint) const
+ {
+ unsigned int m = (*codepoint - 1) & MASK;
+ if (m == MASK)
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+ unsigned int i = m / ELT_BITS;
+ unsigned int j = m & ELT_MASK;
+
+ /* Fancy mask to avoid shifting by elt_t bitsize, which is undefined. */
+ const elt_t mask = j < 8 * sizeof (elt_t) - 1 ?
+ ((elt_t (1) << (j + 1)) - 1) :
+ (elt_t) -1;
+ const elt_t vv = v[i] & mask;
+ const elt_t *p = &vv;
+ while (true)
+ {
+ if (*p)
+ {
+ *codepoint = i * ELT_BITS + elt_get_max (*p);
+ return true;
+ }
+ if ((int) i <= 0) break;
+ p = &v[--i];
+ }
+
+ *codepoint = INVALID;
+ return false;
+ }
+ hb_codepoint_t get_min () const
+ {
+ for (unsigned int i = 0; i < len (); i++)
+ if (v[i])
+ return i * ELT_BITS + elt_get_min (v[i]);
+ return INVALID;
+ }
+ hb_codepoint_t get_max () const
+ {
+ for (int i = len () - 1; i >= 0; i--)
+ if (v[i])
+ return i * ELT_BITS + elt_get_max (v[i]);
+ return 0;
+ }
+
+ static constexpr hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
+
+ typedef unsigned long long elt_t;
+ static constexpr unsigned PAGE_BITS = 512;
+ static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
+
+ static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); }
+ static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; }
+
+ typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t;
+
+ static constexpr unsigned ELT_BITS = sizeof (elt_t) * 8;
+ static constexpr unsigned ELT_MASK = ELT_BITS - 1;
+ static constexpr unsigned BITS = sizeof (vector_t) * 8;
+ static constexpr unsigned MASK = BITS - 1;
+ static_assert ((unsigned) PAGE_BITS == (unsigned) BITS, "");
+
+ elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; }
+ const elt_t& elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; }
+ static constexpr elt_t mask (hb_codepoint_t g) { return elt_t (1) << (g & ELT_MASK); }
+
+ vector_t v;
+};
+static_assert (hb_bit_page_t::PAGE_BITS == sizeof (hb_bit_page_t) * 8, "");
+
+
+#endif /* HB_BIT_PAGE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh
new file mode 100644
index 0000000000..f48b72fe63
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh
@@ -0,0 +1,354 @@
+/*
+ * Copyright © 2012,2017 Google, Inc.
+ * Copyright © 2021 Behdad Esfahbod
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BIT_SET_INVERTIBLE_HH
+#define HB_BIT_SET_INVERTIBLE_HH
+
+#include "hb.hh"
+#include "hb-bit-set.hh"
+
+
+struct hb_bit_set_invertible_t
+{
+ hb_bit_set_t s;
+ bool inverted;
+
+ hb_bit_set_invertible_t () { init (); }
+ ~hb_bit_set_invertible_t () { fini (); }
+
+ void init () { s.init (); inverted = false; }
+ void fini () { s.fini (); }
+ void err () { s.err (); }
+ bool in_error () const { return s.in_error (); }
+ explicit operator bool () const { return !is_empty (); }
+
+ void reset ()
+ {
+ s.reset ();
+ inverted = false;
+ }
+ void clear ()
+ {
+ s.clear ();
+ if (likely (s.successful))
+ inverted = false;
+ }
+ void invert ()
+ {
+ if (likely (s.successful))
+ inverted = !inverted;
+ }
+
+ bool is_empty () const
+ {
+ hb_codepoint_t v = INVALID;
+ next (&v);
+ return v == INVALID;
+ }
+ hb_codepoint_t get_min () const
+ {
+ hb_codepoint_t v = INVALID;
+ next (&v);
+ return v;
+ }
+ hb_codepoint_t get_max () const
+ {
+ hb_codepoint_t v = INVALID;
+ previous (&v);
+ return v;
+ }
+ unsigned int get_population () const
+ { return inverted ? INVALID - s.get_population () : s.get_population (); }
+
+
+ void add (hb_codepoint_t g) { unlikely (inverted) ? s.del (g) : s.add (g); }
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ { return unlikely (inverted) ? (s.del_range (a, b), true) : s.add_range (a, b); }
+
+ template <typename T>
+ void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); }
+ template <typename T>
+ void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
+
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
+ template <typename T>
+ bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); }
+ template <typename T>
+ bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
+
+ void del (hb_codepoint_t g) { unlikely (inverted) ? s.add (g) : s.del (g); }
+ void del_range (hb_codepoint_t a, hb_codepoint_t b)
+ { unlikely (inverted) ? (void) s.add_range (a, b) : s.del_range (a, b); }
+
+ bool get (hb_codepoint_t g) const { return s.get (g) ^ inverted; }
+
+ /* Has interface. */
+ static constexpr bool SENTINEL = false;
+ typedef bool value_t;
+ value_t operator [] (hb_codepoint_t k) const { return get (k); }
+ bool has (hb_codepoint_t k) const { return (*this)[k] != SENTINEL; }
+ /* Predicate. */
+ bool operator () (hb_codepoint_t k) const { return has (k); }
+
+ /* Sink interface. */
+ hb_bit_set_invertible_t& operator << (hb_codepoint_t v)
+ { add (v); return *this; }
+ hb_bit_set_invertible_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
+ { add_range (range.first, range.second); return *this; }
+
+ bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
+ {
+ hb_codepoint_t c = first - 1;
+ return next (&c) && c <= last;
+ }
+
+ void set (const hb_bit_set_invertible_t &other)
+ {
+ s.set (other.s);
+ if (likely (s.successful))
+ inverted = other.inverted;
+ }
+
+ bool is_equal (const hb_bit_set_invertible_t &other) const
+ {
+ if (likely (inverted == other.inverted))
+ return s.is_equal (other.s);
+ else
+ {
+ /* TODO Add iter_ranges() and use here. */
+ auto it1 = iter ();
+ auto it2 = other.iter ();
+ return hb_all (+ hb_zip (it1, it2)
+ | hb_map ([](hb_pair_t<hb_codepoint_t, hb_codepoint_t> _) { return _.first == _.second; }));
+ }
+ }
+
+ bool is_subset (const hb_bit_set_invertible_t &larger_set) const
+ {
+ if (unlikely (inverted != larger_set.inverted))
+ return hb_all (hb_iter (s) | hb_map (larger_set.s));
+ else
+ return unlikely (inverted) ? larger_set.s.is_subset (s) : s.is_subset (larger_set.s);
+ }
+
+ protected:
+ template <typename Op>
+ void process (const Op& op, const hb_bit_set_invertible_t &other)
+ { s.process (op, other.s); }
+ public:
+ void union_ (const hb_bit_set_invertible_t &other)
+ {
+ if (likely (inverted == other.inverted))
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_and, other);
+ else
+ process (hb_bitwise_or, other); /* Main branch. */
+ }
+ else
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_gt, other);
+ else
+ process (hb_bitwise_lt, other);
+ }
+ if (likely (s.successful))
+ inverted = inverted || other.inverted;
+ }
+ void intersect (const hb_bit_set_invertible_t &other)
+ {
+ if (likely (inverted == other.inverted))
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_or, other);
+ else
+ process (hb_bitwise_and, other); /* Main branch. */
+ }
+ else
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_lt, other);
+ else
+ process (hb_bitwise_gt, other);
+ }
+ if (likely (s.successful))
+ inverted = inverted && other.inverted;
+ }
+ void subtract (const hb_bit_set_invertible_t &other)
+ {
+ if (likely (inverted == other.inverted))
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_lt, other);
+ else
+ process (hb_bitwise_gt, other); /* Main branch. */
+ }
+ else
+ {
+ if (unlikely (inverted))
+ process (hb_bitwise_or, other);
+ else
+ process (hb_bitwise_and, other);
+ }
+ if (likely (s.successful))
+ inverted = inverted && !other.inverted;
+ }
+ void symmetric_difference (const hb_bit_set_invertible_t &other)
+ {
+ process (hb_bitwise_xor, other);
+ if (likely (s.successful))
+ inverted = inverted ^ other.inverted;
+ }
+
+ bool next (hb_codepoint_t *codepoint) const
+ {
+ if (likely (!inverted))
+ return s.next (codepoint);
+
+ auto old = *codepoint;
+ if (unlikely (old + 1 == INVALID))
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+
+ auto v = old;
+ s.next (&v);
+ if (old + 1 < v)
+ {
+ *codepoint = old + 1;
+ return true;
+ }
+
+ v = old;
+ s.next_range (&old, &v);
+
+ *codepoint = v + 1;
+ return *codepoint != INVALID;
+ }
+ bool previous (hb_codepoint_t *codepoint) const
+ {
+ if (likely (!inverted))
+ return s.previous (codepoint);
+
+ auto old = *codepoint;
+ if (unlikely (old - 1 == INVALID))
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+
+ auto v = old;
+ s.previous (&v);
+
+ if (old - 1 > v || v == INVALID)
+ {
+ *codepoint = old - 1;
+ return true;
+ }
+
+ v = old;
+ s.previous_range (&v, &old);
+
+ *codepoint = v - 1;
+ return *codepoint != INVALID;
+ }
+ bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ {
+ if (likely (!inverted))
+ return s.next_range (first, last);
+
+ if (!next (last))
+ {
+ *last = *first = INVALID;
+ return false;
+ }
+
+ *first = *last;
+ s.next (last);
+ --*last;
+ return true;
+ }
+ bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ {
+ if (likely (!inverted))
+ return s.previous_range (first, last);
+
+ if (!previous (first))
+ {
+ *last = *first = INVALID;
+ return false;
+ }
+
+ *last = *first;
+ s.previous (first);
+ ++*first;
+ return true;
+ }
+
+ static constexpr hb_codepoint_t INVALID = hb_bit_set_t::INVALID;
+
+ /*
+ * Iterator implementation.
+ */
+ struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
+ {
+ static constexpr bool is_sorted_iterator = true;
+ iter_t (const hb_bit_set_invertible_t &s_ = Null (hb_bit_set_invertible_t),
+ bool init = true) : s (&s_), v (INVALID), l(0)
+ {
+ if (init)
+ {
+ l = s->get_population () + 1;
+ __next__ ();
+ }
+ }
+
+ typedef hb_codepoint_t __item_t__;
+ hb_codepoint_t __item__ () const { return v; }
+ bool __more__ () const { return v != INVALID; }
+ void __next__ () { s->next (&v); if (l) l--; }
+ void __prev__ () { s->previous (&v); }
+ unsigned __len__ () const { return l; }
+ iter_t end () const { return iter_t (*s, false); }
+ bool operator != (const iter_t& o) const
+ { return s != o.s || v != o.v; }
+
+ protected:
+ const hb_bit_set_invertible_t *s;
+ hb_codepoint_t v;
+ unsigned l;
+ };
+ iter_t iter () const { return iter_t (*this); }
+ operator iter_t () const { return iter (); }
+};
+
+
+#endif /* HB_BIT_SET_INVERTIBLE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-bit-set.hh b/thirdparty/harfbuzz/src/hb-bit-set.hh
new file mode 100644
index 0000000000..c21778d88e
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-bit-set.hh
@@ -0,0 +1,808 @@
+/*
+ * Copyright © 2012,2017 Google, Inc.
+ * Copyright © 2021 Behdad Esfahbod
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BIT_SET_HH
+#define HB_BIT_SET_HH
+
+#include "hb.hh"
+#include "hb-bit-page.hh"
+#include "hb-machinery.hh"
+
+
+struct hb_bit_set_t
+{
+ hb_bit_set_t () { init (); }
+ ~hb_bit_set_t () { fini (); }
+
+ hb_bit_set_t (const hb_bit_set_t& other) : hb_bit_set_t () { set (other); }
+ void operator= (const hb_bit_set_t& other) { set (other); }
+ // TODO Add move construtor/assign
+ // TODO Add constructor for Iterator; with specialization for (sorted) vector / array?
+
+ void init ()
+ {
+ successful = true;
+ population = 0;
+ last_page_lookup = 0;
+ page_map.init ();
+ pages.init ();
+ }
+ void fini ()
+ {
+ page_map.fini ();
+ pages.fini ();
+ }
+
+ using page_t = hb_bit_page_t;
+ struct page_map_t
+ {
+ int cmp (const page_map_t &o) const { return cmp (o.major); }
+ int cmp (uint32_t o_major) const { return (int) o_major - (int) major; }
+
+ uint32_t major;
+ uint32_t index;
+ };
+
+ bool successful; /* Allocations successful */
+ mutable unsigned int population;
+ mutable unsigned int last_page_lookup;
+ hb_sorted_vector_t<page_map_t> page_map;
+ hb_vector_t<page_t> pages;
+
+ void err () { if (successful) successful = false; } /* TODO Remove */
+ bool in_error () const { return !successful; }
+
+ bool resize (unsigned int count)
+ {
+ if (unlikely (!successful)) return false;
+ if (unlikely (!pages.resize (count) || !page_map.resize (count)))
+ {
+ pages.resize (page_map.length);
+ successful = false;
+ return false;
+ }
+ return true;
+ }
+
+ void reset ()
+ {
+ successful = true;
+ clear ();
+ }
+
+ void clear ()
+ {
+ resize (0);
+ if (likely (successful))
+ population = 0;
+ }
+ bool is_empty () const
+ {
+ unsigned int count = pages.length;
+ for (unsigned int i = 0; i < count; i++)
+ if (!pages[i].is_empty ())
+ return false;
+ return true;
+ }
+ explicit operator bool () const { return !is_empty (); }
+
+ private:
+ void dirty () { population = UINT_MAX; }
+ public:
+
+ void add (hb_codepoint_t g)
+ {
+ if (unlikely (!successful)) return;
+ if (unlikely (g == INVALID)) return;
+ dirty ();
+ page_t *page = page_for (g, true); if (unlikely (!page)) return;
+ page->add (g);
+ }
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
+ if (unlikely (a > b || a == INVALID || b == INVALID)) return false;
+ dirty ();
+ unsigned int ma = get_major (a);
+ unsigned int mb = get_major (b);
+ if (ma == mb)
+ {
+ page_t *page = page_for (a, true); if (unlikely (!page)) return false;
+ page->add_range (a, b);
+ }
+ else
+ {
+ page_t *page = page_for (a, true); if (unlikely (!page)) return false;
+ page->add_range (a, major_start (ma + 1) - 1);
+
+ for (unsigned int m = ma + 1; m < mb; m++)
+ {
+ page = page_for (major_start (m), true); if (unlikely (!page)) return false;
+ page->init1 ();
+ }
+
+ page = page_for (b, true); if (unlikely (!page)) return false;
+ page->add_range (major_start (mb), b);
+ }
+ return true;
+ }
+
+ template <typename T>
+ void set_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ if (unlikely (!successful)) return;
+ if (!count) return;
+ dirty ();
+ hb_codepoint_t g = *array;
+ while (count)
+ {
+ unsigned int m = get_major (g);
+ page_t *page = page_for (g, v); if (unlikely (v && !page)) return;
+ unsigned int start = major_start (m);
+ unsigned int end = major_start (m + 1);
+ do
+ {
+ if (v || page) /* The v check is to optimize out the page check if v is true. */
+ page->set (g, v);
+
+ array = &StructAtOffsetUnaligned<T> (array, stride);
+ count--;
+ }
+ while (count && (g = *array, start <= g && g < end));
+ }
+ }
+
+ template <typename T>
+ void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { set_array (true, array, count, stride); }
+ template <typename T>
+ void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
+
+ template <typename T>
+ void del_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { set_array (false, array, count, stride); }
+ template <typename T>
+ void del_array (const hb_array_t<const T>& arr) { del_array (&arr, arr.len ()); }
+
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
+ template <typename T>
+ bool set_sorted_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
+ if (!count) return true;
+ dirty ();
+ hb_codepoint_t g = *array;
+ hb_codepoint_t last_g = g;
+ while (count)
+ {
+ unsigned int m = get_major (g);
+ page_t *page = page_for (g, v); if (unlikely (v && !page)) return false;
+ unsigned int end = major_start (m + 1);
+ do
+ {
+ /* If we try harder we can change the following comparison to <=;
+ * Not sure if it's worth it. */
+ if (g < last_g) return false;
+ last_g = g;
+
+ if (v || page) /* The v check is to optimize out the page check if v is true. */
+ page->add (g);
+
+ array = (const T *) ((const char *) array + stride);
+ count--;
+ }
+ while (count && (g = *array, g < end));
+ }
+ return true;
+ }
+
+ template <typename T>
+ bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { return set_sorted_array (true, array, count, stride); }
+ template <typename T>
+ bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
+
+ template <typename T>
+ bool del_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ { return set_sorted_array (false, array, count, stride); }
+ template <typename T>
+ bool del_sorted_array (const hb_sorted_array_t<const T>& arr) { return del_sorted_array (&arr, arr.len ()); }
+
+ void del (hb_codepoint_t g)
+ {
+ if (unlikely (!successful)) return;
+ page_t *page = page_for (g);
+ if (!page)
+ return;
+ dirty ();
+ page->del (g);
+ }
+
+ private:
+ void del_pages (int ds, int de)
+ {
+ if (ds <= de)
+ {
+ // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
+ // before attempting to rewrite the page map.
+ hb_vector_t<unsigned> compact_workspace;
+ if (unlikely (!allocate_compact_workspace (compact_workspace))) return;
+
+ unsigned int write_index = 0;
+ for (unsigned int i = 0; i < page_map.length; i++)
+ {
+ int m = (int) page_map[i].major;
+ if (m < ds || de < m)
+ page_map[write_index++] = page_map[i];
+ }
+ compact (compact_workspace, write_index);
+ resize (write_index);
+ }
+ }
+
+
+ public:
+ void del_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ if (unlikely (!successful)) return;
+ if (unlikely (a > b || a == INVALID)) return;
+ dirty ();
+ unsigned int ma = get_major (a);
+ unsigned int mb = get_major (b);
+ /* Delete pages from ds through de if ds <= de. */
+ int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1);
+ int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1);
+ if (ds > de || (int) ma < ds)
+ {
+ page_t *page = page_for (a);
+ if (page)
+ {
+ if (ma == mb)
+ page->del_range (a, b);
+ else
+ page->del_range (a, major_start (ma + 1) - 1);
+ }
+ }
+ if (de < (int) mb && ma != mb)
+ {
+ page_t *page = page_for (b);
+ if (page)
+ page->del_range (major_start (mb), b);
+ }
+ del_pages (ds, de);
+ }
+
+ bool get (hb_codepoint_t g) const
+ {
+ const page_t *page = page_for (g);
+ if (!page)
+ return false;
+ return page->get (g);
+ }
+
+ /* Has interface. */
+ static constexpr bool SENTINEL = false;
+ typedef bool value_t;
+ value_t operator [] (hb_codepoint_t k) const { return get (k); }
+ bool has (hb_codepoint_t k) const { return (*this)[k] != SENTINEL; }
+ /* Predicate. */
+ bool operator () (hb_codepoint_t k) const { return has (k); }
+
+ /* Sink interface. */
+ hb_bit_set_t& operator << (hb_codepoint_t v)
+ { add (v); return *this; }
+ hb_bit_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
+ { add_range (range.first, range.second); return *this; }
+
+ bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
+ {
+ hb_codepoint_t c = first - 1;
+ return next (&c) && c <= last;
+ }
+ void set (const hb_bit_set_t &other)
+ {
+ if (unlikely (!successful)) return;
+ unsigned int count = other.pages.length;
+ if (unlikely (!resize (count)))
+ return;
+ population = other.population;
+
+ /* TODO switch to vector operator =. */
+ hb_memcpy ((void *) pages, (const void *) other.pages, count * pages.item_size);
+ hb_memcpy ((void *) page_map, (const void *) other.page_map, count * page_map.item_size);
+ }
+
+ bool is_equal (const hb_bit_set_t &other) const
+ {
+ if (has_population () && other.has_population () &&
+ get_population () != other.get_population ())
+ return false;
+
+ unsigned int na = pages.length;
+ unsigned int nb = other.pages.length;
+
+ unsigned int a = 0, b = 0;
+ for (; a < na && b < nb; )
+ {
+ if (page_at (a).is_empty ()) { a++; continue; }
+ if (other.page_at (b).is_empty ()) { b++; continue; }
+ if (page_map[a].major != other.page_map[b].major ||
+ !page_at (a).is_equal (other.page_at (b)))
+ return false;
+ a++;
+ b++;
+ }
+ for (; a < na; a++)
+ if (!page_at (a).is_empty ()) { return false; }
+ for (; b < nb; b++)
+ if (!other.page_at (b).is_empty ()) { return false; }
+
+ return true;
+ }
+
+ bool is_subset (const hb_bit_set_t &larger_set) const
+ {
+ if (has_population () && larger_set.has_population () &&
+ get_population () != larger_set.get_population ())
+ return false;
+
+ uint32_t spi = 0;
+ for (uint32_t lpi = 0; spi < page_map.length && lpi < larger_set.page_map.length; lpi++)
+ {
+ uint32_t spm = page_map[spi].major;
+ uint32_t lpm = larger_set.page_map[lpi].major;
+ auto sp = page_at (spi);
+ auto lp = larger_set.page_at (lpi);
+
+ if (spm < lpm && !sp.is_empty ())
+ return false;
+
+ if (lpm < spm)
+ continue;
+
+ if (!sp.is_subset (lp))
+ return false;
+
+ spi++;
+ }
+
+ while (spi < page_map.length)
+ if (!page_at (spi++).is_empty ())
+ return false;
+
+ return true;
+ }
+
+ private:
+ bool allocate_compact_workspace (hb_vector_t<unsigned>& workspace)
+ {
+ if (unlikely (!workspace.resize (pages.length)))
+ {
+ successful = false;
+ return false;
+ }
+
+ return true;
+ }
+
+ /*
+ * workspace should be a pre-sized vector allocated to hold at exactly pages.length
+ * elements.
+ */
+ void compact (hb_vector_t<unsigned>& workspace,
+ unsigned int length)
+ {
+ assert(workspace.length == pages.length);
+ hb_vector_t<unsigned>& old_index_to_page_map_index = workspace;
+
+ hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF);
+ for (unsigned i = 0; i < length; i++)
+ old_index_to_page_map_index[page_map[i].index] = i;
+
+ compact_pages (old_index_to_page_map_index);
+ }
+ void compact_pages (const hb_vector_t<unsigned>& old_index_to_page_map_index)
+ {
+ unsigned int write_index = 0;
+ for (unsigned int i = 0; i < pages.length; i++)
+ {
+ if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue;
+
+ if (write_index < i)
+ pages[write_index] = pages[i];
+
+ page_map[old_index_to_page_map_index[i]].index = write_index;
+ write_index++;
+ }
+ }
+ public:
+
+ template <typename Op>
+ void process (const Op& op, const hb_bit_set_t &other)
+ {
+ const bool passthru_left = op (1, 0);
+ const bool passthru_right = op (0, 1);
+
+ if (unlikely (!successful)) return;
+
+ dirty ();
+
+ unsigned int na = pages.length;
+ unsigned int nb = other.pages.length;
+ unsigned int next_page = na;
+
+ unsigned int count = 0, newCount = 0;
+ unsigned int a = 0, b = 0;
+ unsigned int write_index = 0;
+
+ // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
+ // before attempting to rewrite the page map.
+ hb_vector_t<unsigned> compact_workspace;
+ if (!passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return;
+
+ for (; a < na && b < nb; )
+ {
+ if (page_map[a].major == other.page_map[b].major)
+ {
+ if (!passthru_left)
+ {
+ // Move page_map entries that we're keeping from the left side set
+ // to the front of the page_map vector. This isn't necessary if
+ // passthru_left is set since no left side pages will be removed
+ // in that case.
+ if (write_index < a)
+ page_map[write_index] = page_map[a];
+ write_index++;
+ }
+
+ count++;
+ a++;
+ b++;
+ }
+ else if (page_map[a].major < other.page_map[b].major)
+ {
+ if (passthru_left)
+ count++;
+ a++;
+ }
+ else
+ {
+ if (passthru_right)
+ count++;
+ b++;
+ }
+ }
+ if (passthru_left)
+ count += na - a;
+ if (passthru_right)
+ count += nb - b;
+
+ if (!passthru_left)
+ {
+ na = write_index;
+ next_page = write_index;
+ compact (compact_workspace, write_index);
+ }
+
+ if (unlikely (!resize (count)))
+ return;
+
+ newCount = count;
+
+ /* Process in-place backward. */
+ a = na;
+ b = nb;
+ for (; a && b; )
+ {
+ if (page_map[a - 1].major == other.page_map[b - 1].major)
+ {
+ a--;
+ b--;
+ count--;
+ page_map[count] = page_map[a];
+ page_at (count).v = op (page_at (a).v, other.page_at (b).v);
+ }
+ else if (page_map[a - 1].major > other.page_map[b - 1].major)
+ {
+ a--;
+ if (passthru_left)
+ {
+ count--;
+ page_map[count] = page_map[a];
+ }
+ }
+ else
+ {
+ b--;
+ if (passthru_right)
+ {
+ count--;
+ page_map[count].major = other.page_map[b].major;
+ page_map[count].index = next_page++;
+ page_at (count).v = other.page_at (b).v;
+ }
+ }
+ }
+ if (passthru_left)
+ while (a)
+ {
+ a--;
+ count--;
+ page_map[count] = page_map [a];
+ }
+ if (passthru_right)
+ while (b)
+ {
+ b--;
+ count--;
+ page_map[count].major = other.page_map[b].major;
+ page_map[count].index = next_page++;
+ page_at (count).v = other.page_at (b).v;
+ }
+ assert (!count);
+ resize (newCount);
+ }
+
+ void union_ (const hb_bit_set_t &other) { process (hb_bitwise_or, other); }
+ void intersect (const hb_bit_set_t &other) { process (hb_bitwise_and, other); }
+ void subtract (const hb_bit_set_t &other) { process (hb_bitwise_gt, other); }
+ void symmetric_difference (const hb_bit_set_t &other) { process (hb_bitwise_xor, other); }
+
+ bool next (hb_codepoint_t *codepoint) const
+ {
+ // TODO: this should be merged with prev() as both implementations
+ // are very similar.
+ if (unlikely (*codepoint == INVALID)) {
+ *codepoint = get_min ();
+ return *codepoint != INVALID;
+ }
+
+ const auto* page_map_array = page_map.arrayZ;
+ unsigned int major = get_major (*codepoint);
+ unsigned int i = last_page_lookup;
+
+ if (unlikely (i >= page_map.length || page_map_array[i].major != major))
+ {
+ page_map.bfind (major, &i, HB_NOT_FOUND_STORE_CLOSEST);
+ if (i >= page_map.length) {
+ *codepoint = INVALID;
+ return false;
+ }
+ }
+
+ const auto* pages_array = pages.arrayZ;
+ const page_map_t &current = page_map_array[i];
+ if (likely (current.major == major))
+ {
+ if (pages_array[current.index].next (codepoint))
+ {
+ *codepoint += current.major * page_t::PAGE_BITS;
+ last_page_lookup = i;
+ return true;
+ }
+ i++;
+ }
+
+ for (; i < page_map.length; i++)
+ {
+ const page_map_t &current = page_map.arrayZ[i];
+ hb_codepoint_t m = pages_array[current.index].get_min ();
+ if (m != INVALID)
+ {
+ *codepoint = current.major * page_t::PAGE_BITS + m;
+ last_page_lookup = i;
+ return true;
+ }
+ }
+ last_page_lookup = 0;
+ *codepoint = INVALID;
+ return false;
+ }
+ bool previous (hb_codepoint_t *codepoint) const
+ {
+ if (unlikely (*codepoint == INVALID)) {
+ *codepoint = get_max ();
+ return *codepoint != INVALID;
+ }
+
+ page_map_t map = {get_major (*codepoint), 0};
+ unsigned int i;
+ page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST);
+ if (i < page_map.length && page_map[i].major == map.major)
+ {
+ if (pages[page_map[i].index].previous (codepoint))
+ {
+ *codepoint += page_map[i].major * page_t::PAGE_BITS;
+ return true;
+ }
+ }
+ i--;
+ for (; (int) i >= 0; i--)
+ {
+ hb_codepoint_t m = pages[page_map[i].index].get_max ();
+ if (m != INVALID)
+ {
+ *codepoint = page_map[i].major * page_t::PAGE_BITS + m;
+ return true;
+ }
+ }
+ *codepoint = INVALID;
+ return false;
+ }
+ bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ {
+ hb_codepoint_t i;
+
+ i = *last;
+ if (!next (&i))
+ {
+ *last = *first = INVALID;
+ return false;
+ }
+
+ /* TODO Speed up. */
+ *last = *first = i;
+ while (next (&i) && i == *last + 1)
+ (*last)++;
+
+ return true;
+ }
+ bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ {
+ hb_codepoint_t i;
+
+ i = *first;
+ if (!previous (&i))
+ {
+ *last = *first = INVALID;
+ return false;
+ }
+
+ /* TODO Speed up. */
+ *last = *first = i;
+ while (previous (&i) && i == *first - 1)
+ (*first)--;
+
+ return true;
+ }
+
+ bool has_population () const { return population != UINT_MAX; }
+ unsigned int get_population () const
+ {
+ if (has_population ())
+ return population;
+
+ unsigned int pop = 0;
+ unsigned int count = pages.length;
+ for (unsigned int i = 0; i < count; i++)
+ pop += pages[i].get_population ();
+
+ population = pop;
+ return pop;
+ }
+ hb_codepoint_t get_min () const
+ {
+ unsigned count = pages.length;
+ for (unsigned i = 0; i < count; i++)
+ {
+ const auto& map = page_map[i];
+ const auto& page = pages[map.index];
+
+ if (!page.is_empty ())
+ return map.major * page_t::PAGE_BITS + page.get_min ();
+ }
+ return INVALID;
+ }
+ hb_codepoint_t get_max () const
+ {
+ unsigned count = pages.length;
+ for (signed i = count - 1; i >= 0; i--)
+ {
+ const auto& map = page_map[(unsigned) i];
+ const auto& page = pages[map.index];
+
+ if (!page.is_empty ())
+ return map.major * page_t::PAGE_BITS + page.get_max ();
+ }
+ return INVALID;
+ }
+
+ static constexpr hb_codepoint_t INVALID = page_t::INVALID;
+
+ /*
+ * Iterator implementation.
+ */
+ struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
+ {
+ static constexpr bool is_sorted_iterator = true;
+ iter_t (const hb_bit_set_t &s_ = Null (hb_bit_set_t),
+ bool init = true) : s (&s_), v (INVALID), l(0)
+ {
+ if (init)
+ {
+ l = s->get_population () + 1;
+ __next__ ();
+ }
+ }
+
+ typedef hb_codepoint_t __item_t__;
+ hb_codepoint_t __item__ () const { return v; }
+ bool __more__ () const { return v != INVALID; }
+ void __next__ () { s->next (&v); if (l) l--; }
+ void __prev__ () { s->previous (&v); }
+ unsigned __len__ () const { return l; }
+ iter_t end () const { return iter_t (*s, false); }
+ bool operator != (const iter_t& o) const
+ { return s != o.s || v != o.v; }
+
+ protected:
+ const hb_bit_set_t *s;
+ hb_codepoint_t v;
+ unsigned l;
+ };
+ iter_t iter () const { return iter_t (*this); }
+ operator iter_t () const { return iter (); }
+
+ protected:
+
+ page_t *page_for (hb_codepoint_t g, bool insert = false)
+ {
+ page_map_t map = {get_major (g), pages.length};
+ unsigned int i;
+ if (!page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST))
+ {
+ if (!insert)
+ return nullptr;
+
+ if (unlikely (!resize (pages.length + 1)))
+ return nullptr;
+
+ pages[map.index].init0 ();
+ memmove (page_map + i + 1,
+ page_map + i,
+ (page_map.length - 1 - i) * page_map.item_size);
+ page_map[i] = map;
+ }
+ return &pages[page_map[i].index];
+ }
+ const page_t *page_for (hb_codepoint_t g) const
+ {
+ page_map_t key = {get_major (g)};
+ const page_map_t *found = page_map.bsearch (key);
+ if (found)
+ return &pages[found->index];
+ return nullptr;
+ }
+ page_t &page_at (unsigned int i) { return pages[page_map[i].index]; }
+ const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; }
+ unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; }
+ hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; }
+};
+
+
+#endif /* HB_BIT_SET_HH */
diff --git a/thirdparty/harfbuzz/src/hb-blob.cc b/thirdparty/harfbuzz/src/hb-blob.cc
index 71b1b1fc4f..f120002d17 100644
--- a/thirdparty/harfbuzz/src/hb-blob.cc
+++ b/thirdparty/harfbuzz/src/hb-blob.cc
@@ -72,14 +72,52 @@ hb_blob_create (const char *data,
void *user_data,
hb_destroy_func_t destroy)
{
+ if (!length)
+ {
+ if (destroy)
+ destroy (user_data);
+ return hb_blob_get_empty ();
+ }
+
+ hb_blob_t *blob = hb_blob_create_or_fail (data, length, mode,
+ user_data, destroy);
+ return likely (blob) ? blob : hb_blob_get_empty ();
+}
+
+/**
+ * hb_blob_create_or_fail: (skip)
+ * @data: Pointer to blob data.
+ * @length: Length of @data in bytes.
+ * @mode: Memory mode for @data.
+ * @user_data: Data parameter to pass to @destroy.
+ * @destroy: (nullable): Callback to call when @data is not needed anymore.
+ *
+ * Creates a new "blob" object wrapping @data. The @mode parameter is used
+ * to negotiate ownership and lifecycle of @data.
+ *
+ * Note that this function returns a freshly-allocated empty blob even if @length
+ * is zero. This is in contrast to hb_blob_create(), which returns the singleton
+ * empty blob (as returned by hb_blob_get_empty()) if @length is zero.
+ *
+ * Return value: New blob, or %NULL if failed. Destroy with hb_blob_destroy().
+ *
+ * Since: 2.8.2
+ **/
+hb_blob_t *
+hb_blob_create_or_fail (const char *data,
+ unsigned int length,
+ hb_memory_mode_t mode,
+ void *user_data,
+ hb_destroy_func_t destroy)
+{
hb_blob_t *blob;
- if (!length ||
- length >= 1u << 31 ||
- !(blob = hb_object_create<hb_blob_t> ())) {
+ if (length >= 1u << 31 ||
+ !(blob = hb_object_create<hb_blob_t> ()))
+ {
if (destroy)
destroy (user_data);
- return hb_blob_get_empty ();
+ return nullptr;
}
blob->data = data;
@@ -91,9 +129,10 @@ hb_blob_create (const char *data,
if (blob->mode == HB_MEMORY_MODE_DUPLICATE) {
blob->mode = HB_MEMORY_MODE_READONLY;
- if (!blob->try_make_writable ()) {
+ if (!blob->try_make_writable ())
+ {
hb_blob_destroy (blob);
- return hb_blob_get_empty ();
+ return nullptr;
}
}
@@ -226,7 +265,7 @@ hb_blob_destroy (hb_blob_t *blob)
blob->fini_shallow ();
- free (blob);
+ hb_free (blob);
}
/**
@@ -452,7 +491,7 @@ hb_blob_t::try_make_writable ()
char *new_data;
- new_data = (char *) malloc (this->length);
+ new_data = (char *) hb_malloc (this->length);
if (unlikely (!new_data))
return false;
@@ -463,7 +502,7 @@ hb_blob_t::try_make_writable ()
this->mode = HB_MEMORY_MODE_WRITABLE;
this->data = new_data;
this->user_data = new_data;
- this->destroy = free;
+ this->destroy = hb_free;
return true;
}
@@ -517,7 +556,7 @@ _hb_mapped_file_destroy (void *file_)
assert (0); // If we don't have mmap we shouldn't reach here
#endif
- free (file);
+ hb_free (file);
}
#endif
@@ -528,7 +567,7 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file)
size_t name_len = strlen (file_name);
size_t len = name_len + sizeof (_PATH_RSRCFORKSPEC);
- char *rsrc_name = (char *) malloc (len);
+ char *rsrc_name = (char *) hb_malloc (len);
if (unlikely (!rsrc_name)) return -1;
strncpy (rsrc_name, file_name, name_len);
@@ -536,7 +575,7 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file)
sizeof (_PATH_RSRCFORKSPEC) - 1);
int fd = open (rsrc_name, O_RDONLY | O_BINARY, 0);
- free (rsrc_name);
+ hb_free (rsrc_name);
if (fd != -1)
{
@@ -561,17 +600,37 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file)
* Creates a new blob containing the data from the
* specified binary font file.
*
- * Returns: An #hb_blob_t pointer with the content of the file
+ * Returns: An #hb_blob_t pointer with the content of the file,
+ * or hb_blob_get_empty() if failed.
*
* Since: 1.7.7
**/
hb_blob_t *
hb_blob_create_from_file (const char *file_name)
{
+ hb_blob_t *blob = hb_blob_create_from_file_or_fail (file_name);
+ return likely (blob) ? blob : hb_blob_get_empty ();
+}
+
+/**
+ * hb_blob_create_from_file_or_fail:
+ * @file_name: A font filename
+ *
+ * Creates a new blob containing the data from the
+ * specified binary font file.
+ *
+ * Returns: An #hb_blob_t pointer with the content of the file,
+ * or %NULL if failed.
+ *
+ * Since: 2.8.2
+ **/
+hb_blob_t *
+hb_blob_create_from_file_or_fail (const char *file_name)
+{
/* Adopted from glib's gmappedfile.c with Matthias Clasen and
Allison Lortie permission but changed a lot to suit our need. */
#if defined(HAVE_MMAP) && !defined(HB_NO_MMAP)
- hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
+ hb_mapped_file_t *file = (hb_mapped_file_t *) hb_calloc (1, sizeof (hb_mapped_file_t));
if (unlikely (!file)) return hb_blob_get_empty ();
int fd = open (file_name, O_RDONLY | O_BINARY, 0);
@@ -601,22 +660,22 @@ hb_blob_create_from_file (const char *file_name)
close (fd);
- return hb_blob_create (file->contents, file->length,
- HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
- (hb_destroy_func_t) _hb_mapped_file_destroy);
+ return hb_blob_create_or_fail (file->contents, file->length,
+ HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
+ (hb_destroy_func_t) _hb_mapped_file_destroy);
fail:
close (fd);
fail_without_close:
- free (file);
+ hb_free (file);
#elif defined(_WIN32) && !defined(HB_NO_MMAP)
- hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
+ hb_mapped_file_t *file = (hb_mapped_file_t *) hb_calloc (1, sizeof (hb_mapped_file_t));
if (unlikely (!file)) return hb_blob_get_empty ();
HANDLE fd;
unsigned int size = strlen (file_name) + 1;
- wchar_t * wchar_file_name = (wchar_t *) malloc (sizeof (wchar_t) * size);
+ wchar_t * wchar_file_name = (wchar_t *) hb_malloc (sizeof (wchar_t) * size);
if (unlikely (!wchar_file_name)) goto fail_without_close;
mbstowcs (wchar_file_name, file_name, size);
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
@@ -636,7 +695,7 @@ fail_without_close:
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
nullptr);
#endif
- free (wchar_file_name);
+ hb_free (wchar_file_name);
if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close;
@@ -661,22 +720,22 @@ fail_without_close:
if (unlikely (!file->contents)) goto fail;
CloseHandle (fd);
- return hb_blob_create (file->contents, file->length,
- HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
- (hb_destroy_func_t) _hb_mapped_file_destroy);
+ return hb_blob_create_or_fail (file->contents, file->length,
+ HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
+ (hb_destroy_func_t) _hb_mapped_file_destroy);
fail:
CloseHandle (fd);
fail_without_close:
- free (file);
+ hb_free (file);
#endif
/* The following tries to read a file without knowing its size beforehand
It's used as a fallback for systems without mmap or to read from pipes */
unsigned long len = 0, allocated = BUFSIZ * 16;
- char *data = (char *) malloc (allocated);
- if (unlikely (!data)) return hb_blob_get_empty ();
+ char *data = (char *) hb_malloc (allocated);
+ if (unlikely (!data)) return nullptr;
FILE *fp = fopen (file_name, "rb");
if (unlikely (!fp)) goto fread_fail_without_close;
@@ -689,7 +748,7 @@ fail_without_close:
/* Don't allocate and go more than ~536MB, our mmap reader still
can cover files like that but lets limit our fallback reader */
if (unlikely (allocated > (2 << 28))) goto fread_fail;
- char *new_data = (char *) realloc (data, allocated);
+ char *new_data = (char *) hb_realloc (data, allocated);
if (unlikely (!new_data)) goto fread_fail;
data = new_data;
}
@@ -706,13 +765,13 @@ fail_without_close:
}
fclose (fp);
- return hb_blob_create (data, len, HB_MEMORY_MODE_WRITABLE, data,
- (hb_destroy_func_t) free);
+ return hb_blob_create_or_fail (data, len, HB_MEMORY_MODE_WRITABLE, data,
+ (hb_destroy_func_t) hb_free);
fread_fail:
fclose (fp);
fread_fail_without_close:
- free (data);
- return hb_blob_get_empty ();
+ hb_free (data);
+ return nullptr;
}
#endif /* !HB_NO_OPEN */
diff --git a/thirdparty/harfbuzz/src/hb-blob.h b/thirdparty/harfbuzz/src/hb-blob.h
index 86f12788d2..203f9e19dd 100644
--- a/thirdparty/harfbuzz/src/hb-blob.h
+++ b/thirdparty/harfbuzz/src/hb-blob.h
@@ -91,8 +91,18 @@ hb_blob_create (const char *data,
hb_destroy_func_t destroy);
HB_EXTERN hb_blob_t *
+hb_blob_create_or_fail (const char *data,
+ unsigned int length,
+ hb_memory_mode_t mode,
+ void *user_data,
+ hb_destroy_func_t destroy);
+
+HB_EXTERN hb_blob_t *
hb_blob_create_from_file (const char *file_name);
+HB_EXTERN hb_blob_t *
+hb_blob_create_from_file_or_fail (const char *file_name);
+
/* Always creates with MEMORY_MODE_READONLY.
* Even if the parent blob is writable, we don't
* want the user of the sub-blob to be able to
diff --git a/thirdparty/harfbuzz/src/hb-blob.hh b/thirdparty/harfbuzz/src/hb-blob.hh
index b03dfc1380..a3683a681e 100644
--- a/thirdparty/harfbuzz/src/hb-blob.hh
+++ b/thirdparty/harfbuzz/src/hb-blob.hh
@@ -88,7 +88,7 @@ struct hb_blob_ptr_t
const T * get () const { return b->as<T> (); }
hb_blob_t * get_blob () const { return b.get_raw (); }
unsigned int get_length () const { return b.get ()->length; }
- void destroy () { hb_blob_destroy (b.get ()); b = nullptr; }
+ void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
private:
hb_nonnull_ptr_t<hb_blob_t> b;
diff --git a/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh b/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh
index 01db295498..e80cfea6e7 100644
--- a/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh
@@ -1,29 +1,30 @@
+
#line 1 "hb-buffer-deserialize-json.rl"
/*
-* Copyright © 2013 Google, Inc.
-*
-* This is part of HarfBuzz, a text shaping library.
-*
-* Permission is hereby granted, without written agreement and without
-* license or royalty fees, to use, copy, modify, and distribute this
-* software and its documentation for any purpose, provided that the
-* above copyright notice and the following two paragraphs appear in
-* all copies of this software.
-*
-* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
-* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
-* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-* DAMAGE.
-*
-* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
-* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-*
-* Google Author(s): Behdad Esfahbod
-*/
+ * Copyright © 2013 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
#ifndef HB_BUFFER_DESERIALIZE_JSON_HH
#define HB_BUFFER_DESERIALIZE_JSON_HH
@@ -31,158 +32,446 @@
#include "hb.hh"
-#line 35 "hb-buffer-deserialize-json.hh"
+#line 36 "hb-buffer-deserialize-json.hh"
static const unsigned char _deserialize_json_trans_keys[] = {
- 1u, 0u, 0u, 18u, 0u, 2u, 10u, 15u,
- 16u, 17u, 2u, 2u, 0u, 7u, 0u, 6u,
- 5u, 6u, 0u, 19u, 0u, 19u, 0u, 19u,
- 2u, 2u, 0u, 7u, 0u, 6u, 5u, 6u,
- 0u, 19u, 0u, 19u, 14u, 14u, 2u, 2u,
- 0u, 7u, 0u, 6u, 0u, 19u, 0u, 19u,
- 16u, 17u, 2u, 2u, 0u, 7u, 0u, 6u,
- 5u, 6u, 0u, 19u, 0u, 19u, 2u, 2u,
- 0u, 7u, 0u, 6u, 5u, 6u, 0u, 19u,
- 0u, 19u, 2u, 2u, 0u, 7u, 0u, 6u,
- 2u, 8u, 0u, 19u, 2u, 8u, 0u, 19u,
- 0u, 19u, 2u, 2u, 0u, 7u, 0u, 6u,
- 0u, 19u, 0u, 9u, 0u, 18u, 1u, 0u,
- 0u
+ 0u, 0u, 9u, 123u, 9u, 34u, 97u, 117u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
+ 9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u,
+ 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u,
+ 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 34u, 92u, 9u, 125u, 34u, 92u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0
};
-static const signed char _deserialize_json_char_class[] = {
- 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 2, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 3, 4, 1, 1, 5,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 7, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 8, 9, 1, 1, 1,
- 10, 1, 11, 12, 1, 1, 13, 1,
- 1, 1, 1, 14, 1, 1, 1, 1,
- 1, 1, 1, 1, 15, 1, 1, 16,
- 17, 1, 18, 1, 19, 0
+static const char _deserialize_json_key_spans[] = {
+ 0, 115, 26, 21, 2, 1, 50, 49,
+ 10, 117, 117, 117, 1, 50, 49, 10,
+ 117, 117, 1, 1, 50, 49, 117, 117,
+ 2, 1, 50, 49, 10, 117, 117, 1,
+ 50, 49, 10, 117, 117, 1, 50, 49,
+ 59, 117, 59, 117, 117, 1, 50, 49,
+ 117, 85, 115, 0
};
static const short _deserialize_json_index_offsets[] = {
- 0, 0, 19, 22, 28, 30, 31, 39,
- 46, 48, 68, 88, 108, 109, 117, 124,
- 126, 146, 166, 167, 168, 176, 183, 203,
- 223, 225, 226, 234, 241, 243, 263, 283,
- 284, 292, 299, 301, 321, 341, 342, 350,
- 357, 364, 384, 391, 411, 431, 432, 440,
- 447, 467, 477, 496, 0
+ 0, 0, 116, 143, 165, 168, 170, 221,
+ 271, 282, 400, 518, 636, 638, 689, 739,
+ 750, 868, 986, 988, 990, 1041, 1091, 1209,
+ 1327, 1330, 1332, 1383, 1433, 1444, 1562, 1680,
+ 1682, 1733, 1783, 1794, 1912, 2030, 2032, 2083,
+ 2133, 2193, 2311, 2371, 2489, 2607, 2609, 2660,
+ 2710, 2828, 2914, 3030
};
-static const signed char _deserialize_json_indicies[] = {
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 3, 0, 4, 5, 6,
- 7, 8, 0, 9, 10, 11, 12, 12,
- 0, 0, 0, 0, 0, 0, 13, 13,
- 0, 0, 0, 14, 15, 16, 18, 19,
- 20, 0, 0, 21, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 22, 23, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24,
- 20, 0, 0, 21, 0, 19, 19, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 22, 25, 25, 0, 0,
- 0, 0, 0, 0, 26, 26, 0, 0,
- 0, 27, 28, 29, 31, 32, 33, 0,
- 0, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 35, 33, 0, 0, 34, 0, 32,
- 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 35, 36, 37,
- 37, 0, 0, 0, 0, 0, 0, 38,
- 38, 0, 0, 0, 0, 39, 40, 42,
- 0, 0, 43, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 44, 42, 0, 0, 43, 0,
- 45, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 44, 46,
- 47, 48, 48, 0, 0, 0, 0, 0,
- 0, 49, 49, 0, 0, 0, 50, 51,
- 52, 54, 55, 56, 0, 0, 57, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 58, 56,
- 0, 0, 57, 0, 55, 55, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 58, 59, 59, 0, 0, 0,
- 0, 0, 0, 60, 60, 0, 0, 0,
- 61, 62, 63, 65, 66, 67, 0, 0,
- 68, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 69, 67, 0, 0, 68, 0, 66, 66,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 69, 70, 70, 0,
- 0, 0, 0, 0, 0, 71, 71, 0,
- 72, 0, 0, 73, 74, 76, 75, 75,
- 75, 75, 75, 77, 79, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 81,
- 75, 0, 0, 0, 0, 0, 75, 83,
- 0, 0, 84, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 85, 83, 0, 0, 84, 0,
- 87, 87, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 85, 88,
- 88, 0, 0, 0, 0, 0, 0, 89,
- 89, 0, 0, 0, 0, 90, 91, 83,
- 0, 0, 84, 0, 93, 93, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 85, 94, 0, 0, 95, 0,
- 0, 0, 0, 0, 96, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2,
+static const char _deserialize_json_indicies[] = {
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 1, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 1, 4, 1,
+ 5, 1, 6, 7, 1, 1, 8, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 1, 10, 11,
+ 1, 12, 1, 12, 12, 12, 12, 12,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 12, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 13, 1, 13, 13,
+ 13, 13, 13, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 13, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 14, 1, 1, 15, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 1,
+ 17, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 1, 19, 19, 19, 19, 19,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 19, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 20, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 21,
+ 1, 22, 22, 22, 22, 22, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 22, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 23, 1, 19,
+ 19, 19, 19, 19, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 19, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 20, 1, 1, 1, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 21, 1, 24, 1, 24,
+ 24, 24, 24, 24, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 24, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 25, 1, 25, 25, 25, 25, 25, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 25, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 26, 1,
+ 1, 27, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 1, 29, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 1, 31,
+ 31, 31, 31, 31, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 31, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 32, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 33, 1, 31, 31, 31,
+ 31, 31, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 31, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 32, 1, 1, 1, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 33, 1, 34, 1, 35, 1, 35,
+ 35, 35, 35, 35, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 35, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 36, 1, 36, 36, 36, 36, 36, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 36, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 37, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 1, 39, 39, 39, 39,
+ 39, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 39, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 40,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 41, 1, 39, 39, 39, 39, 39, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 40, 1, 1,
+ 1, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 41, 1,
+ 43, 44, 1, 45, 1, 45, 45, 45,
+ 45, 45, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 45, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 46, 1,
+ 46, 46, 46, 46, 46, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 46,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 47, 1, 1, 48,
+ 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 1, 50, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 1, 52, 52, 52,
+ 52, 52, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 52, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 53, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 54, 1, 52, 52, 52, 52, 52,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 52, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 53, 1,
+ 1, 1, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 54,
+ 1, 55, 1, 55, 55, 55, 55, 55,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 55, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 56, 1, 56, 56,
+ 56, 56, 56, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 56, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 57, 1, 1, 58, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 1,
+ 60, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 1, 62, 62, 62, 62, 62,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 62, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 63, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 64,
+ 1, 62, 62, 62, 62, 62, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 62, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 63, 1, 1, 1,
+ 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 64, 1, 65,
+ 1, 65, 65, 65, 65, 65, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 65, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 66, 1, 66, 66, 66, 66,
+ 66, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 66, 1, 67, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 68, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 1, 71, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 72, 70, 73, 73, 73, 73, 73, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 73, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 74, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 75, 1,
+ 70, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 70, 1, 76, 76, 76, 76,
+ 76, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 76, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 77,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 78, 1, 76, 76, 76, 76, 76, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 76, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 77, 1, 1,
+ 1, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 78, 1,
+ 80, 1, 80, 80, 80, 80, 80, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 80, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 81, 1, 81, 81, 81,
+ 81, 81, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 81, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 82, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 1, 76,
+ 76, 76, 76, 76, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 76, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 77, 1, 1, 1, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 78, 1, 85, 85, 85,
+ 85, 85, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 85, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 86, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 87, 1, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 1,
0
};
-static const signed char _deserialize_json_index_defaults[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 75, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0
-};
-
-static const signed char _deserialize_json_cond_targs[] = {
- 0, 1, 2, 2, 3, 4, 18, 24,
- 37, 45, 5, 12, 6, 7, 8, 9,
- 11, 8, 9, 11, 10, 2, 49, 10,
- 49, 13, 14, 15, 16, 17, 15, 16,
- 17, 10, 2, 49, 19, 20, 21, 22,
- 23, 22, 10, 2, 49, 23, 25, 31,
- 26, 27, 28, 29, 30, 28, 29, 30,
- 10, 2, 49, 32, 33, 34, 35, 36,
- 34, 35, 36, 10, 2, 49, 38, 39,
- 40, 43, 44, 40, 41, 42, 41, 10,
- 2, 49, 43, 10, 2, 49, 44, 44,
- 46, 47, 43, 48, 48, 48, 49, 50,
- 51, 0
+static const char _deserialize_json_trans_targs[] = {
+ 1, 0, 2, 2, 3, 4, 18, 24,
+ 37, 45, 5, 12, 6, 7, 8, 9,
+ 11, 9, 11, 10, 2, 49, 10, 49,
+ 13, 14, 15, 16, 17, 16, 17, 10,
+ 2, 49, 19, 20, 21, 22, 23, 10,
+ 2, 49, 23, 25, 31, 26, 27, 28,
+ 29, 30, 29, 30, 10, 2, 49, 32,
+ 33, 34, 35, 36, 35, 36, 10, 2,
+ 49, 38, 39, 40, 43, 44, 40, 41,
+ 42, 10, 2, 49, 10, 2, 49, 44,
+ 46, 47, 43, 48, 48, 49, 50, 51
};
-static const signed char _deserialize_json_cond_actions[] = {
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 2,
- 2, 0, 0, 0, 3, 3, 4, 0,
- 5, 0, 0, 2, 2, 2, 0, 0,
- 0, 6, 6, 7, 0, 0, 0, 2,
- 2, 0, 8, 8, 9, 0, 0, 0,
- 0, 0, 2, 2, 2, 0, 0, 0,
- 10, 10, 11, 0, 0, 2, 2, 2,
- 0, 0, 0, 12, 12, 13, 0, 0,
- 2, 14, 14, 0, 15, 0, 0, 16,
- 16, 17, 0, 18, 18, 19, 0, 15,
- 0, 0, 20, 20, 0, 21, 0, 0,
- 0, 0
+static const char _deserialize_json_trans_actions[] = {
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 2, 2,
+ 2, 0, 0, 3, 3, 4, 0, 5,
+ 0, 0, 2, 2, 2, 0, 0, 6,
+ 6, 7, 0, 0, 0, 2, 2, 8,
+ 8, 9, 0, 0, 0, 0, 0, 2,
+ 2, 2, 0, 0, 10, 10, 11, 0,
+ 0, 2, 2, 2, 0, 0, 12, 12,
+ 13, 0, 0, 2, 14, 14, 0, 15,
+ 0, 16, 16, 17, 18, 18, 19, 15,
+ 0, 0, 20, 20, 21, 0, 0, 0
};
static const int deserialize_json_start = 1;
@@ -197,411 +486,247 @@ static const int deserialize_json_en_main = 1;
static hb_bool_t
_hb_buffer_deserialize_json (hb_buffer_t *buffer,
-const char *buf,
-unsigned int buf_len,
-const char **end_ptr,
-hb_font_t *font)
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
{
- const char *p = buf, *pe = buf + buf_len;
-
- /* Ensure we have positions. */
- (void) hb_buffer_get_glyph_positions (buffer, nullptr);
-
- while (p < pe && ISSPACE (*p))
- p++;
- if (p < pe && *p == (buffer->len ? ',' : '['))
- {
- *end_ptr = ++p;
- }
-
- const char *tok = nullptr;
- int cs;
- hb_glyph_info_t info = {0};
- hb_glyph_position_t pos = {0};
-
-#line 223 "hb-buffer-deserialize-json.hh"
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, nullptr);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+ if (p < pe && *p == (buffer->len ? ',' : '['))
+ {
+ *end_ptr = ++p;
+ }
+
+ const char *tok = nullptr;
+ int cs;
+ hb_glyph_info_t info = {0};
+ hb_glyph_position_t pos = {0};
+
+#line 512 "hb-buffer-deserialize-json.hh"
{
- cs = (int)deserialize_json_start;
+ cs = deserialize_json_start;
}
-
-#line 228 "hb-buffer-deserialize-json.hh"
+
+#line 517 "hb-buffer-deserialize-json.hh"
{
- unsigned int _trans = 0;
- const unsigned char * _keys;
- const signed char * _inds;
- int _ic;
- _resume: {}
- if ( p == pe )
- goto _out;
- _keys = ( _deserialize_json_trans_keys + ((cs<<1)));
- _inds = ( _deserialize_json_indicies + (_deserialize_json_index_offsets[cs]));
-
- if ( ( (*( p))) <= 125 && ( (*( p))) >= 9 ) {
- _ic = (int)_deserialize_json_char_class[(int)( (*( p))) - 9];
- if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
- _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
- else
- _trans = (unsigned int)_deserialize_json_index_defaults[cs];
- }
- else {
- _trans = (unsigned int)_deserialize_json_index_defaults[cs];
- }
-
- cs = (int)_deserialize_json_cond_targs[_trans];
-
- if ( _deserialize_json_cond_actions[_trans] != 0 ) {
-
- switch ( _deserialize_json_cond_actions[_trans] ) {
- case 1: {
- {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+ if ( cs == 0 )
+ goto _out;
+_resume:
+ _keys = _deserialize_json_trans_keys + (cs<<1);
+ _inds = _deserialize_json_indicies + _deserialize_json_index_offsets[cs];
+
+ _slen = _deserialize_json_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+ (*p) <= _keys[1] ?
+ (*p) - _keys[0] : _slen ];
+
+ cs = _deserialize_json_trans_targs[_trans];
+
+ if ( _deserialize_json_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _deserialize_json_trans_actions[_trans] ) {
+ case 1:
#line 38 "hb-buffer-deserialize-json.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 264 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 5: {
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+ break;
+ case 5:
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 280 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 2: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 2:
#line 51 "hb-buffer-deserialize-json.rl"
-
- tok = p;
- }
-
-#line 292 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 15: {
- {
+ {
+ tok = p;
+}
+ break;
+ case 15:
#line 55 "hb-buffer-deserialize-json.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 302 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 21: {
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
+ break;
+ case 21:
#line 56 "hb-buffer-deserialize-json.rl"
- if (unlikely (!buffer->ensure_unicode ())) return false; }
-
-#line 312 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 16: {
- {
+ { if (unlikely (!buffer->ensure_unicode ())) return false; }
+ break;
+ case 16:
#line 58 "hb-buffer-deserialize-json.rl"
-
- /* TODO Unescape \" and \\ if found. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 328 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 18: {
- {
+ {
+ /* TODO Unescape \" and \\ if found. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+ break;
+ case 18:
#line 66 "hb-buffer-deserialize-json.rl"
- if (!parse_uint (tok, p, &info.codepoint)) return false; }
-
-#line 338 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 8: {
- {
+ { if (!parse_uint (tok, p, &info.codepoint)) return false; }
+ break;
+ case 8:
#line 67 "hb-buffer-deserialize-json.rl"
- if (!parse_uint (tok, p, &info.cluster )) return false; }
-
-#line 348 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 10: {
- {
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+ break;
+ case 10:
#line 68 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.x_offset )) return false; }
-
-#line 358 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 12: {
- {
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+ break;
+ case 12:
#line 69 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.y_offset )) return false; }
-
-#line 368 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 3: {
- {
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+ break;
+ case 3:
#line 70 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.x_advance)) return false; }
-
-#line 378 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 6: {
- {
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+ break;
+ case 6:
#line 71 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.y_advance)) return false; }
-
-#line 388 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 14: {
- {
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+ break;
+ case 14:
#line 51 "hb-buffer-deserialize-json.rl"
-
- tok = p;
- }
-
-#line 400 "hb-buffer-deserialize-json.hh"
-
- {
+ {
+ tok = p;
+}
#line 55 "hb-buffer-deserialize-json.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 406 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 20: {
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
+ break;
+ case 20:
#line 51 "hb-buffer-deserialize-json.rl"
-
- tok = p;
- }
-
-#line 418 "hb-buffer-deserialize-json.hh"
-
- {
+ {
+ tok = p;
+}
#line 56 "hb-buffer-deserialize-json.rl"
- if (unlikely (!buffer->ensure_unicode ())) return false; }
-
-#line 424 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 17: {
- {
+ { if (unlikely (!buffer->ensure_unicode ())) return false; }
+ break;
+ case 17:
#line 58 "hb-buffer-deserialize-json.rl"
-
- /* TODO Unescape \" and \\ if found. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 440 "hb-buffer-deserialize-json.hh"
-
- {
+ {
+ /* TODO Unescape \" and \\ if found. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 452 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 19: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 19:
#line 66 "hb-buffer-deserialize-json.rl"
- if (!parse_uint (tok, p, &info.codepoint)) return false; }
-
-#line 462 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_uint (tok, p, &info.codepoint)) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 474 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 9: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 9:
#line 67 "hb-buffer-deserialize-json.rl"
- if (!parse_uint (tok, p, &info.cluster )) return false; }
-
-#line 484 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 496 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 11: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
#line 68 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.x_offset )) return false; }
-
-#line 506 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 518 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 13: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 13:
#line 69 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.y_offset )) return false; }
-
-#line 528 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 540 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 4: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 4:
#line 70 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.x_advance)) return false; }
-
-#line 550 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 562 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- case 7: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 7:
#line 71 "hb-buffer-deserialize-json.rl"
- if (!parse_int (tok, p, &pos.y_advance)) return false; }
-
-#line 572 "hb-buffer-deserialize-json.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
#line 43 "hb-buffer-deserialize-json.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 584 "hb-buffer-deserialize-json.hh"
-
-
- break;
- }
- }
-
- }
-
- if ( cs != 0 ) {
- p += 1;
- goto _resume;
- }
- _out: {}
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+#line 713 "hb-buffer-deserialize-json.hh"
}
-
+
+_again:
+ if ( cs == 0 )
+ goto _out;
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ _out: {}
+ }
+
#line 136 "hb-buffer-deserialize-json.rl"
-
-
- *end_ptr = p;
-
- return p == pe && *(p-1) != ']';
+
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
}
#endif /* HB_BUFFER_DESERIALIZE_JSON_HH */
diff --git a/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh b/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh
index fb36f56015..b599e9667c 100644
--- a/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh
@@ -1,29 +1,30 @@
+
#line 1 "hb-buffer-deserialize-text.rl"
/*
-* Copyright © 2013 Google, Inc.
-*
-* This is part of HarfBuzz, a text shaping library.
-*
-* Permission is hereby granted, without written agreement and without
-* license or royalty fees, to use, copy, modify, and distribute this
-* software and its documentation for any purpose, provided that the
-* above copyright notice and the following two paragraphs appear in
-* all copies of this software.
-*
-* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
-* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
-* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-* DAMAGE.
-*
-* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
-* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-*
-* Google Author(s): Behdad Esfahbod
-*/
+ * Copyright © 2013 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
#ifndef HB_BUFFER_DESERIALIZE_TEXT_HH
#define HB_BUFFER_DESERIALIZE_TEXT_HH
@@ -31,143 +32,366 @@
#include "hb.hh"
-#line 35 "hb-buffer-deserialize-text.hh"
+#line 36 "hb-buffer-deserialize-text.hh"
static const unsigned char _deserialize_text_trans_keys[] = {
- 1u, 0u, 0u, 13u, 12u, 12u, 2u, 2u,
- 5u, 11u, 0u, 12u, 5u, 6u, 4u, 6u,
- 5u, 6u, 5u, 6u, 4u, 6u, 5u, 6u,
- 3u, 3u, 4u, 6u, 5u, 6u, 3u, 6u,
- 2u, 16u, 4u, 6u, 5u, 6u, 0u, 16u,
- 0u, 16u, 1u, 0u, 0u, 12u, 0u, 16u,
- 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u,
- 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u,
- 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u,
- 0u, 16u, 0u
+ 0u, 0u, 9u, 91u, 85u, 85u, 43u, 43u, 48u, 102u, 9u, 85u, 48u, 57u, 45u, 57u,
+ 48u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u,
+ 43u, 124u, 45u, 57u, 48u, 57u, 9u, 124u, 9u, 124u, 0u, 0u, 9u, 85u, 9u, 124u,
+ 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
+ 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 0
};
-static const signed char _deserialize_text_char_class[] = {
- 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 3, 4, 1, 1, 5,
- 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 1, 1, 7, 8, 9, 1, 10,
- 11, 11, 11, 11, 11, 11, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 12, 1, 1, 1,
- 1, 1, 13, 14, 15, 1, 1, 1,
- 11, 11, 11, 11, 11, 11, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 16, 0
+static const char _deserialize_text_key_spans[] = {
+ 0, 83, 1, 1, 55, 77, 10, 13,
+ 10, 10, 13, 10, 1, 13, 10, 14,
+ 82, 13, 10, 116, 116, 0, 77, 116,
+ 116, 116, 116, 116, 116, 116, 116, 116,
+ 116, 116, 116, 116, 116
};
static const short _deserialize_text_index_offsets[] = {
- 0, 0, 14, 15, 16, 23, 36, 38,
- 41, 43, 45, 48, 50, 51, 54, 56,
- 60, 75, 78, 80, 97, 114, 114, 127,
- 144, 161, 178, 195, 212, 229, 246, 263,
- 280, 297, 314, 331, 348, 0
-};
-
-static const signed char _deserialize_text_indicies[] = {
- 1, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 3, 4, 6,
- 7, 7, 0, 0, 0, 0, 7, 8,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 10, 11, 13, 14,
- 15, 17, 18, 20, 21, 23, 24, 25,
- 27, 28, 29, 31, 32, 33, 35, 36,
- 29, 0, 28, 28, 38, 38, 0, 0,
- 0, 0, 38, 0, 38, 0, 0, 0,
- 38, 38, 38, 40, 41, 42, 44, 45,
- 47, 0, 0, 0, 0, 48, 48, 0,
- 49, 50, 0, 48, 0, 0, 0, 0,
- 51, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 53, 0, 0, 0, 0, 0,
- 0, 54, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 4, 56,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 57, 0, 0, 0, 0, 0, 0, 58,
- 56, 0, 0, 0, 0, 60, 60, 0,
- 0, 57, 0, 0, 0, 0, 0, 0,
- 58, 63, 62, 64, 0, 62, 62, 62,
- 62, 65, 62, 66, 62, 62, 62, 67,
- 68, 69, 71, 38, 72, 0, 38, 38,
- 38, 38, 73, 38, 74, 38, 38, 38,
- 37, 75, 76, 78, 0, 0, 79, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 80, 81, 82, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 53, 83, 84, 62, 64,
- 0, 62, 62, 62, 62, 65, 62, 66,
- 62, 62, 62, 67, 68, 69, 86, 0,
- 87, 0, 0, 0, 0, 0, 0, 0,
- 88, 0, 0, 0, 0, 57, 89, 91,
- 0, 92, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 93, 94,
- 91, 0, 92, 0, 0, 36, 36, 0,
- 0, 0, 0, 0, 0, 0, 0, 93,
- 94, 86, 0, 87, 0, 0, 97, 97,
- 0, 0, 0, 88, 0, 0, 0, 0,
- 57, 89, 99, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 100, 101, 99, 0, 0, 0, 0,
- 45, 45, 0, 0, 0, 0, 0, 0,
- 0, 0, 100, 101, 78, 0, 0, 79,
- 0, 18, 18, 0, 0, 0, 0, 0,
- 0, 0, 0, 80, 81, 0
+ 0, 0, 84, 86, 88, 144, 222, 233,
+ 247, 258, 269, 283, 294, 296, 310, 321,
+ 336, 419, 433, 444, 561, 678, 679, 757,
+ 874, 991, 1108, 1225, 1342, 1459, 1576, 1693,
+ 1810, 1927, 2044, 2161, 2278
};
-static const signed char _deserialize_text_index_defaults[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 62, 38, 0, 0, 62, 0, 0,
- 0, 0, 0, 0, 0, 0
+static const char _deserialize_text_indicies[] = {
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 3, 1, 4, 1, 5,
+ 1, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 1, 1, 1, 1, 1,
+ 1, 1, 6, 6, 6, 6, 6, 6,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 6, 6, 6, 6, 6, 6,
+ 1, 7, 7, 7, 7, 7, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 7, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 4, 1, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 1, 10, 1, 1, 11, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 1,
+ 13, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 1, 15, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 1, 17, 1,
+ 1, 18, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 1, 20, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 1, 22,
+ 1, 23, 1, 1, 24, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 1, 26,
+ 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 1, 22, 1, 1, 1, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 1, 28, 28, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 28, 1, 1, 28, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 28, 28, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 28, 1, 29, 1, 1, 30,
+ 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 1, 32, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 1, 34, 34, 34,
+ 34, 34, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 34, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 1, 1,
+ 1, 36, 37, 1, 1, 35, 35, 35,
+ 35, 35, 35, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 35, 35, 35,
+ 35, 35, 35, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 38, 1, 39, 39, 39, 39, 39, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 40,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 41, 1, 1,
+ 7, 7, 7, 7, 7, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 4, 1, 42, 42,
+ 42, 42, 42, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 42, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 43, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 44, 1, 42, 42, 42, 42, 42,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 42, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 1, 1, 1, 1,
+ 43, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 44, 1,
+ 47, 47, 47, 47, 47, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 47,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 48, 1, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 49, 46, 46, 50,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 51, 52, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 53, 46, 54, 54, 54,
+ 54, 54, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 54, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 55,
+ 1, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 56, 28, 28, 57, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 58, 59, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28,
+ 60, 28, 61, 61, 61, 61, 61, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 61, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 62, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 63, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 64, 1, 65,
+ 65, 65, 65, 65, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 65, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 40, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 66, 1, 67, 67, 67, 67,
+ 67, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 67, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 48, 1,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 49, 46, 46, 50, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 51,
+ 52, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 53,
+ 46, 68, 68, 68, 68, 68, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 68, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 69, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 70, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 43, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 71, 1, 72, 72,
+ 72, 72, 72, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 72, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 73, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 74, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 75, 1, 72, 72, 72, 72, 72,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 72, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 73, 1, 1,
+ 1, 1, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 74,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 75, 1,
+ 68, 68, 68, 68, 68, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 68,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 69, 1, 1, 1, 1, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 1, 1, 1, 1, 1, 1, 70,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 43, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 71, 1, 77, 77, 77,
+ 77, 77, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 77, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 78, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 79, 1, 77, 77, 77, 77, 77, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 77, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 78, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 79, 1, 61,
+ 61, 61, 61, 61, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 61, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 62, 1, 1, 1, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 63, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 64, 1, 0
};
-static const signed char _deserialize_text_cond_targs[] = {
- 0, 1, 2, 25, 3, 3, 4, 19,
- 5, 6, 23, 24, 7, 8, 27, 36,
- 8, 27, 36, 9, 30, 33, 10, 11,
- 12, 15, 11, 12, 15, 13, 13, 14,
- 31, 32, 14, 31, 32, 16, 26, 17,
- 18, 34, 35, 18, 34, 35, 19, 20,
- 19, 6, 21, 22, 20, 21, 22, 23,
- 20, 21, 22, 24, 24, 25, 26, 26,
- 7, 9, 10, 16, 21, 29, 26, 26,
- 7, 9, 10, 21, 29, 27, 28, 17,
- 21, 29, 28, 29, 29, 30, 28, 7,
- 10, 29, 31, 28, 7, 21, 29, 32,
- 33, 33, 34, 28, 21, 29, 35, 36,
- 0
+static const char _deserialize_text_trans_targs[] = {
+ 1, 0, 2, 25, 3, 4, 19, 5,
+ 23, 24, 8, 27, 36, 27, 36, 30,
+ 33, 11, 12, 15, 12, 15, 13, 14,
+ 31, 32, 31, 32, 26, 18, 34, 35,
+ 34, 35, 20, 19, 6, 21, 22, 20,
+ 21, 22, 20, 21, 22, 24, 26, 26,
+ 7, 9, 10, 16, 21, 29, 26, 7,
+ 9, 10, 16, 21, 29, 28, 17, 21,
+ 29, 28, 29, 29, 28, 7, 10, 29,
+ 28, 7, 21, 29, 33, 28, 21, 29
};
-static const signed char _deserialize_text_cond_actions[] = {
- 0, 0, 0, 0, 1, 0, 0, 2,
- 0, 0, 2, 2, 0, 3, 4, 4,
- 0, 5, 5, 0, 4, 4, 0, 3,
- 3, 3, 0, 0, 0, 6, 0, 3,
- 4, 4, 0, 5, 5, 0, 5, 0,
- 3, 4, 4, 0, 5, 5, 7, 7,
- 8, 9, 7, 7, 0, 0, 0, 10,
- 10, 10, 10, 10, 8, 11, 12, 13,
- 14, 14, 14, 15, 11, 11, 16, 17,
- 18, 18, 18, 16, 16, 19, 19, 20,
- 19, 19, 0, 0, 13, 10, 10, 21,
- 21, 10, 22, 22, 23, 22, 22, 22,
- 10, 5, 24, 24, 24, 24, 24, 19,
- 0
+static const char _deserialize_text_trans_actions[] = {
+ 0, 0, 0, 0, 1, 0, 2, 0,
+ 2, 2, 3, 4, 4, 5, 5, 4,
+ 4, 3, 3, 3, 0, 0, 6, 3,
+ 4, 4, 5, 5, 5, 3, 4, 4,
+ 5, 5, 7, 8, 9, 7, 7, 0,
+ 0, 0, 10, 10, 10, 8, 12, 13,
+ 14, 14, 14, 15, 11, 11, 17, 18,
+ 18, 18, 0, 16, 16, 19, 20, 19,
+ 19, 0, 0, 13, 10, 21, 21, 10,
+ 22, 23, 22, 22, 5, 24, 24, 24
};
-static const signed char _deserialize_text_eof_trans[] = {
- 1, 2, 3, 6, 7, 9, 10, 13,
- 17, 20, 23, 27, 28, 31, 35, 29,
- 38, 40, 44, 47, 53, 54, 55, 56,
- 60, 62, 71, 78, 83, 70, 86, 91,
- 96, 97, 99, 103, 104, 0
+static const char _deserialize_text_eof_actions[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 7, 0, 0, 0, 10,
+ 10, 11, 16, 19, 0, 11, 10, 22,
+ 22, 10, 24, 24, 19
};
static const int deserialize_text_start = 1;
@@ -182,583 +406,448 @@ static const int deserialize_text_en_main = 1;
static hb_bool_t
_hb_buffer_deserialize_text (hb_buffer_t *buffer,
-const char *buf,
-unsigned int buf_len,
-const char **end_ptr,
-hb_font_t *font)
+ const char *buf,
+ unsigned int buf_len,
+ const char **end_ptr,
+ hb_font_t *font)
{
- const char *p = buf, *pe = buf + buf_len;
-
- /* Ensure we have positions. */
- (void) hb_buffer_get_glyph_positions (buffer, nullptr);
-
- while (p < pe && ISSPACE (*p))
- p++;
-
- const char *eof = pe, *tok = nullptr;
- int cs;
- hb_glyph_info_t info = {0};
- hb_glyph_position_t pos = {0};
-
-#line 204 "hb-buffer-deserialize-text.hh"
- {
- cs = (int)deserialize_text_start;
+ const char *p = buf, *pe = buf + buf_len;
+
+ /* Ensure we have positions. */
+ (void) hb_buffer_get_glyph_positions (buffer, nullptr);
+
+ while (p < pe && ISSPACE (*p))
+ p++;
+
+ const char *eof = pe, *tok = nullptr;
+ int cs;
+ hb_glyph_info_t info = {0};
+ hb_glyph_position_t pos = {0};
+
+#line 428 "hb-buffer-deserialize-text.hh"
+ {
+ cs = deserialize_text_start;
}
-
-#line 209 "hb-buffer-deserialize-text.hh"
- {
- unsigned int _trans = 0;
- const unsigned char * _keys;
- const signed char * _inds;
- int _ic;
- _resume: {}
- if ( p == pe && p != eof )
- goto _out;
- if ( p == eof ) {
- if ( _deserialize_text_eof_trans[cs] > 0 ) {
- _trans = (unsigned int)_deserialize_text_eof_trans[cs] - 1;
- }
- }
- else {
- _keys = ( _deserialize_text_trans_keys + ((cs<<1)));
- _inds = ( _deserialize_text_indicies + (_deserialize_text_index_offsets[cs]));
-
- if ( ( (*( p))) <= 124 && ( (*( p))) >= 9 ) {
- _ic = (int)_deserialize_text_char_class[(int)( (*( p))) - 9];
- if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
- _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
- else
- _trans = (unsigned int)_deserialize_text_index_defaults[cs];
- }
- else {
- _trans = (unsigned int)_deserialize_text_index_defaults[cs];
- }
-
- }
- cs = (int)_deserialize_text_cond_targs[_trans];
-
- if ( _deserialize_text_cond_actions[_trans] != 0 ) {
-
- switch ( _deserialize_text_cond_actions[_trans] ) {
- case 1: {
- {
+
+#line 433 "hb-buffer-deserialize-text.hh"
+ {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+ if ( cs == 0 )
+ goto _out;
+_resume:
+ _keys = _deserialize_text_trans_keys + (cs<<1);
+ _inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs];
+
+ _slen = _deserialize_text_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
+ (*p) <= _keys[1] ?
+ (*p) - _keys[0] : _slen ];
+
+ cs = _deserialize_text_trans_targs[_trans];
+
+ if ( _deserialize_text_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _deserialize_text_trans_actions[_trans] ) {
+ case 1:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 252 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 3: {
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+ break;
+ case 3:
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 264 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 5: {
- {
+ {
+ tok = p;
+}
+ break;
+ case 5:
#line 55 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 274 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 8: {
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
+ break;
+ case 8:
#line 56 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_unicode ())) return false; }
-
-#line 284 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 18: {
- {
+ { if (unlikely (!buffer->ensure_unicode ())) return false; }
+ break;
+ case 18:
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 300 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 9: {
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+ break;
+ case 9:
#line 66 "hb-buffer-deserialize-text.rl"
- if (!parse_hex (tok, p, &info.codepoint )) return false; }
-
-#line 310 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 21: {
- {
+ {if (!parse_hex (tok, p, &info.codepoint )) return false; }
+ break;
+ case 21:
#line 68 "hb-buffer-deserialize-text.rl"
- if (!parse_uint (tok, p, &info.cluster )) return false; }
-
-#line 320 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 6: {
- {
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+ break;
+ case 6:
#line 69 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.x_offset )) return false; }
-
-#line 330 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 23: {
- {
+ { if (!parse_int (tok, p, &pos.x_offset )) return false; }
+ break;
+ case 23:
#line 70 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.y_offset )) return false; }
-
-#line 340 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 20: {
- {
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+ break;
+ case 20:
#line 71 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.x_advance)) return false; }
-
-#line 350 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 15: {
- {
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+ break;
+ case 15:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 363 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 371 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 4: {
- {
+ {
+ tok = p;
+}
+ break;
+ case 4:
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 383 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 55 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 389 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 2: {
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
+ break;
+ case 2:
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 401 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 56 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_unicode ())) return false; }
-
-#line 407 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 16: {
- {
+ { if (unlikely (!buffer->ensure_unicode ())) return false; }
+ break;
+ case 16:
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 423 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 435 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 7: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 7:
#line 66 "hb-buffer-deserialize-text.rl"
- if (!parse_hex (tok, p, &info.codepoint )) return false; }
-
-#line 445 "hb-buffer-deserialize-text.hh"
-
- {
+ {if (!parse_hex (tok, p, &info.codepoint )) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 457 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 10: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 10:
#line 68 "hb-buffer-deserialize-text.rl"
- if (!parse_uint (tok, p, &info.cluster )) return false; }
-
-#line 467 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 479 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 22: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 22:
#line 70 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.y_offset )) return false; }
-
-#line 489 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 501 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 19: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 19:
#line 71 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.x_advance)) return false; }
-
-#line 511 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 523 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 24: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 24:
#line 72 "hb-buffer-deserialize-text.rl"
- if (!parse_int (tok, p, &pos.y_advance)) return false; }
-
-#line 533 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 545 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 12: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 12:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 558 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 566 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 55 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 572 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 14: {
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
+ break;
+ case 14:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 585 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 593 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 605 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 17: {
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+ break;
+ case 17:
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 621 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
#line 55 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 627 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 639 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 11: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 652 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 660 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 672 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 684 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- case 13: {
- {
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 13:
#line 38 "hb-buffer-deserialize-text.rl"
-
- memset (&info, 0, sizeof (info));
- memset (&pos , 0, sizeof (pos ));
- }
-
-#line 697 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
#line 51 "hb-buffer-deserialize-text.rl"
-
- tok = p;
- }
-
-#line 705 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ tok = p;
+}
#line 58 "hb-buffer-deserialize-text.rl"
-
- /* TODO Unescape delimeters. */
- if (!hb_font_glyph_from_string (font,
- tok, p - tok,
- &info.codepoint))
- return false;
- }
-
-#line 717 "hb-buffer-deserialize-text.hh"
-
- {
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
#line 55 "hb-buffer-deserialize-text.rl"
- if (unlikely (!buffer->ensure_glyphs ())) return false; }
-
-#line 723 "hb-buffer-deserialize-text.hh"
-
- {
+ { if (unlikely (!buffer->ensure_glyphs ())) return false; }
#line 43 "hb-buffer-deserialize-text.rl"
-
- buffer->add_info (info);
- if (unlikely (!buffer->successful))
- return false;
- buffer->pos[buffer->len - 1] = pos;
- *end_ptr = p;
- }
-
-#line 735 "hb-buffer-deserialize-text.hh"
-
-
- break;
- }
- }
-
- }
-
- if ( p == eof ) {
- if ( cs >= 19 )
- goto _out;
- }
- else {
- if ( cs != 0 ) {
- p += 1;
- goto _resume;
- }
- }
- _out: {}
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+#line 722 "hb-buffer-deserialize-text.hh"
}
-
-#line 138 "hb-buffer-deserialize-text.rl"
-
-
+
+_again:
+ if ( cs == 0 )
+ goto _out;
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( _deserialize_text_eof_actions[cs] ) {
+ case 16:
+#line 58 "hb-buffer-deserialize-text.rl"
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 7:
+#line 66 "hb-buffer-deserialize-text.rl"
+ {if (!parse_hex (tok, p, &info.codepoint )) return false; }
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 10:
+#line 68 "hb-buffer-deserialize-text.rl"
+ { if (!parse_uint (tok, p, &info.cluster )) return false; }
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 22:
+#line 70 "hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_offset )) return false; }
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 19:
+#line 71 "hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.x_advance)) return false; }
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 24:
+#line 72 "hb-buffer-deserialize-text.rl"
+ { if (!parse_int (tok, p, &pos.y_advance)) return false; }
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
+ *end_ptr = p;
+}
+ break;
+ case 11:
+#line 38 "hb-buffer-deserialize-text.rl"
+ {
+ memset (&info, 0, sizeof (info));
+ memset (&pos , 0, sizeof (pos ));
+}
+#line 51 "hb-buffer-deserialize-text.rl"
+ {
+ tok = p;
+}
+#line 58 "hb-buffer-deserialize-text.rl"
+ {
+ /* TODO Unescape delimeters. */
+ if (!hb_font_glyph_from_string (font,
+ tok, p - tok,
+ &info.codepoint))
+ return false;
+}
+#line 43 "hb-buffer-deserialize-text.rl"
+ {
+ buffer->add_info (info);
+ if (unlikely (!buffer->successful))
+ return false;
+ buffer->pos[buffer->len - 1] = pos;
*end_ptr = p;
-
- return p == pe && *(p-1) != ']';
+}
+ break;
+#line 839 "hb-buffer-deserialize-text.hh"
+ }
+ }
+
+ _out: {}
+ }
+
+#line 138 "hb-buffer-deserialize-text.rl"
+
+
+ *end_ptr = p;
+
+ return p == pe && *(p-1) != ']';
}
#endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
diff --git a/thirdparty/harfbuzz/src/hb-buffer.cc b/thirdparty/harfbuzz/src/hb-buffer.cc
index 8cad6ab8e6..c6591ca230 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.cc
+++ b/thirdparty/harfbuzz/src/hb-buffer.cc
@@ -96,14 +96,15 @@ hb_segment_properties_hash (const hb_segment_properties_t *p)
* As an optimization, both info and out_info may point to the
* same piece of memory, which is owned by info. This remains the
* case as long as out_len doesn't exceed i at any time.
- * In that case, swap_buffers() is no-op and the glyph operations operate
- * mostly in-place.
+ * In that case, swap_buffers() is mostly no-op and the glyph operations
+ * operate mostly in-place.
*
* As soon as out_info gets longer than info, out_info is moved over
- * to an alternate buffer (which we reuse the pos buffer for!), and its
+ * to an alternate buffer (which we reuse the pos buffer for), and its
* current contents (out_len entries) are copied to the new place.
+ *
* This should all remain transparent to the user. swap_buffers() then
- * switches info and out_info.
+ * switches info over to out_info and does housekeeping.
*/
@@ -136,8 +137,8 @@ hb_buffer_t::enlarge (unsigned int size)
if (unlikely (hb_unsigned_mul_overflows (new_allocated, sizeof (info[0]))))
goto done;
- new_pos = (hb_glyph_position_t *) realloc (pos, new_allocated * sizeof (pos[0]));
- new_info = (hb_glyph_info_t *) realloc (info, new_allocated * sizeof (info[0]));
+ new_pos = (hb_glyph_position_t *) hb_realloc (pos, new_allocated * sizeof (pos[0]));
+ new_info = (hb_glyph_info_t *) hb_realloc (info, new_allocated * sizeof (info[0]));
done:
if (unlikely (!new_pos || !new_info))
@@ -282,21 +283,12 @@ hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info)
void
-hb_buffer_t::remove_output ()
-{
- have_output = false;
- have_positions = false;
-
- out_len = 0;
- out_info = info;
-}
-
-void
hb_buffer_t::clear_output ()
{
have_output = true;
have_positions = false;
+ idx = 0;
out_len = 0;
out_info = info;
}
@@ -316,29 +308,23 @@ hb_buffer_t::clear_positions ()
void
hb_buffer_t::swap_buffers ()
{
- if (unlikely (!successful)) return;
+ assert (have_output);
assert (idx <= len);
- if (unlikely (!next_glyphs (len - idx))) return;
- assert (have_output);
- have_output = false;
+ if (unlikely (!successful || !next_glyphs (len - idx)))
+ goto reset;
if (out_info != info)
{
- hb_glyph_info_t *tmp;
- tmp = info;
+ pos = (hb_glyph_position_t *) info;
info = out_info;
- out_info = tmp;
-
- pos = (hb_glyph_position_t *) out_info;
}
-
- unsigned int tmp;
- tmp = len;
len = out_len;
- out_len = tmp;
+reset:
+ have_output = false;
+ out_len = 0;
idx = 0;
}
@@ -373,12 +359,11 @@ hb_buffer_t::move_to (unsigned int i)
/* This will blow in our face if memory allocation fails later
* in this same lookup...
*
- * We used to shift with extra 32 items, instead of the 0 below.
+ * We used to shift with extra 32 items.
* But that would leave empty slots in the buffer in case of allocation
- * failures. Setting to zero for now to avoid other problems (see
- * comments in shift_forward(). This can cause O(N^2) behavior more
- * severely than adding 32 empty slots can... */
- if (unlikely (idx < count && !shift_forward (count + 0))) return false;
+ * failures. See comments in shift_forward(). This can cause O(N^2)
+ * behavior more severely than adding 32 empty slots can... */
+ if (unlikely (idx < count && !shift_forward (count - idx))) return false;
assert (idx >= count);
@@ -630,7 +615,7 @@ DEFINE_NULL_INSTANCE (hb_buffer_t) =
HB_BUFFER_CONTENT_TYPE_INVALID,
HB_SEGMENT_PROPERTIES_DEFAULT,
false, /* successful */
- true, /* have_output */
+ false, /* have_output */
true /* have_positions */
/* Zero is good enough for everything else. */
@@ -717,14 +702,14 @@ hb_buffer_destroy (hb_buffer_t *buffer)
hb_unicode_funcs_destroy (buffer->unicode);
- free (buffer->info);
- free (buffer->pos);
+ hb_free (buffer->info);
+ hb_free (buffer->pos);
#ifndef HB_NO_BUFFER_MESSAGE
if (buffer->message_destroy)
buffer->message_destroy (buffer->message_data);
#endif
- free (buffer);
+ hb_free (buffer);
}
/**
@@ -1363,6 +1348,11 @@ hb_buffer_get_glyph_infos (hb_buffer_t *buffer,
* Returns @buffer glyph position array. Returned pointer
* is valid as long as @buffer contents are not modified.
*
+ * If buffer did not have positions before, the positions will be
+ * initialized to zeros, unless this function is called from
+ * within a buffer message callback (see hb_buffer_set_message_func()),
+ * in which case %NULL is returned.
+ *
* Return value: (transfer none) (array length=length):
* The @buffer glyph position array.
* The value valid as long as buffer has not been modified.
@@ -1373,12 +1363,17 @@ hb_glyph_position_t *
hb_buffer_get_glyph_positions (hb_buffer_t *buffer,
unsigned int *length)
{
- if (!buffer->have_positions)
- buffer->clear_positions ();
-
if (length)
*length = buffer->len;
+ if (!buffer->have_positions)
+ {
+ if (unlikely (buffer->message_depth))
+ return nullptr;
+
+ buffer->clear_positions ();
+ }
+
return (hb_glyph_position_t *) buffer->pos;
}
@@ -1760,6 +1755,28 @@ hb_buffer_append (hb_buffer_t *buffer,
memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
if (buffer->have_positions)
memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));
+
+ if (source->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE)
+ {
+ /* See similar logic in add_utf. */
+
+ /* pre-context */
+ if (!orig_len && start + source->context_len[0] > 0)
+ {
+ buffer->clear_context (0);
+ while (start > 0 && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
+ buffer->context[0][buffer->context_len[0]++] = source->info[--start].codepoint;
+ for (auto i = 0u; i < source->context_len[0] && buffer->context_len[0] < buffer->CONTEXT_LENGTH; i++)
+ buffer->context[0][buffer->context_len[0]++] = source->context[0][i];
+ }
+
+ /* post-context */
+ buffer->clear_context (1);
+ while (end < source->len && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
+ buffer->context[1][buffer->context_len[1]++] = source->info[end++].codepoint;
+ for (auto i = 0u; i < source->context_len[1] && buffer->context_len[1] < buffer->CONTEXT_LENGTH; i++)
+ buffer->context[1][buffer->context_len[1]++] = source->context[1][i];
+ }
}
diff --git a/thirdparty/harfbuzz/src/hb-buffer.hh b/thirdparty/harfbuzz/src/hb-buffer.hh
index 8b432b5f96..8635ebd35f 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer.hh
@@ -107,7 +107,7 @@ struct hb_buffer_t
unsigned int idx; /* Cursor into ->info and ->pos arrays */
unsigned int len; /* Length of ->info and ->pos arrays */
- unsigned int out_len; /* Length of ->out array if have_output */
+ unsigned int out_len; /* Length of ->out_info array if have_output */
unsigned int allocated; /* Length of allocated arrays */
hb_glyph_info_t *info;
@@ -128,6 +128,9 @@ struct hb_buffer_t
hb_buffer_message_func_t message_func;
void *message_data;
hb_destroy_func_t message_destroy;
+ unsigned message_depth; /* How deeply are we inside a message callback? */
+#else
+ static constexpr unsigned message_depth = 0u;
#endif
/* Internal debugging. */
@@ -186,13 +189,10 @@ struct hb_buffer_t
hb_glyph_info_t &prev () { return out_info[out_len ? out_len - 1 : 0]; }
hb_glyph_info_t prev () const { return out_info[out_len ? out_len - 1 : 0]; }
- HB_NODISCARD bool has_separate_output () const { return info != out_info; }
-
-
HB_INTERNAL void reset ();
HB_INTERNAL void clear ();
- unsigned int backtrack_len () const { return have_output? out_len : idx; }
+ unsigned int backtrack_len () const { return have_output ? out_len : idx; }
unsigned int lookahead_len () const { return len - idx; }
unsigned int next_serial () { return serial++; }
@@ -206,7 +206,6 @@ struct hb_buffer_t
HB_INTERNAL void guess_segment_properties ();
HB_INTERNAL void swap_buffers ();
- HB_INTERNAL void remove_output ();
HB_INTERNAL void clear_output ();
HB_INTERNAL void clear_positions ();
@@ -400,10 +399,16 @@ struct hb_buffer_t
#else
if (!messaging ())
return true;
+
+ message_depth++;
+
va_list ap;
va_start (ap, fmt);
bool ret = message_impl (font, fmt, ap);
va_end (ap);
+
+ message_depth--;
+
return ret;
#endif
}
diff --git a/thirdparty/harfbuzz/src/hb-cache.hh b/thirdparty/harfbuzz/src/hb-cache.hh
index bf26d96be4..e617b75de9 100644
--- a/thirdparty/harfbuzz/src/hb-cache.hh
+++ b/thirdparty/harfbuzz/src/hb-cache.hh
@@ -30,7 +30,7 @@
#include "hb.hh"
-/* Implements a lock-free cache for int->int functions. */
+/* Implements a lockfree cache for int->int functions. */
template <unsigned int key_bits, unsigned int value_bits, unsigned int cache_bits>
struct hb_cache_t
diff --git a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
index 91a9b7d0d1..c251e2d0ed 100644
--- a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
+++ b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
@@ -263,7 +263,7 @@ struct UnsizedByteStr : UnsizedArrayOf <HBUINT8>
T *ip = c->allocate_size<T> (T::static_size);
if (unlikely (!ip)) return_trace (false);
- return_trace (c->check_assign (*ip, value));
+ return_trace (c->check_assign (*ip, value, HB_SERIALIZE_ERROR_INT_OVERFLOW));
}
template <typename V>
diff --git a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
index 332ece31cd..d961566447 100644
--- a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
+++ b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
@@ -136,8 +136,8 @@ struct cff2_cs_interp_env_t : cs_interp_env_t<blend_arg_t, CFF2Subrs>
if (unlikely (!scalars.resize (region_count)))
set_error ();
else
- varStore->varStore.get_scalars (get_ivs (), coords, num_coords,
- &scalars[0], region_count);
+ varStore->varStore.get_region_scalars (get_ivs (), coords, num_coords,
+ &scalars[0], region_count);
}
seen_blend = true;
}
diff --git a/thirdparty/harfbuzz/src/hb-common.cc b/thirdparty/harfbuzz/src/hb-common.cc
index 7bb878b217..26c8ad0f49 100644
--- a/thirdparty/harfbuzz/src/hb-common.cc
+++ b/thirdparty/harfbuzz/src/hb-common.cc
@@ -257,13 +257,11 @@ struct hb_language_item_t {
bool operator == (const char *s) const
{ return lang_equal (lang, s); }
- hb_language_item_t & operator = (const char *s) {
- /* If a custom allocated is used calling strdup() pairs
- badly with a call to the custom free() in fini() below.
- Therefore don't call strdup(), implement its behavior.
- */
+ hb_language_item_t & operator = (const char *s)
+ {
+ /* We can't call strdup(), because we allow custom allocators. */
size_t len = strlen(s) + 1;
- lang = (hb_language_t) malloc(len);
+ lang = (hb_language_t) hb_malloc(len);
if (likely (lang))
{
memcpy((unsigned char *) lang, s, len);
@@ -274,16 +272,15 @@ struct hb_language_item_t {
return *this;
}
- void fini () { free ((void *) lang); }
+ void fini () { hb_free ((void *) lang); }
};
-/* Thread-safe lock-free language list */
+/* Thread-safe lockfree language list */
static hb_atomic_ptr_t <hb_language_item_t> langs;
-#if HB_USE_ATEXIT
-static void
+static inline void
free_langs ()
{
retry:
@@ -294,11 +291,10 @@ retry:
while (first_lang) {
hb_language_item_t *next = first_lang->next;
first_lang->fini ();
- free (first_lang);
+ hb_free (first_lang);
first_lang = next;
}
}
-#endif
static hb_language_item_t *
lang_find_or_insert (const char *key)
@@ -311,28 +307,26 @@ retry:
return lang;
/* Not found; allocate one. */
- hb_language_item_t *lang = (hb_language_item_t *) calloc (1, sizeof (hb_language_item_t));
+ hb_language_item_t *lang = (hb_language_item_t *) hb_calloc (1, sizeof (hb_language_item_t));
if (unlikely (!lang))
return nullptr;
lang->next = first_lang;
*lang = key;
if (unlikely (!lang->lang))
{
- free (lang);
+ hb_free (lang);
return nullptr;
}
if (unlikely (!langs.cmpexch (first_lang, lang)))
{
lang->fini ();
- free (lang);
+ hb_free (lang);
goto retry;
}
-#if HB_USE_ATEXIT
if (!first_lang)
- atexit (free_langs); /* First person registers atexit() callback. */
-#endif
+ hb_atexit (free_langs); /* First person registers atexit() callback. */
return lang;
}
@@ -601,6 +595,9 @@ hb_script_get_horizontal_direction (hb_script_t script)
case HB_SCRIPT_CHORASMIAN:
case HB_SCRIPT_YEZIDI:
+ /* Unicode-14.0 additions */
+ case HB_SCRIPT_OLD_UYGHUR:
+
return HB_DIRECTION_RTL;
diff --git a/thirdparty/harfbuzz/src/hb-common.h b/thirdparty/harfbuzz/src/hb-common.h
index 532fd428cb..0384117a4d 100644
--- a/thirdparty/harfbuzz/src/hb-common.h
+++ b/thirdparty/harfbuzz/src/hb-common.h
@@ -476,6 +476,11 @@ hb_language_get_default (void);
* @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7
* @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7
* @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7
+ * @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0
+ * @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0
+ * @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0
+ * @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0
+ * @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0
* @HB_SCRIPT_INVALID: No script set
*
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
@@ -683,6 +688,15 @@ typedef enum
HB_SCRIPT_KHITAN_SMALL_SCRIPT = HB_TAG ('K','i','t','s'), /*13.0*/
HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), /*13.0*/
+ /*
+ * Since 3.0.0
+ */
+ HB_SCRIPT_CYPRO_MINOAN = HB_TAG ('C','p','m','n'), /*14.0*/
+ HB_SCRIPT_OLD_UYGHUR = HB_TAG ('O','u','g','r'), /*14.0*/
+ HB_SCRIPT_TANGSA = HB_TAG ('T','n','s','a'), /*14.0*/
+ HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/
+ HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/
+
/* No script set. */
HB_SCRIPT_INVALID = HB_TAG_NONE,
diff --git a/thirdparty/harfbuzz/src/hb-config.hh b/thirdparty/harfbuzz/src/hb-config.hh
index fc8d424bfb..ad800f0f74 100644
--- a/thirdparty/harfbuzz/src/hb-config.hh
+++ b/thirdparty/harfbuzz/src/hb-config.hh
@@ -86,6 +86,9 @@
#define HB_NO_LEGACY
#endif
+#ifdef HAVE_CONFIG_OVERRIDE_H
+#include "config-override.h"
+#endif
/* Closure of options. */
@@ -117,7 +120,7 @@
#define HB_NO_CMAP_LEGACY_SUBTABLES
#define HB_NO_FALLBACK_SHAPE
#define HB_NO_OT_KERN
-#define HB_NO_OT_LAYOUT_BLACKLIST
+#define HB_NO_OT_LAYOUT_BLOCKLIST
#define HB_NO_OT_SHAPE_FALLBACK
#endif
@@ -155,9 +158,5 @@
#endif
#endif
-#ifdef HAVE_CONFIG_OVERRIDE_H
-#include "config-override.h"
-#endif
-
#endif /* HB_CONFIG_HH */
diff --git a/thirdparty/harfbuzz/src/hb-coretext.cc b/thirdparty/harfbuzz/src/hb-coretext.cc
index 461bd20e65..4b6c67c1ee 100644
--- a/thirdparty/harfbuzz/src/hb-coretext.cc
+++ b/thirdparty/harfbuzz/src/hb-coretext.cc
@@ -332,6 +332,44 @@ _hb_coretext_shaper_font_data_create (hb_font_t *font)
return nullptr;
}
+ if (font->coords)
+ {
+ CFMutableDictionaryRef variations =
+ CFDictionaryCreateMutable (kCFAllocatorDefault,
+ font->num_coords,
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks);
+
+ for (unsigned i = 0; i < font->num_coords; i++)
+ {
+ if (font->coords[i] == 0.) continue;
+
+ hb_ot_var_axis_info_t info;
+ unsigned int c = 1;
+ hb_ot_var_get_axis_infos (font->face, i, &c, &info);
+ CFDictionarySetValue (variations,
+ CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &info.tag),
+ CFNumberCreate (kCFAllocatorDefault, kCFNumberFloatType, &font->design_coords[i])
+ );
+ }
+
+ CFDictionaryRef attributes =
+ CFDictionaryCreate (kCFAllocatorDefault,
+ (const void **) &kCTFontVariationAttribute,
+ (const void **) &variations,
+ 1,
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks);
+
+ CTFontDescriptorRef varDesc = CTFontDescriptorCreateWithAttributes (attributes);
+ CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0, nullptr, varDesc);
+
+ CFRelease (ct_font);
+ CFRelease (attributes);
+ CFRelease (variations);
+ ct_font = new_ct_font;
+ }
+
return (hb_coretext_font_data_t *) ct_font;
}
@@ -1061,7 +1099,7 @@ resize_and_retry:
hb_glyph_info_t *info = run_info;
if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
{
- hb_position_t x_offset = (positions[0].x - advances_so_far) * x_mult;
+ hb_position_t x_offset = round ((positions[0].x - advances_so_far) * x_mult);
for (unsigned int j = 0; j < num_glyphs; j++)
{
CGFloat advance;
@@ -1069,15 +1107,15 @@ resize_and_retry:
advance = positions[j + 1].x - positions[j].x;
else /* last glyph */
advance = run_advance - (positions[j].x - positions[0].x);
- info->mask = advance * x_mult;
+ info->mask = round (advance * x_mult);
info->var1.i32 = x_offset;
- info->var2.i32 = positions[j].y * y_mult;
+ info->var2.i32 = round (positions[j].y * y_mult);
info++;
}
}
else
{
- hb_position_t y_offset = (positions[0].y - advances_so_far) * y_mult;
+ hb_position_t y_offset = round ((positions[0].y - advances_so_far) * y_mult);
for (unsigned int j = 0; j < num_glyphs; j++)
{
CGFloat advance;
@@ -1085,8 +1123,8 @@ resize_and_retry:
advance = positions[j + 1].y - positions[j].y;
else /* last glyph */
advance = run_advance - (positions[j].y - positions[0].y);
- info->mask = advance * y_mult;
- info->var1.i32 = positions[j].x * x_mult;
+ info->mask = round (advance * y_mult);
+ info->var1.i32 = round (positions[j].x * x_mult);
info->var2.i32 = y_offset;
info++;
}
diff --git a/thirdparty/harfbuzz/src/hb-debug.hh b/thirdparty/harfbuzz/src/hb-debug.hh
index ec3a1ff211..f80c8980ba 100644
--- a/thirdparty/harfbuzz/src/hb-debug.hh
+++ b/thirdparty/harfbuzz/src/hb-debug.hh
@@ -307,7 +307,7 @@ struct hb_auto_trace_t
_hb_debug_msg<max_level> (what, obj, func, true, plevel ? *plevel : 1, -1,
"return %s (line %d)",
- hb_printer_t<decltype (v)>().print (v), line);
+ hb_printer_t<hb_decay<decltype (v)>>().print (v), line);
if (plevel) --*plevel;
plevel = nullptr;
returned = true;
@@ -438,6 +438,10 @@ struct hb_no_trace_t {
#define TRACE_SUBSET(this) hb_no_trace_t<bool> trace
#endif
+#ifndef HB_DEBUG_SUBSET_REPACK
+#define HB_DEBUG_SUBSET_REPACK (HB_DEBUG+0)
+#endif
+
#ifndef HB_DEBUG_DISPATCH
#define HB_DEBUG_DISPATCH ( \
HB_DEBUG_APPLY + \
diff --git a/thirdparty/harfbuzz/src/hb-deprecated.h b/thirdparty/harfbuzz/src/hb-deprecated.h
index 5f19125789..a130d77f77 100644
--- a/thirdparty/harfbuzz/src/hb-deprecated.h
+++ b/thirdparty/harfbuzz/src/hb-deprecated.h
@@ -107,9 +107,6 @@ hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
hb_font_get_glyph_func_t func,
void *user_data, hb_destroy_func_t destroy);
-HB_EXTERN HB_DEPRECATED void
-hb_set_invert (hb_set_t *set);
-
/**
* hb_unicode_eastasian_width_func_t:
* @ufuncs: A Unicode-functions structure
diff --git a/thirdparty/harfbuzz/src/hb-directwrite.cc b/thirdparty/harfbuzz/src/hb-directwrite.cc
index a07302159c..8f6d73b639 100644
--- a/thirdparty/harfbuzz/src/hb-directwrite.cc
+++ b/thirdparty/harfbuzz/src/hb-directwrite.cc
@@ -32,6 +32,7 @@
#include "hb-directwrite.h"
+#include "hb-ms-feature-ranges.hh"
/**
* SECTION:hb-directwrite
@@ -42,24 +43,6 @@
* Functions for using HarfBuzz with DirectWrite fonts.
**/
-/* Declare object creator for dynamic support of DWRITE */
-typedef HRESULT (* WINAPI t_DWriteCreateFactory)(
- DWRITE_FACTORY_TYPE factoryType,
- REFIID iid,
- IUnknown **factory
-);
-
-/*
- * hb-directwrite uses new/delete syntatically but as we let users
- * to override malloc/free, we will redefine new/delete so users
- * won't need to do that by their own.
- */
-void* operator new (size_t size) { return malloc (size); }
-void* operator new [] (size_t size) { return malloc (size); }
-void operator delete (void* pointer) { free (pointer); }
-void operator delete [] (void* pointer) { free (pointer); }
-
-
/*
* DirectWrite font stream helpers
*/
@@ -154,7 +137,6 @@ public:
struct hb_directwrite_face_data_t
{
- HMODULE dwrite_dll;
IDWriteFactory *dwriteFactory;
IDWriteFontFile *fontFile;
DWriteFontFileStream *fontFileStream;
@@ -176,33 +158,12 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
return nullptr; \
} HB_STMT_END
- data->dwrite_dll = LoadLibrary (TEXT ("DWRITE"));
- if (unlikely (!data->dwrite_dll))
- FAIL ("Cannot find DWrite.DLL");
-
- t_DWriteCreateFactory p_DWriteCreateFactory;
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wcast-function-type"
-#endif
-
- p_DWriteCreateFactory = (t_DWriteCreateFactory)
- GetProcAddress (data->dwrite_dll, "DWriteCreateFactory");
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
- if (unlikely (!p_DWriteCreateFactory))
- FAIL ("Cannot find DWriteCreateFactory().");
-
HRESULT hr;
// TODO: factory and fontFileLoader should be cached separately
IDWriteFactory* dwriteFactory;
- hr = p_DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory),
- (IUnknown**) &dwriteFactory);
+ hr = DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory),
+ (IUnknown**) &dwriteFactory);
if (unlikely (hr != S_OK))
FAIL ("Failed to run DWriteCreateFactory().");
@@ -266,8 +227,6 @@ _hb_directwrite_shaper_face_data_destroy (hb_directwrite_face_data_t *data)
delete data->fontFileStream;
if (data->faceBlob)
hb_blob_destroy (data->faceBlob);
- if (data->dwrite_dll)
- FreeLibrary (data->dwrite_dll);
if (data)
delete data;
}
@@ -552,13 +511,12 @@ protected:
* shaper
*/
-static hb_bool_t
-_hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
- hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- float lineWidth)
+hb_bool_t
+_hb_directwrite_shape (hb_shape_plan_t *shape_plan,
+ hb_font_t *font,
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features)
{
hb_face_t *face = font->face;
const hb_directwrite_face_data_t *face_data = face->data.directwrite;
@@ -611,8 +569,6 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
log_clusters[chars_len++] = cluster; /* Surrogates. */
}
- // TODO: Handle TEST_DISABLE_OPTIONAL_LIGATURES
-
DWRITE_READING_DIRECTION readingDirection;
readingDirection = buffer->props.direction ?
DWRITE_READING_DIRECTION_RIGHT_TO_LEFT :
@@ -623,7 +579,7 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
* but we never attempt to shape a word longer than 64K characters
* in a single gfxShapedWord, so we cannot exceed that limit.
*/
- uint32_t textLength = buffer->len;
+ uint32_t textLength = chars_len;
TextAnalysis analysis (textString, textLength, nullptr, readingDirection);
TextAnalysis::Run *runHead;
@@ -648,38 +604,54 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan,
mbstowcs ((wchar_t*) localeName,
hb_language_to_string (buffer->props.language), 20);
- // TODO: it does work but doesn't care about ranges
- DWRITE_TYPOGRAPHIC_FEATURES typographic_features;
- typographic_features.featureCount = num_features;
+ /*
+ * Set up features.
+ */
+ static_assert ((sizeof (DWRITE_TYPOGRAPHIC_FEATURES) == sizeof (hb_ms_features_t)), "");
+ static_assert ((sizeof (DWRITE_FONT_FEATURE) == sizeof (hb_ms_feature_t)), "");
+ hb_vector_t<hb_ms_features_t *> range_features;
+ hb_vector_t<uint32_t> range_char_counts;
if (num_features)
{
- typographic_features.features = new DWRITE_FONT_FEATURE[num_features];
- for (unsigned int i = 0; i < num_features; ++i)
- {
- typographic_features.features[i].nameTag = (DWRITE_FONT_FEATURE_TAG)
- hb_uint32_swap (features[i].tag);
- typographic_features.features[i].parameter = features[i].value;
- }
+ hb_vector_t<hb_ms_feature_t> feature_records;
+ hb_vector_t<hb_ms_range_record_t> range_records;
+ if (hb_ms_setup_features (features, num_features, feature_records, range_records))
+ hb_ms_make_feature_ranges (feature_records,
+ range_records,
+ 0,
+ chars_len,
+ log_clusters,
+ range_features,
+ range_char_counts);
}
- const DWRITE_TYPOGRAPHIC_FEATURES* dwFeatures;
- dwFeatures = (const DWRITE_TYPOGRAPHIC_FEATURES*) &typographic_features;
- const uint32_t featureRangeLengths[] = { textLength };
- //
uint16_t* clusterMap;
clusterMap = new uint16_t[textLength];
DWRITE_SHAPING_TEXT_PROPERTIES* textProperties;
textProperties = new DWRITE_SHAPING_TEXT_PROPERTIES[textLength];
+
retry_getglyphs:
uint16_t* glyphIndices = new uint16_t[maxGlyphCount];
DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties;
glyphProperties = new DWRITE_SHAPING_GLYPH_PROPERTIES[maxGlyphCount];
- hr = analyzer->GetGlyphs (textString, textLength, fontFace, false,
- isRightToLeft, &runHead->mScript, localeName,
- nullptr, &dwFeatures, featureRangeLengths, 1,
- maxGlyphCount, clusterMap, textProperties,
- glyphIndices, glyphProperties, &glyphCount);
+ hr = analyzer->GetGlyphs (textString,
+ chars_len,
+ fontFace,
+ false,
+ isRightToLeft,
+ &runHead->mScript,
+ localeName,
+ nullptr,
+ (const DWRITE_TYPOGRAPHIC_FEATURES**) range_features.arrayZ,
+ range_char_counts.arrayZ,
+ range_features.length,
+ maxGlyphCount,
+ clusterMap,
+ textProperties,
+ glyphIndices,
+ glyphProperties,
+ &glyphCount);
if (unlikely (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)))
{
@@ -715,101 +687,28 @@ retry_getglyphs:
double x_mult = (double) font->x_scale / fontEmSize;
double y_mult = (double) font->y_scale / fontEmSize;
- hr = analyzer->GetGlyphPlacements (textString, clusterMap, textProperties,
- textLength, glyphIndices, glyphProperties,
- glyphCount, fontFace, fontEmSize,
- false, isRightToLeft, &runHead->mScript, localeName,
- &dwFeatures, featureRangeLengths, 1,
- glyphAdvances, glyphOffsets);
+ hr = analyzer->GetGlyphPlacements (textString,
+ clusterMap,
+ textProperties,
+ chars_len,
+ glyphIndices,
+ glyphProperties,
+ glyphCount,
+ fontFace,
+ fontEmSize,
+ false,
+ isRightToLeft,
+ &runHead->mScript,
+ localeName,
+ (const DWRITE_TYPOGRAPHIC_FEATURES**) range_features.arrayZ,
+ range_char_counts.arrayZ,
+ range_features.length,
+ glyphAdvances,
+ glyphOffsets);
if (FAILED (hr))
FAIL ("Analyzer failed to get glyph placements.");
- IDWriteTextAnalyzer1* analyzer1;
- analyzer->QueryInterface (&analyzer1);
-
- if (analyzer1 && lineWidth)
- {
- DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities =
- new DWRITE_JUSTIFICATION_OPPORTUNITY[maxGlyphCount];
- hr = analyzer1->GetJustificationOpportunities (fontFace, fontEmSize, runHead->mScript,
- textLength, glyphCount, textString,
- clusterMap, glyphProperties,
- justificationOpportunities);
-
- if (FAILED (hr))
- FAIL ("Analyzer failed to get justification opportunities.");
-
- float* justifiedGlyphAdvances = new float[maxGlyphCount];
- DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[glyphCount];
- hr = analyzer1->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities,
- glyphAdvances, glyphOffsets, justifiedGlyphAdvances,
- justifiedGlyphOffsets);
-
- if (FAILED (hr)) FAIL ("Analyzer failed to get justify glyph advances.");
-
- DWRITE_SCRIPT_PROPERTIES scriptProperties;
- hr = analyzer1->GetScriptProperties (runHead->mScript, &scriptProperties);
- if (FAILED (hr)) FAIL ("Analyzer failed to get script properties.");
- uint32_t justificationCharacter = scriptProperties.justificationCharacter;
-
- // if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
- if (justificationCharacter != 32)
- {
- uint16_t* modifiedClusterMap = new uint16_t[textLength];
- retry_getjustifiedglyphs:
- uint16_t* modifiedGlyphIndices = new uint16_t[maxGlyphCount];
- float* modifiedGlyphAdvances = new float[maxGlyphCount];
- DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[maxGlyphCount];
- uint32_t actualGlyphsCount;
- hr = analyzer1->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript,
- textLength, glyphCount, maxGlyphCount,
- clusterMap, glyphIndices, glyphAdvances,
- justifiedGlyphAdvances, justifiedGlyphOffsets,
- glyphProperties, &actualGlyphsCount,
- modifiedClusterMap, modifiedGlyphIndices,
- modifiedGlyphAdvances, modifiedGlyphOffsets);
-
- if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))
- {
- maxGlyphCount = actualGlyphsCount;
- delete [] modifiedGlyphIndices;
- delete [] modifiedGlyphAdvances;
- delete [] modifiedGlyphOffsets;
-
- maxGlyphCount = actualGlyphsCount;
-
- goto retry_getjustifiedglyphs;
- }
- if (FAILED (hr))
- FAIL ("Analyzer failed to get justified glyphs.");
-
- delete [] clusterMap;
- delete [] glyphIndices;
- delete [] glyphAdvances;
- delete [] glyphOffsets;
-
- glyphCount = actualGlyphsCount;
- clusterMap = modifiedClusterMap;
- glyphIndices = modifiedGlyphIndices;
- glyphAdvances = modifiedGlyphAdvances;
- glyphOffsets = modifiedGlyphOffsets;
-
- delete [] justifiedGlyphAdvances;
- delete [] justifiedGlyphOffsets;
- }
- else
- {
- delete [] glyphAdvances;
- delete [] glyphOffsets;
-
- glyphAdvances = justifiedGlyphAdvances;
- glyphOffsets = justifiedGlyphOffsets;
- }
-
- delete [] justificationOpportunities;
- }
-
/* Ok, we've got everything we need, now compose output buffer,
* very, *very*, carefully! */
@@ -870,43 +769,10 @@ retry_getglyphs:
delete [] glyphAdvances;
delete [] glyphOffsets;
- if (num_features)
- delete [] typographic_features.features;
-
/* Wow, done! */
return true;
}
-hb_bool_t
-_hb_directwrite_shape (hb_shape_plan_t *shape_plan,
- hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features)
-{
- return _hb_directwrite_shape_full (shape_plan, font, buffer,
- features, num_features, 0);
-}
-
-HB_UNUSED static bool
-_hb_directwrite_shape_experimental_width (hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- float width)
-{
- static const char *shapers = "directwrite";
- hb_shape_plan_t *shape_plan;
- shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
- features, num_features, &shapers);
- hb_bool_t res = _hb_directwrite_shape_full (shape_plan, font, buffer,
- features, num_features, width);
-
- buffer->unsafe_to_break_all ();
-
- return res;
-}
-
struct _hb_directwrite_font_table_context {
IDWriteFontFace *face;
void *table_context;
@@ -917,7 +783,7 @@ _hb_directwrite_table_data_release (void *data)
{
_hb_directwrite_font_table_context *context = (_hb_directwrite_font_table_context *) data;
context->face->ReleaseFontTable (context->table_context);
- delete context;
+ hb_free (context);
}
static hb_blob_t *
@@ -938,7 +804,7 @@ _hb_directwrite_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *
return nullptr;
}
- _hb_directwrite_font_table_context *context = new _hb_directwrite_font_table_context;
+ _hb_directwrite_font_table_context *context = (_hb_directwrite_font_table_context *) hb_malloc (sizeof (_hb_directwrite_font_table_context));
context->face = dw_face;
context->table_context = table_context;
diff --git a/thirdparty/harfbuzz/src/hb-draw.cc b/thirdparty/harfbuzz/src/hb-draw.cc
index 1a5f9c8c6b..c0af6ce013 100644
--- a/thirdparty/harfbuzz/src/hb-draw.cc
+++ b/thirdparty/harfbuzz/src/hb-draw.cc
@@ -191,7 +191,7 @@ hb_draw_funcs_destroy (hb_draw_funcs_t *funcs)
{
if (!hb_object_destroy (funcs)) return;
- free (funcs);
+ hb_free (funcs);
}
/**
diff --git a/thirdparty/harfbuzz/src/hb-face.cc b/thirdparty/harfbuzz/src/hb-face.cc
index 61bd4af7b1..2c0087370c 100644
--- a/thirdparty/harfbuzz/src/hb-face.cc
+++ b/thirdparty/harfbuzz/src/hb-face.cc
@@ -33,6 +33,7 @@
#include "hb-open-file.hh"
#include "hb-ot-face.hh"
#include "hb-ot-cmap-table.hh"
+#include "hb-map.hh"
/**
@@ -106,9 +107,9 @@ DEFINE_NULL_INSTANCE (hb_face_t) =
* convenient to provide data for individual tables instead of the whole font
* data. With the caveat that hb_face_get_table_tags() does not currently work
* with faces created this way.
- *
+ *
* Creates a new face object from the specified @user_data and @reference_table_func,
- * with the @destroy callback.
+ * with the @destroy callback.
*
* Return value: (transfer full): The new face object
*
@@ -150,7 +151,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
{
hb_face_for_data_closure_t *closure;
- closure = (hb_face_for_data_closure_t *) calloc (1, sizeof (hb_face_for_data_closure_t));
+ closure = (hb_face_for_data_closure_t *) hb_calloc (1, sizeof (hb_face_for_data_closure_t));
if (unlikely (!closure))
return nullptr;
@@ -166,7 +167,7 @@ _hb_face_for_data_closure_destroy (void *data)
hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data;
hb_blob_destroy (closure->blob);
- free (closure);
+ hb_free (closure);
}
static hb_blob_t *
@@ -265,7 +266,7 @@ hb_face_reference (hb_face_t *face)
/**
* hb_face_destroy: (skip)
* @face: A face object
- *
+ *
* Decreases the reference count on a face object. When the
* reference count reaches zero, the face is destroyed,
* freeing all memory.
@@ -281,7 +282,7 @@ hb_face_destroy (hb_face_t *face)
{
hb_face_t::plan_node_t *next = node->next;
hb_shape_plan_destroy (node->shape_plan);
- free (node);
+ hb_free (node);
node = next;
}
@@ -291,7 +292,7 @@ hb_face_destroy (hb_face_t *face)
if (face->destroy)
face->destroy (face->user_data);
- free (face);
+ hb_free (face);
}
/**
@@ -302,7 +303,7 @@ hb_face_destroy (hb_face_t *face)
* @destroy: (nullable): A callback to call when @data is not needed anymore
* @replace: Whether to replace an existing data with the same key
*
- * Attaches a user-data key/data pair to the given face object.
+ * Attaches a user-data key/data pair to the given face object.
*
* Return value: %true if success, %false otherwise
*
@@ -441,7 +442,7 @@ hb_face_set_index (hb_face_t *face,
*
* <note>Note: face indices within a collection are zero-based.</note>
*
- * Return value: The index of @face.
+ * Return value: The index of @face.
*
* Since: 0.9.2
**/
@@ -623,26 +624,26 @@ hb_face_collect_variation_unicodes (hb_face_t *face,
struct hb_face_builder_data_t
{
- struct table_entry_t
- {
- int cmp (hb_tag_t t) const
- {
- if (t < tag) return -1;
- if (t > tag) return -1;
- return 0;
- }
-
- hb_tag_t tag;
- hb_blob_t *blob;
- };
-
- hb_vector_t<table_entry_t> tables;
+ hb_hashmap_t<hb_tag_t, hb_blob_t *> tables;
};
+static int compare_entries (const void* pa, const void* pb)
+{
+ const auto& a = * (const hb_pair_t<hb_tag_t, hb_blob_t*> *) pa;
+ const auto& b = * (const hb_pair_t<hb_tag_t, hb_blob_t*> *) pb;
+
+ /* Order by blob size first (smallest to largest) and then table tag */
+
+ if (a.second->length != b.second->length)
+ return a.second->length < b.second->length ? -1 : +1;
+
+ return a.first < b.first ? -1 : a.first == b.first ? 0 : +1;
+}
+
static hb_face_builder_data_t *
_hb_face_builder_data_create ()
{
- hb_face_builder_data_t *data = (hb_face_builder_data_t *) calloc (1, sizeof (hb_face_builder_data_t));
+ hb_face_builder_data_t *data = (hb_face_builder_data_t *) hb_calloc (1, sizeof (hb_face_builder_data_t));
if (unlikely (!data))
return nullptr;
@@ -656,25 +657,25 @@ _hb_face_builder_data_destroy (void *user_data)
{
hb_face_builder_data_t *data = (hb_face_builder_data_t *) user_data;
- for (unsigned int i = 0; i < data->tables.length; i++)
- hb_blob_destroy (data->tables[i].blob);
+ for (hb_blob_t* b : data->tables.values())
+ hb_blob_destroy (b);
data->tables.fini ();
- free (data);
+ hb_free (data);
}
static hb_blob_t *
_hb_face_builder_data_reference_blob (hb_face_builder_data_t *data)
{
- unsigned int table_count = data->tables.length;
+ unsigned int table_count = data->tables.get_population ();
unsigned int face_length = table_count * 16 + 12;
- for (unsigned int i = 0; i < table_count; i++)
- face_length += hb_ceil_to_4 (hb_blob_get_length (data->tables[i].blob));
+ for (hb_blob_t* b : data->tables.values())
+ face_length += hb_ceil_to_4 (hb_blob_get_length (b));
- char *buf = (char *) malloc (face_length);
+ char *buf = (char *) hb_malloc (face_length);
if (unlikely (!buf))
return nullptr;
@@ -682,20 +683,31 @@ _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data)
c.propagate_error (data->tables);
OT::OpenTypeFontFile *f = c.start_serialize<OT::OpenTypeFontFile> ();
- bool is_cff = data->tables.lsearch (HB_TAG ('C','F','F',' ')) || data->tables.lsearch (HB_TAG ('C','F','F','2'));
+ bool is_cff = (data->tables.has (HB_TAG ('C','F','F',' '))
+ || data->tables.has (HB_TAG ('C','F','F','2')));
hb_tag_t sfnt_tag = is_cff ? OT::OpenTypeFontFile::CFFTag : OT::OpenTypeFontFile::TrueTypeTag;
- bool ret = f->serialize_single (&c, sfnt_tag, data->tables.as_array ());
+ // Sort the tags so that produced face is deterministic.
+ hb_vector_t<hb_pair_t <hb_tag_t, hb_blob_t*>> sorted_entries;
+ data->tables.iter () | hb_sink (sorted_entries);
+ if (unlikely (sorted_entries.in_error ()))
+ {
+ hb_free (buf);
+ return nullptr;
+ }
+
+ sorted_entries.qsort (compare_entries);
+ bool ret = f->serialize_single (&c, sfnt_tag, + sorted_entries.iter());
c.end_serialize ();
if (unlikely (!ret))
{
- free (buf);
+ hb_free (buf);
return nullptr;
}
- return hb_blob_create (buf, face_length, HB_MEMORY_MODE_WRITABLE, buf, free);
+ return hb_blob_create (buf, face_length, HB_MEMORY_MODE_WRITABLE, buf, hb_free);
}
static hb_blob_t *
@@ -706,11 +718,7 @@ _hb_face_builder_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
if (!tag)
return _hb_face_builder_data_reference_blob (data);
- hb_face_builder_data_t::table_entry_t *entry = data->tables.lsearch (tag);
- if (entry)
- return hb_blob_reference (entry->blob);
-
- return nullptr;
+ return hb_blob_reference (data->tables[tag]);
}
@@ -750,17 +758,21 @@ hb_face_builder_create ()
hb_bool_t
hb_face_builder_add_table (hb_face_t *face, hb_tag_t tag, hb_blob_t *blob)
{
+ if (tag == HB_MAP_VALUE_INVALID)
+ return false;
+
if (unlikely (face->destroy != (hb_destroy_func_t) _hb_face_builder_data_destroy))
return false;
hb_face_builder_data_t *data = (hb_face_builder_data_t *) face->user_data;
- hb_face_builder_data_t::table_entry_t *entry = data->tables.push ();
- if (unlikely (data->tables.in_error()))
+ hb_blob_t* previous = data->tables.get (tag);
+ if (!data->tables.set (tag, hb_blob_reference (blob)))
+ {
+ hb_blob_destroy (blob);
return false;
+ }
- entry->tag = tag;
- entry->blob = hb_blob_reference (blob);
-
+ hb_blob_destroy (previous);
return true;
}
diff --git a/thirdparty/harfbuzz/src/hb-font.cc b/thirdparty/harfbuzz/src/hb-font.cc
index 37a0e7fe85..fa8da96395 100644
--- a/thirdparty/harfbuzz/src/hb-font.cc
+++ b/thirdparty/harfbuzz/src/hb-font.cc
@@ -620,7 +620,7 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
- free (ffuncs);
+ hb_free (ffuncs);
}
/**
@@ -1544,8 +1544,8 @@ _hb_font_adopt_var_coords (hb_font_t *font,
float *design_coords,
unsigned int coords_length)
{
- free (font->coords);
- free (font->design_coords);
+ hb_free (font->coords);
+ hb_free (font->design_coords);
font->coords = coords;
font->design_coords = design_coords;
@@ -1586,8 +1586,8 @@ hb_font_create_sub_font (hb_font_t *parent)
unsigned int num_coords = parent->num_coords;
if (num_coords)
{
- int *coords = (int *) calloc (num_coords, sizeof (parent->coords[0]));
- float *design_coords = (float *) calloc (num_coords, sizeof (parent->design_coords[0]));
+ int *coords = (int *) hb_calloc (num_coords, sizeof (parent->coords[0]));
+ float *design_coords = (float *) hb_calloc (num_coords, sizeof (parent->design_coords[0]));
if (likely (coords && design_coords))
{
memcpy (coords, parent->coords, num_coords * sizeof (parent->coords[0]));
@@ -1596,8 +1596,8 @@ hb_font_create_sub_font (hb_font_t *parent)
}
else
{
- free (coords);
- free (design_coords);
+ hb_free (coords);
+ hb_free (design_coords);
}
}
@@ -1659,10 +1659,10 @@ hb_font_destroy (hb_font_t *font)
hb_face_destroy (font->face);
hb_font_funcs_destroy (font->klass);
- free (font->coords);
- free (font->design_coords);
+ hb_free (font->coords);
+ hb_free (font->design_coords);
- free (font);
+ hb_free (font);
}
/**
@@ -2052,29 +2052,30 @@ hb_font_set_variations (hb_font_t *font,
return;
}
- unsigned int coords_length = hb_ot_var_get_axis_count (font->face);
+ const OT::fvar &fvar = *font->face->table.fvar;
+ auto axes = fvar.get_axes ();
+ const unsigned coords_length = axes.length;
- int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
- float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
+ int *normalized = coords_length ? (int *) hb_calloc (coords_length, sizeof (int)) : nullptr;
+ float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr;
if (unlikely (coords_length && !(normalized && design_coords)))
{
- free (normalized);
- free (design_coords);
+ hb_free (normalized);
+ hb_free (design_coords);
return;
}
- const OT::fvar &fvar = *font->face->table.fvar;
for (unsigned int i = 0; i < variations_length; i++)
{
- hb_ot_var_axis_info_t info;
- if (hb_ot_var_find_axis_info (font->face, variations[i].tag, &info) &&
- info.axis_index < coords_length)
- {
- float v = variations[i].value;
- design_coords[info.axis_index] = v;
- normalized[info.axis_index] = fvar.normalize_axis_value (info.axis_index, v);
- }
+ const auto tag = variations[i].tag;
+ const auto v = variations[i].value;
+ for (unsigned axis_index = 0; axis_index < coords_length; axis_index++)
+ if (axes[axis_index].axisTag == tag)
+ {
+ design_coords[axis_index] = v;
+ normalized[axis_index] = fvar.normalize_axis_value (axis_index, v);
+ }
}
font->face->table.avar->map_coords (normalized, coords_length);
@@ -2100,13 +2101,13 @@ hb_font_set_var_coords_design (hb_font_t *font,
if (hb_object_is_immutable (font))
return;
- int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
- float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
+ int *normalized = coords_length ? (int *) hb_calloc (coords_length, sizeof (int)) : nullptr;
+ float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr;
if (unlikely (coords_length && !(normalized && design_coords)))
{
- free (normalized);
- free (design_coords);
+ hb_free (normalized);
+ hb_free (design_coords);
return;
}
@@ -2135,13 +2136,13 @@ hb_font_set_var_named_instance (hb_font_t *font,
unsigned int coords_length = hb_ot_var_named_instance_get_design_coords (font->face, instance_index, nullptr, nullptr);
- float *coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr;
+ float *coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr;
if (unlikely (coords_length && !coords))
return;
hb_ot_var_named_instance_get_design_coords (font->face, instance_index, &coords_length, coords);
hb_font_set_var_coords_design (font, coords, coords_length);
- free (coords);
+ hb_free (coords);
}
/**
@@ -2165,15 +2166,15 @@ hb_font_set_var_coords_normalized (hb_font_t *font,
if (hb_object_is_immutable (font))
return;
- int *copy = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr;
- int *unmapped = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr;
- float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (design_coords[0])) : nullptr;
+ int *copy = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr;
+ int *unmapped = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr;
+ float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (design_coords[0])) : nullptr;
if (unlikely (coords_length && !(copy && unmapped && design_coords)))
{
- free (copy);
- free (unmapped);
- free (design_coords);
+ hb_free (copy);
+ hb_free (unmapped);
+ hb_free (design_coords);
return;
}
@@ -2187,7 +2188,7 @@ hb_font_set_var_coords_normalized (hb_font_t *font,
font->face->table.avar->unmap_coords (unmapped, coords_length);
for (unsigned int i = 0; i < coords_length; ++i)
design_coords[i] = font->face->table.fvar->unnormalize_axis_value (i, unmapped[i]);
- free (unmapped);
+ hb_free (unmapped);
_hb_font_adopt_var_coords (font, copy, design_coords, coords_length);
}
@@ -2267,7 +2268,7 @@ trampoline_create (FuncType func,
{
typedef hb_trampoline_t<FuncType> trampoline_t;
- trampoline_t *trampoline = (trampoline_t *) calloc (1, sizeof (trampoline_t));
+ trampoline_t *trampoline = (trampoline_t *) hb_calloc (1, sizeof (trampoline_t));
if (unlikely (!trampoline))
return nullptr;
@@ -2296,7 +2297,7 @@ trampoline_destroy (void *user_data)
if (closure->destroy)
closure->destroy (closure->user_data);
- free (closure);
+ hb_free (closure);
}
typedef hb_trampoline_t<hb_font_get_glyph_func_t> hb_font_get_glyph_trampoline_t;
diff --git a/thirdparty/harfbuzz/src/hb-ft.cc b/thirdparty/harfbuzz/src/hb-ft.cc
index b82c1a67bd..97a2c82e68 100644
--- a/thirdparty/harfbuzz/src/hb-ft.cc
+++ b/thirdparty/harfbuzz/src/hb-ft.cc
@@ -91,7 +91,7 @@ struct hb_ft_font_t
static hb_ft_font_t *
_hb_ft_font_create (FT_Face ft_face, bool symbol, bool unref)
{
- hb_ft_font_t *ft_font = (hb_ft_font_t *) calloc (1, sizeof (hb_ft_font_t));
+ hb_ft_font_t *ft_font = (hb_ft_font_t *) hb_calloc (1, sizeof (hb_ft_font_t));
if (unlikely (!ft_font)) return nullptr;
ft_font->lock.init ();
@@ -125,7 +125,7 @@ _hb_ft_font_destroy (void *data)
ft_font->lock.fini ();
- free (ft_font);
+ hb_free (ft_font);
}
/**
@@ -561,9 +561,7 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
return true;
}
-#if HB_USE_ATEXIT
-static void free_static_ft_funcs ();
-#endif
+static inline void free_static_ft_funcs ();
static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t>
{
@@ -591,21 +589,17 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
hb_font_funcs_make_immutable (funcs);
-#if HB_USE_ATEXIT
- atexit (free_static_ft_funcs);
-#endif
+ hb_atexit (free_static_ft_funcs);
return funcs;
}
} static_ft_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_ft_funcs ()
{
static_ft_funcs.free_instance ();
}
-#endif
static hb_font_funcs_t *
_hb_ft_get_font_funcs ()
@@ -642,20 +636,20 @@ _hb_ft_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data
if (error)
return nullptr;
- buffer = (FT_Byte *) malloc (length);
+ buffer = (FT_Byte *) hb_malloc (length);
if (!buffer)
return nullptr;
error = FT_Load_Sfnt_Table (ft_face, tag, 0, buffer, &length);
if (error)
{
- free (buffer);
+ hb_free (buffer);
return nullptr;
}
return hb_blob_create ((const char *) buffer, length,
HB_MEMORY_MODE_WRITABLE,
- buffer, free);
+ buffer, hb_free);
}
/**
@@ -846,8 +840,8 @@ hb_ft_font_changed (hb_font_t *font)
FT_MM_Var *mm_var = nullptr;
if (!FT_Get_MM_Var (ft_face, &mm_var))
{
- FT_Fixed *ft_coords = (FT_Fixed *) calloc (mm_var->num_axis, sizeof (FT_Fixed));
- int *coords = (int *) calloc (mm_var->num_axis, sizeof (int));
+ FT_Fixed *ft_coords = (FT_Fixed *) hb_calloc (mm_var->num_axis, sizeof (FT_Fixed));
+ int *coords = (int *) hb_calloc (mm_var->num_axis, sizeof (int));
if (coords && ft_coords)
{
if (!FT_Get_Var_Blend_Coordinates (ft_face, mm_var->num_axis, ft_coords))
@@ -866,12 +860,12 @@ hb_ft_font_changed (hb_font_t *font)
hb_font_set_var_coords_normalized (font, nullptr, 0);
}
}
- free (coords);
- free (ft_coords);
+ hb_free (coords);
+ hb_free (ft_coords);
#ifdef HAVE_FT_DONE_MM_VAR
FT_Done_MM_Var (ft_face->glyph->library, mm_var);
#else
- free (mm_var);
+ hb_free (mm_var);
#endif
}
#endif
@@ -905,9 +899,7 @@ hb_ft_font_create_referenced (FT_Face ft_face)
return hb_ft_font_create (ft_face, _hb_ft_face_destroy);
}
-#if HB_USE_ATEXIT
-static void free_static_ft_library ();
-#endif
+static inline void free_static_ft_library ();
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<FT_Library>,
hb_ft_library_lazy_loader_t>
@@ -918,9 +910,7 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F
if (FT_Init_FreeType (&l))
return nullptr;
-#if HB_USE_ATEXIT
- atexit (free_static_ft_library);
-#endif
+ hb_atexit (free_static_ft_library);
return l;
}
@@ -934,13 +924,11 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F
}
} static_ft_library;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_ft_library ()
{
static_ft_library.free_instance ();
}
-#endif
static FT_Library
get_ft_library ()
@@ -1020,13 +1008,13 @@ hb_ft_font_set_funcs (hb_font_t *font)
const int *coords = hb_font_get_var_coords_normalized (font, &num_coords);
if (num_coords)
{
- FT_Fixed *ft_coords = (FT_Fixed *) calloc (num_coords, sizeof (FT_Fixed));
+ FT_Fixed *ft_coords = (FT_Fixed *) hb_calloc (num_coords, sizeof (FT_Fixed));
if (ft_coords)
{
for (unsigned int i = 0; i < num_coords; i++)
ft_coords[i] = coords[i] * 4;
FT_Set_Var_Blend_Coordinates (ft_face, num_coords, ft_coords);
- free (ft_coords);
+ hb_free (ft_coords);
}
}
#endif
diff --git a/thirdparty/harfbuzz/src/hb-gdi.cc b/thirdparty/harfbuzz/src/hb-gdi.cc
index dc4659c7f6..8e7589beac 100644
--- a/thirdparty/harfbuzz/src/hb-gdi.cc
+++ b/thirdparty/harfbuzz/src/hb-gdi.cc
@@ -50,16 +50,16 @@ _hb_gdi_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_dat
length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length);
if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc;
- buffer = (char *) malloc (length);
+ buffer = (char *) hb_malloc (length);
if (unlikely (!buffer)) goto fail_with_releasedc;
length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length);
if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc_and_free;
ReleaseDC (nullptr, hdc);
- return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, buffer, free);
+ return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, buffer, hb_free);
fail_with_releasedc_and_free:
- free (buffer);
+ hb_free (buffer);
fail_with_releasedc:
ReleaseDC (nullptr, hdc);
fail:
diff --git a/thirdparty/harfbuzz/src/hb-glib.cc b/thirdparty/harfbuzz/src/hb-glib.cc
index f93bb8853c..8ddc7ebad8 100644
--- a/thirdparty/harfbuzz/src/hb-glib.cc
+++ b/thirdparty/harfbuzz/src/hb-glib.cc
@@ -218,9 +218,7 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
-#if HB_USE_ATEXIT
-static void free_static_glib_funcs ();
-#endif
+static inline void free_static_glib_funcs ();
static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_glib_unicode_funcs_lazy_loader_t>
{
@@ -237,21 +235,17 @@ static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader
hb_unicode_funcs_make_immutable (funcs);
-#if HB_USE_ATEXIT
- atexit (free_static_glib_funcs);
-#endif
+ hb_atexit (free_static_glib_funcs);
return funcs;
}
} static_glib_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_glib_funcs ()
{
static_glib_funcs.free_instance ();
}
-#endif
/**
* hb_glib_get_unicode_funcs:
diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.cc b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
index 7c46e26400..540b11f911 100644
--- a/thirdparty/harfbuzz/src/hb-gobject-structs.cc
+++ b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
@@ -80,12 +80,12 @@ hb_gobject_##name##_get_type () \
#define HB_DEFINE_VALUE_TYPE(name) \
static hb_##name##_t *_hb_##name##_reference (const hb_##name##_t *l) \
{ \
- hb_##name##_t *c = (hb_##name##_t *) calloc (1, sizeof (hb_##name##_t)); \
+ hb_##name##_t *c = (hb_##name##_t *) hb_calloc (1, sizeof (hb_##name##_t)); \
if (unlikely (!c)) return nullptr; \
*c = *l; \
return c; \
} \
- static void _hb_##name##_destroy (hb_##name##_t *l) { free (l); } \
+ static void _hb_##name##_destroy (hb_##name##_t *l) { hb_free (l); } \
HB_DEFINE_BOXED_TYPE (name, _hb_##name##_reference, _hb_##name##_destroy)
HB_DEFINE_OBJECT_TYPE (buffer)
diff --git a/thirdparty/harfbuzz/src/hb-graphite2.cc b/thirdparty/harfbuzz/src/hb-graphite2.cc
index 9dafe654c8..209207f1e5 100644
--- a/thirdparty/harfbuzz/src/hb-graphite2.cc
+++ b/thirdparty/harfbuzz/src/hb-graphite2.cc
@@ -88,7 +88,7 @@ static const void *hb_graphite2_get_table (const void *data, unsigned int tag, s
{
blob = face_data->face->reference_table (tag);
- hb_graphite2_tablelist_t *p = (hb_graphite2_tablelist_t *) calloc (1, sizeof (hb_graphite2_tablelist_t));
+ hb_graphite2_tablelist_t *p = (hb_graphite2_tablelist_t *) hb_calloc (1, sizeof (hb_graphite2_tablelist_t));
if (unlikely (!p)) {
hb_blob_destroy (blob);
return nullptr;
@@ -123,15 +123,16 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face)
}
hb_blob_destroy (silf_blob);
- hb_graphite2_face_data_t *data = (hb_graphite2_face_data_t *) calloc (1, sizeof (hb_graphite2_face_data_t));
+ hb_graphite2_face_data_t *data = (hb_graphite2_face_data_t *) hb_calloc (1, sizeof (hb_graphite2_face_data_t));
if (unlikely (!data))
return nullptr;
data->face = face;
- data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll);
+ const gr_face_ops ops = {sizeof(gr_face_ops), &hb_graphite2_get_table, NULL};
+ data->grface = gr_make_face_with_ops (data, &ops, gr_face_preloadAll);
if (unlikely (!data->grface)) {
- free (data);
+ hb_free (data);
return nullptr;
}
@@ -148,12 +149,12 @@ _hb_graphite2_shaper_face_data_destroy (hb_graphite2_face_data_t *data)
hb_graphite2_tablelist_t *old = tlist;
hb_blob_destroy (tlist->blob);
tlist = tlist->next;
- free (old);
+ hb_free (old);
}
gr_face_destroy (data->grface);
- free (data);
+ hb_free (data);
}
/**
diff --git a/thirdparty/harfbuzz/src/hb-icu.cc b/thirdparty/harfbuzz/src/hb-icu.cc
index 008a39e414..e46401f7a6 100644
--- a/thirdparty/harfbuzz/src/hb-icu.cc
+++ b/thirdparty/harfbuzz/src/hb-icu.cc
@@ -233,9 +233,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
-#if HB_USE_ATEXIT
-static void free_static_icu_funcs ();
-#endif
+static inline void free_static_icu_funcs ();
static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_icu_unicode_funcs_lazy_loader_t>
{
@@ -257,21 +255,17 @@ static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_
hb_unicode_funcs_make_immutable (funcs);
-#if HB_USE_ATEXIT
- atexit (free_static_icu_funcs);
-#endif
+ hb_atexit (free_static_icu_funcs);
return funcs;
}
} static_icu_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_icu_funcs ()
{
static_icu_funcs.free_instance ();
}
-#endif
/**
* hb_icu_get_unicode_funcs:
diff --git a/thirdparty/harfbuzz/src/hb-iter.hh b/thirdparty/harfbuzz/src/hb-iter.hh
index f7018150e4..b8c4472636 100644
--- a/thirdparty/harfbuzz/src/hb-iter.hh
+++ b/thirdparty/harfbuzz/src/hb-iter.hh
@@ -46,7 +46,7 @@
* TODO Document more.
*
* If iterator implementation implements operator!=, then can be
- * used in range-based for loop. That comes free if the iterator
+ * used in range-based for loop. That already happens if the iterator
* is random-access. Otherwise, the range-based for loop incurs
* one traversal to find end(), which can be avoided if written
* as a while-style for loop, or if iterator implements a faster
diff --git a/thirdparty/harfbuzz/src/hb-machinery.hh b/thirdparty/harfbuzz/src/hb-machinery.hh
index 3bd5a979b0..010c2570d7 100644
--- a/thirdparty/harfbuzz/src/hb-machinery.hh
+++ b/thirdparty/harfbuzz/src/hb-machinery.hh
@@ -242,14 +242,14 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
static const Stored* get_null () { return &Null (Stored); }
static Stored *create (Data *data)
{
- Stored *p = (Stored *) calloc (1, sizeof (Stored));
+ Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
if (likely (p))
p->init (data);
return p;
}
static Stored *create ()
{
- Stored *p = (Stored *) calloc (1, sizeof (Stored));
+ Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
if (likely (p))
p->init ();
return p;
@@ -257,7 +257,7 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
static void destroy (Stored *p)
{
p->fini ();
- free (p);
+ hb_free (p);
}
// private:
diff --git a/thirdparty/harfbuzz/src/hb-map.cc b/thirdparty/harfbuzz/src/hb-map.cc
index f115da2bb8..9f1ac42846 100644
--- a/thirdparty/harfbuzz/src/hb-map.cc
+++ b/thirdparty/harfbuzz/src/hb-map.cc
@@ -109,7 +109,7 @@ hb_map_destroy (hb_map_t *map)
map->fini_shallow ();
- free (map);
+ hb_free (map);
}
/**
@@ -188,6 +188,7 @@ hb_map_set (hb_map_t *map,
hb_codepoint_t key,
hb_codepoint_t value)
{
+ /* Immutable-safe. */
map->set (key, value);
}
@@ -220,6 +221,7 @@ void
hb_map_del (hb_map_t *map,
hb_codepoint_t key)
{
+ /* Immutable-safe. */
map->del (key);
}
@@ -253,9 +255,6 @@ hb_map_has (const hb_map_t *map,
void
hb_map_clear (hb_map_t *map)
{
- if (unlikely (hb_object_is_immutable (map)))
- return;
-
return map->clear ();
}
diff --git a/thirdparty/harfbuzz/src/hb-map.hh b/thirdparty/harfbuzz/src/hb-map.hh
index 84fe1d549b..dcd5267d74 100644
--- a/thirdparty/harfbuzz/src/hb-map.hh
+++ b/thirdparty/harfbuzz/src/hb-map.hh
@@ -85,7 +85,7 @@ struct hb_hashmap_t
}
void fini_shallow ()
{
- free (items);
+ hb_free (items);
items = nullptr;
population = occupancy = 0;
}
@@ -109,7 +109,7 @@ struct hb_hashmap_t
unsigned int power = hb_bit_storage (population * 2 + 8);
unsigned int new_size = 1u << power;
- item_t *new_items = (item_t *) malloc ((size_t) new_size * sizeof (item_t));
+ item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
if (unlikely (!new_items))
{
successful = false;
@@ -135,14 +135,14 @@ struct hb_hashmap_t
old_items[i].hash,
old_items[i].value);
- free (old_items);
+ hb_free (old_items);
return true;
}
- void set (K key, V value)
+ bool set (K key, V value)
{
- set_with_hash (key, hb_hash (key), value);
+ return set_with_hash (key, hb_hash (key), value);
}
V get (K key) const
@@ -169,6 +169,8 @@ struct hb_hashmap_t
void clear ()
{
+ if (unlikely (!successful)) return;
+
if (items)
for (auto &_ : hb_iter (items, mask + 1))
_.clear ();
@@ -211,20 +213,20 @@ struct hb_hashmap_t
protected:
- void set_with_hash (K key, uint32_t hash, V value)
+ bool set_with_hash (K key, uint32_t hash, V value)
{
- if (unlikely (!successful)) return;
- if (unlikely (key == kINVALID)) return;
- if ((occupancy + occupancy / 2) >= mask && !resize ()) return;
+ if (unlikely (!successful)) return false;
+ if (unlikely (key == kINVALID)) return true;
+ if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
unsigned int i = bucket_for_hash (key, hash);
if (value == vINVALID && items[i].key != key)
- return; /* Trying to delete non-existent key. */
+ return true; /* Trying to delete non-existent key. */
if (!items[i].is_unused ())
{
occupancy--;
- if (items[i].is_tombstone ())
+ if (!items[i].is_tombstone ())
population--;
}
@@ -235,6 +237,8 @@ struct hb_hashmap_t
occupancy++;
if (!items[i].is_tombstone ())
population++;
+
+ return true;
}
unsigned int bucket_for (K key) const
diff --git a/thirdparty/harfbuzz/src/hb-meta.hh b/thirdparty/harfbuzz/src/hb-meta.hh
index e40d9fd178..a714bc2bf0 100644
--- a/thirdparty/harfbuzz/src/hb-meta.hh
+++ b/thirdparty/harfbuzz/src/hb-meta.hh
@@ -101,14 +101,14 @@ HB_FUNCOBJ (hb_addressof);
template <typename T> static inline T hb_declval ();
#define hb_declval(T) (hb_declval<T> ())
-template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_bool_constant<false>{};
-template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_bool_constant<true> {};
+template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_false_type {};
+template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_const = typename hb_match_const<T>::type;
template <typename T> using hb_add_const = const T;
#define hb_is_const(T) hb_match_const<T>::value
-template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_bool_constant<false>{};
-template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_bool_constant<true> {};
-template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_bool_constant<true> {};
+template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_false_type {};
+template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_true_type {};
+template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_reference = typename hb_match_reference<T>::type;
template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<1>) -> hb_type_identity<T&>;
template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<0>) -> hb_type_identity<T>;
@@ -117,8 +117,8 @@ template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<1>) -> hb_t
template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<0>) -> hb_type_identity<T>;
template <typename T> using hb_add_rvalue_reference = decltype (_hb_try_add_rvalue_reference<T> (hb_prioritize));
#define hb_is_reference(T) hb_match_reference<T>::value
-template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_bool_constant<false>{};
-template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_bool_constant<true> {};
+template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_false_type {};
+template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::type;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<hb_remove_reference<T>*>;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<T>;
@@ -259,15 +259,15 @@ using hb_is_arithmetic = hb_bool_constant<
#define hb_is_arithmetic(T) hb_is_arithmetic<T>::value
-template <typename T>
-using hb_is_signed = hb_conditional<hb_is_arithmetic (T),
- hb_bool_constant<(T) -1 < (T) 0>,
- hb_false_type>;
+template <typename T, bool is_arithmetic> struct hb_is_signed_;
+template <typename T> struct hb_is_signed_<T, false> : hb_false_type {};
+template <typename T> struct hb_is_signed_<T, true> : hb_bool_constant<(T) -1 < (T) 0> {};
+template <typename T> struct hb_is_signed : hb_is_signed_<T, hb_is_arithmetic (T)> {};
#define hb_is_signed(T) hb_is_signed<T>::value
-template <typename T>
-using hb_is_unsigned = hb_conditional<hb_is_arithmetic (T),
- hb_bool_constant<(T) 0 < (T) -1>,
- hb_false_type>;
+template <typename T, bool is_arithmetic> struct hb_is_unsigned_;
+template <typename T> struct hb_is_unsigned_<T, false> : hb_false_type {};
+template <typename T> struct hb_is_unsigned_<T, true> : hb_bool_constant<(T) 0 < (T) -1> {};
+template <typename T> struct hb_is_unsigned : hb_is_unsigned_<T, hb_is_arithmetic (T)> {};
#define hb_is_unsigned(T) hb_is_unsigned<T>::value
template <typename T> struct hb_int_min;
@@ -282,6 +282,7 @@ template <> struct hb_int_min<signed long> : hb_integral_constant<signed long,
template <> struct hb_int_min<unsigned long> : hb_integral_constant<unsigned long, 0> {};
template <> struct hb_int_min<signed long long> : hb_integral_constant<signed long long, LLONG_MIN> {};
template <> struct hb_int_min<unsigned long long> : hb_integral_constant<unsigned long long, 0> {};
+template <typename T> struct hb_int_min<T *> : hb_integral_constant<T *, nullptr> {};
#define hb_int_min(T) hb_int_min<T>::value
template <typename T> struct hb_int_max;
template <> struct hb_int_max<char> : hb_integral_constant<char, CHAR_MAX> {};
diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc
new file mode 100644
index 0000000000..6d09b252d8
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc
@@ -0,0 +1,177 @@
+/*
+ * Copyright © 2011,2012,2013 Google, Inc.
+ * Copyright © 2021 Khaled Hosny
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ms-feature-ranges.hh"
+
+bool
+hb_ms_setup_features (const hb_feature_t *features,
+ unsigned int num_features,
+ hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */
+ hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */)
+{
+ feature_records.shrink(0);
+ range_records.shrink(0);
+
+ /* Sort features by start/end events. */
+ hb_vector_t<hb_ms_feature_event_t> feature_events;
+ for (unsigned int i = 0; i < num_features; i++)
+ {
+ hb_ms_active_feature_t feature;
+ feature.fea.tag_le = hb_uint32_swap (features[i].tag);
+ feature.fea.value = features[i].value;
+ feature.order = i;
+
+ hb_ms_feature_event_t *event;
+
+ event = feature_events.push ();
+ event->index = features[i].start;
+ event->start = true;
+ event->feature = feature;
+
+ event = feature_events.push ();
+ event->index = features[i].end;
+ event->start = false;
+ event->feature = feature;
+ }
+ feature_events.qsort ();
+ /* Add a strategic final event. */
+ {
+ hb_ms_active_feature_t feature;
+ feature.fea.tag_le = 0;
+ feature.fea.value = 0;
+ feature.order = num_features + 1;
+
+ auto *event = feature_events.push ();
+ event->index = 0; /* This value does magic. */
+ event->start = false;
+ event->feature = feature;
+ }
+
+ /* Scan events and save features for each range. */
+ hb_vector_t<hb_ms_active_feature_t> active_features;
+ unsigned int last_index = 0;
+ for (unsigned int i = 0; i < feature_events.length; i++)
+ {
+ auto *event = &feature_events[i];
+
+ if (event->index != last_index)
+ {
+ /* Save a snapshot of active features and the range. */
+ auto *range = range_records.push ();
+ auto offset = feature_records.length;
+
+ active_features.qsort ();
+ for (unsigned int j = 0; j < active_features.length; j++)
+ {
+ if (!j || active_features[j].fea.tag_le != feature_records[feature_records.length - 1].tag_le)
+ {
+ feature_records.push (active_features[j].fea);
+ }
+ else
+ {
+ /* Overrides value for existing feature. */
+ feature_records[feature_records.length - 1].value = active_features[j].fea.value;
+ }
+ }
+
+ /* Will convert to pointer after all is ready, since feature_records.array
+ * may move as we grow it. */
+ range->features.features = reinterpret_cast<hb_ms_feature_t *> (offset);
+ range->features.num_features = feature_records.length - offset;
+ range->index_first = last_index;
+ range->index_last = event->index - 1;
+
+ last_index = event->index;
+ }
+
+ if (event->start)
+ {
+ active_features.push (event->feature);
+ }
+ else
+ {
+ auto *feature = active_features.find (&event->feature);
+ if (feature)
+ active_features.remove (feature - active_features.arrayZ);
+ }
+ }
+
+ if (!range_records.length) /* No active feature found. */
+ num_features = 0;
+
+ /* Fixup the pointers. */
+ for (unsigned int i = 0; i < range_records.length; i++)
+ {
+ auto *range = &range_records[i];
+ range->features.features = (hb_ms_feature_t *) feature_records + reinterpret_cast<uintptr_t> (range->features.features);
+ }
+
+ return !!num_features;
+}
+
+void
+hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records,
+ hb_vector_t<hb_ms_range_record_t> &range_records,
+ unsigned int chars_offset,
+ unsigned int chars_len,
+ uint16_t *log_clusters,
+ hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */
+ hb_vector_t<uint32_t> &range_counts /* OUT */)
+{
+ range_features.shrink (0);
+ range_counts.shrink (0);
+
+ auto *last_range = &range_records[0];
+ for (unsigned int i = chars_offset; i < chars_len; i++)
+ {
+ auto *range = last_range;
+ while (log_clusters[i] < range->index_first)
+ range--;
+ while (log_clusters[i] > range->index_last)
+ range++;
+ if (!range_features.length ||
+ &range->features != range_features[range_features.length - 1])
+ {
+ auto **features = range_features.push ();
+ auto *c = range_counts.push ();
+ if (unlikely (!features || !c))
+ {
+ range_features.shrink (0);
+ range_counts.shrink (0);
+ break;
+ }
+ *features = &range->features;
+ *c = 1;
+ }
+ else
+ {
+ range_counts[range_counts.length - 1]++;
+ }
+
+ last_range = range;
+ }
+}
diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh
new file mode 100644
index 0000000000..401d1e1d97
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh
@@ -0,0 +1,96 @@
+/*
+ * Copyright © 2011,2012,2013 Google, Inc.
+ * Copyright © 2021 Khaled Hosny
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_MS_FEATURE_RANGES_HH
+#define HB_MS_FEATURE_RANGES_HH
+
+#include "hb.hh"
+
+typedef struct hb_ms_feature_t {
+ uint32_t tag_le;
+ uint32_t value;
+} hb_ms_feature_t;
+
+typedef struct hb_ms_features_t {
+ hb_ms_feature_t *features;
+ uint32_t num_features;
+} hb_ms_features_t;
+
+struct hb_ms_active_feature_t {
+ hb_ms_feature_t fea;
+ unsigned int order;
+
+ HB_INTERNAL static int cmp (const void *pa, const void *pb) {
+ const auto *a = (const hb_ms_active_feature_t *) pa;
+ const auto *b = (const hb_ms_active_feature_t *) pb;
+ return a->fea.tag_le < b->fea.tag_le ? -1 : a->fea.tag_le > b->fea.tag_le ? 1 :
+ a->order < b->order ? -1 : a->order > b->order ? 1 :
+ a->fea.value < b->fea.value ? -1 : a->fea.value > b->fea.value ? 1 :
+ 0;
+ }
+ bool operator== (const hb_ms_active_feature_t *f)
+ { return cmp (this, f) == 0; }
+};
+
+struct hb_ms_feature_event_t {
+ unsigned int index;
+ bool start;
+ hb_ms_active_feature_t feature;
+
+ HB_INTERNAL static int cmp (const void *pa, const void *pb)
+ {
+ const auto *a = (const hb_ms_feature_event_t *) pa;
+ const auto *b = (const hb_ms_feature_event_t *) pb;
+ return a->index < b->index ? -1 : a->index > b->index ? 1 :
+ a->start < b->start ? -1 : a->start > b->start ? 1 :
+ hb_ms_active_feature_t::cmp (&a->feature, &b->feature);
+ }
+};
+
+struct hb_ms_range_record_t {
+ hb_ms_features_t features;
+ unsigned int index_first; /* == start */
+ unsigned int index_last; /* == end - 1 */
+};
+
+HB_INTERNAL bool
+hb_ms_setup_features (const hb_feature_t *features,
+ unsigned int num_features,
+ hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */
+ hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */);
+
+
+HB_INTERNAL void
+hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records,
+ hb_vector_t<hb_ms_range_record_t> &range_records,
+ unsigned int chars_offset,
+ unsigned int chars_len,
+ uint16_t *log_clusters,
+ hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */
+ hb_vector_t<uint32_t> &range_counts /* OUT */);
+
+#endif /* HB_MS_FEATURE_RANGES_HH */
diff --git a/thirdparty/harfbuzz/src/hb-mutex.hh b/thirdparty/harfbuzz/src/hb-mutex.hh
index 2fc8d7ee58..a9227a741d 100644
--- a/thirdparty/harfbuzz/src/hb-mutex.hh
+++ b/thirdparty/harfbuzz/src/hb-mutex.hh
@@ -39,8 +39,7 @@
/* We need external help for these */
-#if defined(HB_MUTEX_IMPL_INIT) \
- && defined(hb_mutex_impl_init) \
+#if defined(hb_mutex_impl_init) \
&& defined(hb_mutex_impl_lock) \
&& defined(hb_mutex_impl_unlock) \
&& defined(hb_mutex_impl_finish)
@@ -52,7 +51,6 @@
#include <pthread.h>
typedef pthread_mutex_t hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT PTHREAD_MUTEX_INITIALIZER
#define hb_mutex_impl_init(M) pthread_mutex_init (M, nullptr)
#define hb_mutex_impl_lock(M) pthread_mutex_lock (M)
#define hb_mutex_impl_unlock(M) pthread_mutex_unlock (M)
@@ -62,7 +60,6 @@ typedef pthread_mutex_t hb_mutex_impl_t;
#elif !defined(HB_NO_MT) && defined(_WIN32)
typedef CRITICAL_SECTION hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT {0}
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#define hb_mutex_impl_init(M) InitializeCriticalSectionEx (M, 0, 0)
#else
@@ -76,7 +73,6 @@ typedef CRITICAL_SECTION hb_mutex_impl_t;
#elif defined(HB_NO_MT)
typedef int hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT 0
#define hb_mutex_impl_init(M) HB_STMT_START {} HB_STMT_END
#define hb_mutex_impl_lock(M) HB_STMT_START {} HB_STMT_END
#define hb_mutex_impl_unlock(M) HB_STMT_START {} HB_STMT_END
@@ -91,8 +87,6 @@ typedef int hb_mutex_impl_t;
#endif
-#define HB_MUTEX_INIT {HB_MUTEX_IMPL_INIT}
-
struct hb_mutex_t
{
hb_mutex_impl_t m;
diff --git a/thirdparty/harfbuzz/src/hb-null.hh b/thirdparty/harfbuzz/src/hb-null.hh
index d09f858cde..db38a4dfd2 100644
--- a/thirdparty/harfbuzz/src/hb-null.hh
+++ b/thirdparty/harfbuzz/src/hb-null.hh
@@ -39,8 +39,11 @@
#define HB_NULL_POOL_SIZE 384
-/* Use SFINAE to sniff whether T has min_size; in which case return T::null_size,
- * otherwise return sizeof(T). */
+/* Use SFINAE to sniff whether T has min_size; in which case return the larger
+ * of sizeof(T) and T::null_size, otherwise return sizeof(T).
+ *
+ * The main purpose of this is to let structs communicate that they are not nullable,
+ * by defining min_size but *not* null_size. */
/* The hard way...
* https://stackoverflow.com/questions/7776448/sfinae-tried-with-bool-gives-compiler-error-template-argument-tvalue-invol
@@ -49,8 +52,9 @@
template <typename T, typename>
struct _hb_null_size : hb_integral_constant<unsigned, sizeof (T)> {};
template <typename T>
-struct _hb_null_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::null_size> {};
-
+struct _hb_null_size<T, hb_void_t<decltype (T::min_size)>>
+ : hb_integral_constant<unsigned,
+ (sizeof (T) > T::null_size ? sizeof (T) : T::null_size)> {};
template <typename T>
using hb_null_size = _hb_null_size<T, void>;
#define hb_null_size(T) hb_null_size<T>::value
@@ -68,6 +72,14 @@ template <typename T>
using hb_static_size = _hb_static_size<T, void>;
#define hb_static_size(T) hb_static_size<T>::value
+template <typename T, typename>
+struct _hb_min_size : hb_integral_constant<unsigned, sizeof (T)> {};
+template <typename T>
+struct _hb_min_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::min_size> {};
+template <typename T>
+using hb_min_size = _hb_min_size<T, void>;
+#define hb_min_size(T) hb_min_size<T>::value
+
/*
* Null()
diff --git a/thirdparty/harfbuzz/src/hb-object.hh b/thirdparty/harfbuzz/src/hb-object.hh
index f3048b1c3e..0e15cb12c4 100644
--- a/thirdparty/harfbuzz/src/hb-object.hh
+++ b/thirdparty/harfbuzz/src/hb-object.hh
@@ -140,8 +140,6 @@ struct hb_lockable_set_t
* Reference-count.
*/
-#define HB_REFERENCE_COUNT_INIT {0}
-
struct hb_reference_count_t
{
mutable hb_atomic_int_t ref_count;
@@ -197,6 +195,8 @@ struct hb_object_header_t
hb_reference_count_t ref_count;
mutable hb_atomic_int_t writable = 0;
hb_atomic_ptr_t<hb_user_data_array_t> user_data;
+
+ bool is_inert () const { return !ref_count.get_relaxed (); }
};
#define HB_OBJECT_HEADER_STATIC {}
@@ -217,7 +217,7 @@ static inline void hb_object_trace (const Type *obj, const char *function)
template <typename Type>
static inline Type *hb_object_create ()
{
- Type *obj = (Type *) calloc (1, sizeof (Type));
+ Type *obj = (Type *) hb_calloc (1, sizeof (Type));
if (unlikely (!obj))
return obj;
@@ -234,11 +234,6 @@ static inline void hb_object_init (Type *obj)
obj->header.user_data.init ();
}
template <typename Type>
-static inline bool hb_object_is_inert (const Type *obj)
-{
- return unlikely (obj->header.ref_count.is_inert ());
-}
-template <typename Type>
static inline bool hb_object_is_valid (const Type *obj)
{
return likely (obj->header.ref_count.is_valid ());
@@ -257,7 +252,7 @@ template <typename Type>
static inline Type *hb_object_reference (Type *obj)
{
hb_object_trace (obj, HB_FUNC);
- if (unlikely (!obj || hb_object_is_inert (obj)))
+ if (unlikely (!obj || obj->header.is_inert ()))
return obj;
assert (hb_object_is_valid (obj));
obj->header.ref_count.inc ();
@@ -267,7 +262,7 @@ template <typename Type>
static inline bool hb_object_destroy (Type *obj)
{
hb_object_trace (obj, HB_FUNC);
- if (unlikely (!obj || hb_object_is_inert (obj)))
+ if (unlikely (!obj || obj->header.is_inert ()))
return false;
assert (hb_object_is_valid (obj));
if (obj->header.ref_count.dec () != 1)
@@ -284,7 +279,7 @@ static inline void hb_object_fini (Type *obj)
if (user_data)
{
user_data->fini ();
- free (user_data);
+ hb_free (user_data);
user_data = nullptr;
}
}
@@ -295,7 +290,7 @@ static inline bool hb_object_set_user_data (Type *obj,
hb_destroy_func_t destroy,
hb_bool_t replace)
{
- if (unlikely (!obj || hb_object_is_inert (obj)))
+ if (unlikely (!obj || obj->header.is_inert ()))
return false;
assert (hb_object_is_valid (obj));
@@ -303,14 +298,14 @@ retry:
hb_user_data_array_t *user_data = obj->header.user_data.get ();
if (unlikely (!user_data))
{
- user_data = (hb_user_data_array_t *) calloc (sizeof (hb_user_data_array_t), 1);
+ user_data = (hb_user_data_array_t *) hb_calloc (sizeof (hb_user_data_array_t), 1);
if (unlikely (!user_data))
return false;
user_data->init ();
if (unlikely (!obj->header.user_data.cmpexch (nullptr, user_data)))
{
user_data->fini ();
- free (user_data);
+ hb_free (user_data);
goto retry;
}
}
@@ -322,7 +317,7 @@ template <typename Type>
static inline void *hb_object_get_user_data (Type *obj,
hb_user_data_key_t *key)
{
- if (unlikely (!obj || hb_object_is_inert (obj)))
+ if (unlikely (!obj || obj->header.is_inert ()))
return nullptr;
assert (hb_object_is_valid (obj));
hb_user_data_array_t *user_data = obj->header.user_data.get ();
diff --git a/thirdparty/harfbuzz/src/hb-open-file.hh b/thirdparty/harfbuzz/src/hb-open-file.hh
index 54c07ff13c..6eee5827c1 100644
--- a/thirdparty/harfbuzz/src/hb-open-file.hh
+++ b/thirdparty/harfbuzz/src/hb-open-file.hh
@@ -35,7 +35,6 @@
namespace OT {
-
/*
*
* The OpenType Font File
@@ -102,7 +101,13 @@ typedef struct OpenTypeOffsetTable
{
Tag t;
t = tag;
- return tables.bfind (t, table_index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
+ /* Use lfind for small fonts; there are fonts that have unsorted table entries;
+ * those tend to work in other tools, so tolerate them.
+ * https://github.com/harfbuzz/harfbuzz/issues/3065 */
+ if (tables.len < 16)
+ return tables.lfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
+ else
+ return tables.bfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
}
const TableRecord& get_table_by_tag (hb_tag_t tag) const
{
@@ -113,44 +118,53 @@ typedef struct OpenTypeOffsetTable
public:
- template <typename item_t>
+ template <typename Iterator,
+ hb_requires ((hb_is_source_of<Iterator, hb_pair_t<hb_tag_t, hb_blob_t *>>::value))>
bool serialize (hb_serialize_context_t *c,
hb_tag_t sfnt_tag,
- hb_array_t<item_t> items)
+ Iterator it)
{
TRACE_SERIALIZE (this);
/* Alloc 12 for the OTHeader. */
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
/* Write sfntVersion (bytes 0..3). */
sfnt_version = sfnt_tag;
/* Take space for numTables, searchRange, entrySelector, RangeShift
* and the TableRecords themselves. */
- if (unlikely (!tables.serialize (c, items.length))) return_trace (false);
+ unsigned num_items = it.len ();
+ if (unlikely (!tables.serialize (c, num_items))) return_trace (false);
const char *dir_end = (const char *) c->head;
HBUINT32 *checksum_adjustment = nullptr;
/* Write OffsetTables, alloc for and write actual table blobs. */
- for (unsigned int i = 0; i < tables.len; i++)
+ unsigned i = 0;
+ for (hb_pair_t<hb_tag_t, hb_blob_t*> entry : it)
{
- TableRecord &rec = tables.arrayZ[i];
- hb_blob_t *blob = items[i].blob;
- rec.tag = items[i].tag;
- rec.length = blob->length;
- rec.offset.serialize (c, this);
+ hb_blob_t *blob = entry.second;
+ unsigned len = blob->length;
/* Allocate room for the table and copy it. */
- char *start = (char *) c->allocate_size<void> (rec.length);
+ char *start = (char *) c->allocate_size<void> (len);
if (unlikely (!start)) return false;
- if (likely (rec.length))
- memcpy (start, blob->data, rec.length);
+ TableRecord &rec = tables.arrayZ[i];
+ rec.tag = entry.first;
+ rec.length = len;
+ rec.offset = 0;
+ if (unlikely (!c->check_assign (rec.offset,
+ (unsigned) ((char *) start - (char *) this),
+ HB_SERIALIZE_ERROR_OFFSET_OVERFLOW)))
+ return_trace (false);
+
+ if (likely (len))
+ memcpy (start, blob->data, len);
/* 4-byte alignment. */
c->align (4);
const char *end = (const char *) c->head;
- if (items[i].tag == HB_OT_TAG_head &&
+ if (entry.first == HB_OT_TAG_head &&
(unsigned) (end - start) >= head::static_size)
{
head *h = (head *) start;
@@ -159,6 +173,7 @@ typedef struct OpenTypeOffsetTable
}
rec.checkSum.set_for_data (start, end - start);
+ i++;
}
tables.qsort ();
@@ -170,7 +185,7 @@ typedef struct OpenTypeOffsetTable
/* The following line is a slower version of the following block. */
//checksum.set_for_data (this, (const char *) c->head - (const char *) this);
checksum.set_for_data (this, dir_end - (const char *) this);
- for (unsigned int i = 0; i < items.length; i++)
+ for (unsigned int i = 0; i < num_items; i++)
{
TableRecord &rec = tables.arrayZ[i];
checksum = checksum + rec.checkSum;
@@ -218,7 +233,7 @@ struct TTCHeaderVersion1
Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */
FixedVersion<>version; /* Version of the TTC Header (1.0),
* 0x00010000u */
- LArrayOf<LOffsetTo<OpenTypeOffsetTable>>
+ Array32Of<Offset32To<OpenTypeOffsetTable>>
table; /* Array of offsets to the OffsetTable for each font
* from the beginning of the file */
public:
@@ -295,7 +310,7 @@ struct ResourceRecord
HBINT16 nameOffset; /* Offset from beginning of resource name list
* to resource name, -1 means there is none. */
HBUINT8 attrs; /* Resource attributes */
- NNOffsetTo<LArrayOf<HBUINT8>, HBUINT24>
+ NNOffset24To<Array32Of<HBUINT8>>
offset; /* Offset from beginning of data block to
* data for this resource */
HBUINT32 reserved; /* Reserved for handle to resource */
@@ -330,7 +345,7 @@ struct ResourceTypeRecord
protected:
Tag tag; /* Resource type. */
HBUINT16 resCountM1; /* Number of resources minus 1. */
- NNOffsetTo<UnsizedArrayOf<ResourceRecord>>
+ NNOffset16To<UnsizedArrayOf<ResourceRecord>>
resourcesZ; /* Offset from beginning of resource type list
* to reference item list for this type. */
public:
@@ -386,7 +401,7 @@ struct ResourceMap
HBUINT32 reserved1; /* Reserved for handle to next resource map */
HBUINT16 resreved2; /* Reserved for file reference number */
HBUINT16 attrs; /* Resource fork attribute */
- NNOffsetTo<ArrayOfM1<ResourceTypeRecord>>
+ NNOffset16To<ArrayOfM1<ResourceTypeRecord>>
typeList; /* Offset from beginning of map to
* resource type list */
Offset16 nameList; /* Offset from beginning of map to
@@ -418,10 +433,10 @@ struct ResourceForkHeader
}
protected:
- LNNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset32To<UnsizedArrayOf<HBUINT8>>
data; /* Offset from beginning of resource fork
* to resource data */
- LNNOffsetTo<ResourceMap >
+ NNOffset32To<ResourceMap >
map; /* Offset from beginning of resource fork
* to resource map */
HBUINT32 dataLen; /* Length of resource data */
@@ -477,14 +492,15 @@ struct OpenTypeFontFile
}
}
- template <typename item_t>
+ template <typename Iterator,
+ hb_requires ((hb_is_source_of<Iterator, hb_pair_t<hb_tag_t, hb_blob_t *>>::value))>
bool serialize_single (hb_serialize_context_t *c,
hb_tag_t sfnt_tag,
- hb_array_t<item_t> items)
+ Iterator items)
{
TRACE_SERIALIZE (this);
assert (sfnt_tag != TTCTag);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
return_trace (u.fontFace.serialize (c, sfnt_tag, items));
}
diff --git a/thirdparty/harfbuzz/src/hb-open-type.hh b/thirdparty/harfbuzz/src/hb-open-type.hh
index dc0ae1d989..49653ce97e 100644
--- a/thirdparty/harfbuzz/src/hb-open-type.hh
+++ b/thirdparty/harfbuzz/src/hb-open-type.hh
@@ -196,6 +196,12 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, Index);
typedef Index NameID;
+struct VarIdx : HBUINT32 {
+ static constexpr unsigned NO_VARIATION = 0xFFFFFFFFu;
+ VarIdx& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; }
+};
+DECLARE_NULL_NAMESPACE_BYTES (OT, VarIdx);
+
/* Offset, Null offset = 0 */
template <typename Type, bool has_null=true>
struct Offset : Type
@@ -206,18 +212,12 @@ struct Offset : Type
bool is_null () const { return has_null && 0 == *this; }
- void *serialize (hb_serialize_context_t *c, const void *base)
- {
- void *t = c->start_embed<void> ();
- c->check_assign (*this, (unsigned) ((char *) t - (char *) base));
- return t;
- }
-
public:
DEFINE_SIZE_STATIC (sizeof (Type));
};
typedef Offset<HBUINT16> Offset16;
+typedef Offset<HBUINT24> Offset24;
typedef Offset<HBUINT32> Offset32;
@@ -287,7 +287,7 @@ struct _hb_has_null<Type, true>
static Type *get_crap () { return &Crap (Type); }
};
-template <typename Type, typename OffsetType=HBUINT16, bool has_null=true>
+template <typename Type, typename OffsetType, bool has_null=true>
struct OffsetTo : Offset<OffsetType, has_null>
{
HB_DELETE_COPY_ASSIGN (OffsetTo);
@@ -319,10 +319,6 @@ struct OffsetTo : Offset<OffsetType, has_null>
hb_enable_if (hb_is_convertible (Base, void *))>
friend Type& operator + (OffsetTo &offset, Base &&base) { return offset ((void *) base); }
- Type& serialize (hb_serialize_context_t *c, const void *base)
- {
- return * (Type *) Offset<OffsetType>::serialize (c, base);
- }
template <typename ...Ts>
bool serialize_subset (hb_subset_context_t *c, const OffsetTo& src,
@@ -346,6 +342,23 @@ struct OffsetTo : Offset<OffsetType, has_null>
return ret;
}
+
+ template <typename ...Ts>
+ bool serialize_serialize (hb_serialize_context_t *c, Ts&&... ds)
+ {
+ *this = 0;
+
+ Type* obj = c->push<Type> ();
+ bool ret = obj->serialize (c, hb_forward<Ts> (ds)...);
+
+ if (ret)
+ c->add_link (*this, c->pop_pack ());
+ else
+ c->pop_discard ();
+
+ return ret;
+ }
+
/* TODO: Somehow merge this with previous function into a serialize_dispatch(). */
/* Workaround clang bug: https://bugs.llvm.org/show_bug.cgi?id=23029
* Can't compile: whence = hb_serialize_context_t::Head followed by Ts&&...
@@ -378,7 +391,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
TRACE_SANITIZE (this);
if (unlikely (!c->check_struct (this))) return_trace (false);
if (unlikely (this->is_null ())) return_trace (true);
- if (unlikely (!c->check_range (base, *this))) return_trace (false);
+ if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
return_trace (true);
}
@@ -401,12 +414,14 @@ struct OffsetTo : Offset<OffsetType, has_null>
DEFINE_SIZE_STATIC (sizeof (OffsetType));
};
/* Partial specializations. */
-template <typename Type, bool has_null=true>
-using LOffsetTo = OffsetTo<Type, HBUINT32, has_null>;
-template <typename Type, typename OffsetType=HBUINT16>
-using NNOffsetTo = OffsetTo<Type, OffsetType, false>;
-template <typename Type>
-using LNNOffsetTo = LOffsetTo<Type, false>;
+template <typename Type, bool has_null=true> using Offset16To = OffsetTo<Type, HBUINT16, has_null>;
+template <typename Type, bool has_null=true> using Offset24To = OffsetTo<Type, HBUINT24, has_null>;
+template <typename Type, bool has_null=true> using Offset32To = OffsetTo<Type, HBUINT32, has_null>;
+
+template <typename Type, typename OffsetType> using NNOffsetTo = OffsetTo<Type, OffsetType, false>;
+template <typename Type> using NNOffset16To = Offset16To<Type, false>;
+template <typename Type> using NNOffset24To = Offset24To<Type, false>;
+template <typename Type> using NNOffset32To = Offset32To<Type, false>;
/*
@@ -453,8 +468,10 @@ struct UnsizedArrayOf
const Type &lsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
{ return *as_array (len).lsearch (x, &not_found); }
template <typename T>
- bool lfind (unsigned int len, const T &x, unsigned *pos = nullptr) const
- { return as_array (len).lfind (x, pos); }
+ bool lfind (unsigned int len, const T &x, unsigned int *i = nullptr,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
+ unsigned int to_store = (unsigned int) -1) const
+ { return as_array (len).lfind (x, i, not_found, to_store); }
void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array (len).qsort (start, end); }
@@ -462,7 +479,7 @@ struct UnsizedArrayOf
bool serialize (hb_serialize_context_t *c, unsigned int items_len)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend (*this, items_len))) return_trace (false);
+ if (unlikely (!c->extend (this, items_len))) return_trace (false);
return_trace (true);
}
template <typename Iterator,
@@ -513,11 +530,11 @@ struct UnsizedArrayOf
/* Unsized array of offset's */
template <typename Type, typename OffsetType, bool has_null=true>
-using UnsizedOffsetArrayOf = UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null>>;
+using UnsizedArray16OfOffsetTo = UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null>>;
/* Unsized array of offsets relative to the beginning of the array itself. */
template <typename Type, typename OffsetType, bool has_null=true>
-struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null>
+struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
{
const Type& operator [] (int i_) const
{
@@ -538,7 +555,7 @@ struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null>
bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const
{
TRACE_SANITIZE (this);
- return_trace ((UnsizedOffsetArrayOf<Type, OffsetType, has_null>
+ return_trace ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
::sanitize (c, count, this, hb_forward<Ts> (ds)...)));
}
};
@@ -562,14 +579,14 @@ struct SortedUnsizedArrayOf : UnsizedArrayOf<Type>
{ return *as_array (len).bsearch (x, &not_found); }
template <typename T>
bool bfind (unsigned int len, const T &x, unsigned int *i = nullptr,
- hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array (len).bfind (x, i, not_found, to_store); }
};
/* An array with a number of elements. */
-template <typename Type, typename LenType=HBUINT16>
+template <typename Type, typename LenType>
struct ArrayOf
{
typedef Type item_t;
@@ -617,17 +634,32 @@ struct ArrayOf
hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
{ return as_array ().sub_array (start_offset, count); }
- hb_success_t serialize (hb_serialize_context_t *c, unsigned items_len)
+ template <typename T>
+ Type &lsearch (const T &x, Type &not_found = Crap (Type))
+ { return *as_array ().lsearch (x, &not_found); }
+ template <typename T>
+ const Type &lsearch (const T &x, const Type &not_found = Null (Type)) const
+ { return *as_array ().lsearch (x, &not_found); }
+ template <typename T>
+ bool lfind (const T &x, unsigned int *i = nullptr,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
+ unsigned int to_store = (unsigned int) -1) const
+ { return as_array ().lfind (x, i, not_found, to_store); }
+
+ void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
+ { as_array ().qsort (start, end); }
+
+ HB_NODISCARD bool serialize (hb_serialize_context_t *c, unsigned items_len)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- c->check_assign (len, items_len);
- if (unlikely (!c->extend (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+ c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
+ if (unlikely (!c->extend (this))) return_trace (false);
return_trace (true);
}
template <typename Iterator,
hb_requires (hb_is_source_of (Iterator, Type))>
- hb_success_t serialize (hb_serialize_context_t *c, Iterator items)
+ HB_NODISCARD bool serialize (hb_serialize_context_t *c, Iterator items)
{
TRACE_SERIALIZE (this);
unsigned count = items.len ();
@@ -643,7 +675,7 @@ struct ArrayOf
{
TRACE_SERIALIZE (this);
len++;
- if (unlikely (!len || !c->extend (*this)))
+ if (unlikely (!len || !c->extend (this)))
{
len--;
return_trace (nullptr);
@@ -656,7 +688,7 @@ struct ArrayOf
TRACE_SERIALIZE (this);
auto *out = c->start_embed (this);
if (unlikely (!c->extend_min (out))) return_trace (nullptr);
- c->check_assign (out->len, len);
+ c->check_assign (out->len, len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
if (unlikely (!as_array ().copy (c))) return_trace (nullptr);
return_trace (out);
}
@@ -674,19 +706,6 @@ struct ArrayOf
return_trace (true);
}
- template <typename T>
- Type &lsearch (const T &x, Type &not_found = Crap (Type))
- { return *as_array ().lsearch (x, &not_found); }
- template <typename T>
- const Type &lsearch (const T &x, const Type &not_found = Null (Type)) const
- { return *as_array ().lsearch (x, &not_found); }
- template <typename T>
- bool lfind (const T &x, unsigned *pos = nullptr) const
- { return as_array ().lfind (x, pos); }
-
- void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
- { as_array ().qsort (start, end); }
-
bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -699,21 +718,18 @@ struct ArrayOf
public:
DEFINE_SIZE_ARRAY (sizeof (LenType), arrayZ);
};
-template <typename Type>
-using LArrayOf = ArrayOf<Type, HBUINT32>;
+template <typename Type> using Array16Of = ArrayOf<Type, HBUINT16>;
+template <typename Type> using Array32Of = ArrayOf<Type, HBUINT32>;
using PString = ArrayOf<HBUINT8, HBUINT8>;
/* Array of Offset's */
-template <typename Type>
-using OffsetArrayOf = ArrayOf<OffsetTo<Type, HBUINT16>>;
-template <typename Type>
-using LOffsetArrayOf = ArrayOf<OffsetTo<Type, HBUINT32>>;
-template <typename Type>
-using LOffsetLArrayOf = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32>;
+template <typename Type> using Array16OfOffset16To = ArrayOf<OffsetTo<Type, HBUINT16>, HBUINT16>;
+template <typename Type> using Array16OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT16>;
+template <typename Type> using Array32OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32>;
/* Array of offsets relative to the beginning of the array itself. */
template <typename Type>
-struct OffsetListOf : OffsetArrayOf<Type>
+struct List16OfOffset16To : Array16OfOffset16To<Type>
{
const Type& operator [] (int i_) const
{
@@ -731,7 +747,7 @@ struct OffsetListOf : OffsetArrayOf<Type>
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- struct OffsetListOf<Type> *out = c->serializer->embed (*this);
+ struct List16OfOffset16To<Type> *out = c->serializer->embed (*this);
if (unlikely (!out)) return_trace (false);
unsigned int count = this->len;
for (unsigned int i = 0; i < count; i++)
@@ -743,7 +759,7 @@ struct OffsetListOf : OffsetArrayOf<Type>
bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const
{
TRACE_SANITIZE (this);
- return_trace (OffsetArrayOf<Type>::sanitize (c, this, hb_forward<Ts> (ds)...));
+ return_trace (Array16OfOffset16To<Type>::sanitize (c, this, hb_forward<Ts> (ds)...));
}
};
@@ -786,9 +802,9 @@ struct HeadlessArrayOf
bool serialize (hb_serialize_context_t *c, unsigned int items_len)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- c->check_assign (lenP1, items_len + 1);
- if (unlikely (!c->extend (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+ c->check_assign (lenP1, items_len + 1, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
+ if (unlikely (!c->extend (this))) return_trace (false);
return_trace (true);
}
template <typename Iterator,
@@ -859,6 +875,7 @@ struct ArrayOfM1
{
TRACE_SANITIZE (this);
if (unlikely (!sanitize_shallow (c))) return_trace (false);
+ if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true);
unsigned int count = lenM1 + 1;
for (unsigned int i = 0; i < count; i++)
if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
@@ -882,7 +899,7 @@ struct ArrayOfM1
};
/* An array with sorted elements. Supports binary searching. */
-template <typename Type, typename LenType=HBUINT16>
+template <typename Type, typename LenType>
struct SortedArrayOf : ArrayOf<Type, LenType>
{
hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->len); }
@@ -928,11 +945,14 @@ struct SortedArrayOf : ArrayOf<Type, LenType>
{ return *as_array ().bsearch (x, &not_found); }
template <typename T>
bool bfind (const T &x, unsigned int *i = nullptr,
- hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array ().bfind (x, i, not_found, to_store); }
};
+template <typename Type> using SortedArray16Of = SortedArrayOf<Type, HBUINT16>;
+template <typename Type> using SortedArray32Of = SortedArrayOf<Type, HBUINT32>;
+
/*
* Binary-search arrays
*/
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
index 864a27f458..eaaf5e12ec 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
@@ -126,7 +126,7 @@ struct CFFIndex
else
{
/* serialize CFFIndex header */
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
this->count = byteArray.length;
this->offSize = offSize_;
if (unlikely (!c->allocate_size<HBUINT8> (offSize_ * (byteArray.length + 1))))
@@ -214,7 +214,7 @@ struct CFFIndex
unsigned off_size = calcOffSize (total);
/* serialize CFFIndex header */
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
this->count = it.len ();
this->offSize = off_size;
if (unlikely (!c->allocate_size<HBUINT8> (off_size * (it.len () + 1))))
@@ -335,7 +335,7 @@ struct CFFIndexOf : CFFIndex<COUNT>
{
TRACE_SERIALIZE (this);
/* serialize CFFIndex header */
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
this->count = dataArrayLen;
this->offSize = offSize_;
if (unlikely (!c->allocate_size<HBUINT8> (offSize_ * (dataArrayLen + 1))))
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
index 7228f77727..5dd183e3a0 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
@@ -187,7 +187,7 @@ struct Encoding
const hb_vector_t<code_pair_t>& supp_codes)
{
TRACE_SERIALIZE (this);
- Encoding *dest = c->extend_min (*this);
+ Encoding *dest = c->extend_min (this);
if (unlikely (!dest)) return_trace (false);
dest->format = format | ((supp_codes.length > 0) ? 0x80 : 0);
switch (format) {
@@ -457,7 +457,7 @@ struct Charset
const hb_vector_t<code_pair_t>& sid_ranges)
{
TRACE_SERIALIZE (this);
- Charset *dest = c->extend_min (*this);
+ Charset *dest = c->extend_min (this);
if (unlikely (!dest)) return_trace (false);
dest->format = format;
switch (format)
@@ -713,6 +713,7 @@ struct cff1_top_dict_opset_t : top_dict_opset_t<cff1_top_dict_val_t>
case OpCode_Notice:
case OpCode_Copyright:
case OpCode_FullName:
+ case OpCode_FontName:
case OpCode_FamilyName:
case OpCode_Weight:
case OpCode_PostScript:
@@ -1390,7 +1391,7 @@ struct cff1
public:
FixedVersion<HBUINT8> version; /* Version of CFF table. set to 0x0100u */
- OffsetTo<CFF1NameIndex, HBUINT8> nameIndex; /* headerSize = Offset to Name INDEX. */
+ NNOffsetTo<CFF1NameIndex, HBUINT8> nameIndex; /* headerSize = Offset to Name INDEX. */
HBUINT8 offSize; /* offset size (unused?) */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
index 878e02ff17..b904bb46a8 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
@@ -49,6 +49,12 @@ struct CmapSubtableFormat0
*glyph = gid;
return true;
}
+
+ unsigned get_language () const
+ {
+ return language;
+ }
+
void collect_unicodes (hb_set_t *out) const
{
for (unsigned int i = 0; i < 256; i++)
@@ -212,29 +218,24 @@ struct CmapSubtableFormat4
HBINT16 *idDelta,
unsigned segcount)
{
+ hb_hashmap_t<hb_codepoint_t, hb_codepoint_t> cp_to_gid;
+ + it | hb_sink (cp_to_gid);
+
HBUINT16 *idRangeOffset = c->allocate_size<HBUINT16> (HBUINT16::static_size * segcount);
if (unlikely (!c->check_success (idRangeOffset))) return nullptr;
if (unlikely ((char *)idRangeOffset - (char *)idDelta != (int) segcount * (int) HBINT16::static_size)) return nullptr;
- + hb_range (segcount)
- | hb_filter ([&] (const unsigned _) { return idDelta[_] == 0; })
- | hb_apply ([&] (const unsigned i)
- {
- idRangeOffset[i] = 2 * (c->start_embed<HBUINT16> () - idRangeOffset - i);
-
- + it
- | hb_filter ([&] (const hb_item_type<Iterator> _) { return _.first >= startCode[i] && _.first <= endCode[i]; })
- | hb_apply ([&] (const hb_item_type<Iterator> _)
- {
- HBUINT16 glyID;
- glyID = _.second;
- c->copy<HBUINT16> (glyID);
- })
- ;
-
-
- })
- ;
+ for (unsigned i : + hb_range (segcount)
+ | hb_filter ([&] (const unsigned _) { return idDelta[_] == 0; }))
+ {
+ idRangeOffset[i] = 2 * (c->start_embed<HBUINT16> () - idRangeOffset - i);
+ for (hb_codepoint_t cp = startCode[i]; cp <= endCode[i]; cp++)
+ {
+ HBUINT16 gid;
+ gid = cp_to_gid[cp];
+ c->copy<HBUINT16> (gid);
+ }
+ }
return idRangeOffset;
}
@@ -253,7 +254,7 @@ struct CmapSubtableFormat4
if (format4_iter.len () == 0) return;
unsigned table_initpos = c->length ();
- if (unlikely (!c->extend_min (*this))) return;
+ if (unlikely (!c->extend_min (this))) return;
this->format = 4;
//serialize endCode[]
@@ -276,7 +277,17 @@ struct CmapSubtableFormat4
HBUINT16 *idRangeOffset = serialize_rangeoffset_glyid (c, format4_iter, endCode, startCode, idDelta, segcount);
if (unlikely (!c->check_success (idRangeOffset))) return;
- if (unlikely (!c->check_assign(this->length, c->length () - table_initpos))) return;
+ this->length = c->length () - table_initpos;
+ if ((long long) this->length != (long long) c->length () - table_initpos)
+ {
+ // Length overflowed. Discard the current object before setting the error condition, otherwise
+ // discard is a noop which prevents the higher level code from reverting the serializer to the
+ // pre-error state in cmap4 overflow handling code.
+ c->pop_discard ();
+ c->err (HB_SERIALIZE_ERROR_INT_OVERFLOW);
+ return;
+ }
+
this->segCountX2 = segcount * 2;
this->entrySelector = hb_max (1u, hb_bit_storage (segcount)) - 1;
this->searchRange = 2 * (1u << this->entrySelector);
@@ -285,6 +296,11 @@ struct CmapSubtableFormat4
: 0;
}
+ unsigned get_language () const
+ {
+ return language;
+ }
+
struct accelerator_t
{
accelerator_t () {}
@@ -547,6 +563,12 @@ struct CmapSubtableTrimmed
*glyph = gid;
return true;
}
+
+ unsigned get_language () const
+ {
+ return language;
+ }
+
void collect_unicodes (hb_set_t *out) const
{
hb_codepoint_t start = startCharCode;
@@ -606,6 +628,11 @@ struct CmapSubtableLongSegmented
return true;
}
+ unsigned get_language () const
+ {
+ return language;
+ }
+
void collect_unicodes (hb_set_t *out, unsigned int num_glyphs) const
{
for (unsigned int i = 0; i < this->groups.len; i++)
@@ -670,7 +697,7 @@ struct CmapSubtableLongSegmented
HBUINT16 reserved; /* Reserved; set to 0. */
HBUINT32 length; /* Byte length of this subtable. */
HBUINT32 language; /* Ignore. */
- SortedArrayOf<CmapSubtableLongGroup, HBUINT32>
+ SortedArray32Of<CmapSubtableLongGroup>
groups; /* Groupings. */
public:
DEFINE_SIZE_ARRAY (16, groups);
@@ -691,7 +718,7 @@ struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12>
{
if (it.len () == 0) return;
unsigned table_initpos = c->length ();
- if (unlikely (!c->extend_min (*this))) return;
+ if (unlikely (!c->extend_min (this))) return;
hb_codepoint_t startCharCode = 0xFFFF, endCharCode = 0xFFFF;
hb_codepoint_t glyphID = 0;
@@ -784,7 +811,7 @@ struct UnicodeValueRange
DEFINE_SIZE_STATIC (4);
};
-struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32>
+struct DefaultUVS : SortedArray32Of<UnicodeValueRange>
{
void collect_unicodes (hb_set_t *out) const
{
@@ -850,7 +877,9 @@ struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32>
}
else
{
- if (unlikely (!c->check_assign (out->len, (c->length () - init_len) / UnicodeValueRange::static_size))) return nullptr;
+ if (unlikely (!c->check_assign (out->len,
+ (c->length () - init_len) / UnicodeValueRange::static_size,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW))) return nullptr;
return out;
}
}
@@ -876,23 +905,21 @@ struct UVSMapping
DEFINE_SIZE_STATIC (5);
};
-struct NonDefaultUVS : SortedArrayOf<UVSMapping, HBUINT32>
+struct NonDefaultUVS : SortedArray32Of<UVSMapping>
{
void collect_unicodes (hb_set_t *out) const
{
- unsigned int count = len;
- for (unsigned int i = 0; i < count; i++)
- out->add (arrayZ[i].unicodeValue);
+ for (const auto& a : as_array ())
+ out->add (a.unicodeValue);
}
void collect_mapping (hb_set_t *unicodes, /* OUT */
hb_map_t *mapping /* OUT */) const
{
- unsigned count = len;
- for (unsigned i = 0; i < count; i++)
+ for (const auto& a : as_array ())
{
- hb_codepoint_t unicode = arrayZ[i].unicodeValue;
- hb_codepoint_t glyphid = arrayZ[i].glyphID;
+ hb_codepoint_t unicode = a.unicodeValue;
+ hb_codepoint_t glyphid = a.glyphID;
unicodes->add (unicode);
mapping->set (unicode, glyphid);
}
@@ -1041,9 +1068,9 @@ struct VariationSelectorRecord
}
HBUINT24 varSelector; /* Variation selector. */
- LOffsetTo<DefaultUVS>
+ Offset32To<DefaultUVS>
defaultUVS; /* Offset to Default UVS Table. May be 0. */
- LOffsetTo<NonDefaultUVS>
+ Offset32To<NonDefaultUVS>
nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */
public:
DEFINE_SIZE_STATIC (11);
@@ -1058,9 +1085,8 @@ struct CmapSubtableFormat14
void collect_variation_selectors (hb_set_t *out) const
{
- unsigned int count = record.len;
- for (unsigned int i = 0; i < count; i++)
- out->add (record.arrayZ[i].varSelector);
+ for (const auto& a : record.as_array ())
+ out->add (a.varSelector);
}
void collect_variation_unicodes (hb_codepoint_t variation_selector,
hb_set_t *out) const
@@ -1076,7 +1102,7 @@ struct CmapSubtableFormat14
unsigned table_initpos = c->length ();
const char* init_tail = c->tail;
- if (unlikely (!c->extend_min (*this))) return;
+ if (unlikely (!c->extend_min (this))) return;
this->format = 14;
auto src_tbl = reinterpret_cast<const CmapSubtableFormat14*> (base);
@@ -1112,10 +1138,12 @@ struct CmapSubtableFormat14
return;
int tail_len = init_tail - c->tail;
- c->check_assign (this->length, c->length () - table_initpos + tail_len);
+ c->check_assign (this->length, c->length () - table_initpos + tail_len,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW);
c->check_assign (this->record.len,
(c->length () - table_initpos - CmapSubtableFormat14::min_size) /
- VariationSelectorRecord::static_size);
+ VariationSelectorRecord::static_size,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW);
/* Correct the incorrect write order by reversing the order of the variation
records array. */
@@ -1180,7 +1208,7 @@ struct CmapSubtableFormat14
protected:
HBUINT16 format; /* Format number is set to 14. */
HBUINT32 length; /* Byte length of this subtable. */
- SortedArrayOf<VariationSelectorRecord, HBUINT32>
+ SortedArray32Of<VariationSelectorRecord>
record; /* Variation selector records; sorted
* in increasing order of `varSelector'. */
public:
@@ -1235,6 +1263,20 @@ struct CmapSubtable
}
}
+ unsigned get_language () const
+ {
+ switch (u.format) {
+ case 0: return u.format0 .get_language ();
+ case 4: return u.format4 .get_language ();
+ case 6: return u.format6 .get_language ();
+ case 10: return u.format10.get_language ();
+ case 12: return u.format12.get_language ();
+ case 13: return u.format13.get_language ();
+ case 14:
+ default: return 0;
+ }
+ }
+
template<typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
@@ -1338,7 +1380,7 @@ struct EncodingRecord
HBUINT16 platformID; /* Platform ID. */
HBUINT16 encodingID; /* Platform-specific encoding ID. */
- LOffsetTo<CmapSubtable>
+ Offset32To<CmapSubtable>
subtable; /* Byte offset from beginning of table to the subtable for this encoding. */
public:
DEFINE_SIZE_STATIC (8);
@@ -1350,58 +1392,112 @@ struct cmap
template<typename Iterator, typename EncodingRecIter,
hb_requires (hb_is_iterator (EncodingRecIter))>
- void serialize (hb_serialize_context_t *c,
+ bool serialize (hb_serialize_context_t *c,
Iterator it,
EncodingRecIter encodingrec_iter,
const void *base,
- const hb_subset_plan_t *plan)
+ const hb_subset_plan_t *plan,
+ bool drop_format_4 = false)
{
- if (unlikely (!c->extend_min ((*this)))) return;
+ if (unlikely (!c->extend_min ((*this)))) return false;
this->version = 0;
unsigned format4objidx = 0, format12objidx = 0, format14objidx = 0;
+ auto snap = c->snapshot ();
for (const EncodingRecord& _ : encodingrec_iter)
{
+ if (c->in_error ())
+ return false;
+
unsigned format = (base+_.subtable).u.format;
- if (!plan->glyphs_requested->is_empty ())
+ if (format != 4 && format != 12 && format != 14) continue;
+
+ hb_set_t unicodes_set;
+ (base+_.subtable).collect_unicodes (&unicodes_set);
+
+ if (!drop_format_4 && format == 4)
{
- hb_set_t unicodes_set;
- hb_map_t cp_glyphid_map;
- (base+_.subtable).collect_mapping (&unicodes_set, &cp_glyphid_map);
-
- auto table_iter =
- + hb_zip (unicodes_set.iter(), unicodes_set.iter() | hb_map(cp_glyphid_map))
- | hb_filter (plan->_glyphset, hb_second)
- | hb_filter ([plan] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& p)
- {
- return plan->unicodes->has (p.first) ||
- plan->glyphs_requested->has (p.second);
- })
- | hb_map ([plan] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& p_org)
- {
- return hb_pair_t<hb_codepoint_t, hb_codepoint_t> (p_org.first, plan->glyph_map->get(p_org.second));
- })
- ;
-
- if (format == 4) c->copy (_, table_iter, 4u, base, plan, &format4objidx);
- else if (format == 12) c->copy (_, table_iter, 12u, base, plan, &format12objidx);
- else if (format == 14) c->copy (_, table_iter, 14u, base, plan, &format14objidx);
+ c->copy (_, + it | hb_filter (unicodes_set, hb_first), 4u, base, plan, &format4objidx);
+ if (c->in_error () && c->only_overflow ())
+ {
+ // cmap4 overflowed, reset and retry serialization without format 4 subtables.
+ c->revert (snap);
+ return serialize (c, it,
+ encodingrec_iter,
+ base,
+ plan,
+ true);
+ }
}
- /* when --gids option is not used, we iterate input unicodes instead of
- * all codepoints in each subtable, which is more efficient */
- else
+
+ else if (format == 12)
{
- hb_set_t unicodes_set;
- (base+_.subtable).collect_unicodes (&unicodes_set);
+ if (_can_drop (_, unicodes_set, base, + it | hb_map (hb_first), encodingrec_iter)) continue;
+ c->copy (_, + it | hb_filter (unicodes_set, hb_first), 12u, base, plan, &format12objidx);
+ }
+ else if (format == 14) c->copy (_, it, 14u, base, plan, &format14objidx);
+ }
+ c->check_assign(this->encodingRecord.len,
+ (c->length () - cmap::min_size)/EncodingRecord::static_size,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW);
- if (format == 4) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 4u, base, plan, &format4objidx);
- else if (format == 12) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 12u, base, plan, &format12objidx);
- else if (format == 14) c->copy (_, it, 14u, base, plan, &format14objidx);
+ // Fail if format 4 was dropped and there is no cmap12.
+ return !drop_format_4 || format12objidx;
+ }
+
+ template<typename Iterator, typename EncodingRecordIterator,
+ hb_requires (hb_is_iterator (Iterator)),
+ hb_requires (hb_is_iterator (EncodingRecordIterator))>
+ bool _can_drop (const EncodingRecord& cmap12,
+ const hb_set_t& cmap12_unicodes,
+ const void* base,
+ Iterator subset_unicodes,
+ EncodingRecordIterator encoding_records)
+ {
+ for (auto cp : + subset_unicodes | hb_filter (cmap12_unicodes))
+ {
+ if (cp >= 0x10000) return false;
+ }
+
+ unsigned target_platform;
+ unsigned target_encoding;
+ unsigned target_language = (base+cmap12.subtable).get_language ();
+
+ if (cmap12.platformID == 0 && cmap12.encodingID == 4)
+ {
+ target_platform = 0;
+ target_encoding = 3;
+ } else if (cmap12.platformID == 3 && cmap12.encodingID == 10) {
+ target_platform = 3;
+ target_encoding = 1;
+ } else {
+ return false;
+ }
+
+ for (const auto& _ : encoding_records)
+ {
+ if (_.platformID != target_platform
+ || _.encodingID != target_encoding
+ || (base+_.subtable).get_language() != target_language)
+ continue;
+
+ hb_set_t sibling_unicodes;
+ (base+_.subtable).collect_unicodes (&sibling_unicodes);
+
+ auto cmap12 = + subset_unicodes | hb_filter (cmap12_unicodes);
+ auto sibling = + subset_unicodes | hb_filter (sibling_unicodes);
+ for (; cmap12 && sibling; cmap12++, sibling++)
+ {
+ unsigned a = *cmap12;
+ unsigned b = *sibling;
+ if (a != b) return false;
}
+
+ return !cmap12 && !sibling;
}
- c->check_assign(this->encodingRecord.len, (c->length () - cmap::min_size)/EncodingRecord::static_size);
+ return false;
}
void closure_glyphs (const hb_set_t *unicodes,
@@ -1468,8 +1564,8 @@ struct cmap
| hb_filter ([&] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t> _)
{ return (_.second != HB_MAP_VALUE_INVALID); })
;
- cmap_prime->serialize (c->serializer, it, encodingrec_iter, this, c->plan);
- return_trace (true);
+
+ return_trace (cmap_prime->serialize (c->serializer, it, encodingrec_iter, this, c->plan));
}
const CmapSubtable *find_best_subtable (bool *symbol = nullptr) const
@@ -1697,7 +1793,7 @@ struct cmap
protected:
HBUINT16 version; /* Table version number (0). */
- SortedArrayOf<EncodingRecord>
+ SortedArray16Of<EncodingRecord>
encodingRecord; /* Encoding tables. */
public:
DEFINE_SIZE_ARRAY (4, encodingRecord);
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
index e285acec3d..6c31d1b53e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
@@ -510,7 +510,7 @@ struct IndexSubtableRecord
HBGlyphID firstGlyphIndex;
HBGlyphID lastGlyphIndex;
- LOffsetTo<IndexSubtable> offsetToSubtable;
+ Offset32To<IndexSubtable> offsetToSubtable;
public:
DEFINE_SIZE_STATIC (8);
};
@@ -672,7 +672,7 @@ struct BitmapSizeTable
}
protected:
- LNNOffsetTo<IndexSubtableArray>
+ NNOffset32To<IndexSubtableArray>
indexSubtableArrayOffset;
HBUINT32 indexTablesSize;
HBUINT32 numberOfIndexSubtables;
@@ -697,7 +697,7 @@ struct BitmapSizeTable
struct GlyphBitmapDataFormat17
{
SmallGlyphMetrics glyphMetrics;
- LArrayOf<HBUINT8> data;
+ Array32Of<HBUINT8> data;
public:
DEFINE_SIZE_ARRAY (9, data);
};
@@ -705,14 +705,14 @@ struct GlyphBitmapDataFormat17
struct GlyphBitmapDataFormat18
{
BigGlyphMetrics glyphMetrics;
- LArrayOf<HBUINT8> data;
+ Array32Of<HBUINT8> data;
public:
DEFINE_SIZE_ARRAY (12, data);
};
struct GlyphBitmapDataFormat19
{
- LArrayOf<HBUINT8> data;
+ Array32Of<HBUINT8> data;
public:
DEFINE_SIZE_ARRAY (4, data);
};
@@ -738,7 +738,7 @@ struct CBLC
cbdt_prime->length,
HB_MEMORY_MODE_WRITABLE,
cbdt_prime->arrayZ,
- free);
+ hb_free);
cbdt_prime->init (); // Leak arrayZ to the blob.
bool ret = c->plan->add_table (HB_OT_TAG_CBDT, cbdt_prime_blob);
hb_blob_destroy (cbdt_prime_blob);
@@ -798,7 +798,7 @@ struct CBLC
protected:
FixedVersion<> version;
- LArrayOf<BitmapSizeTable> sizeTables;
+ Array32Of<BitmapSizeTable> sizeTables;
public:
DEFINE_SIZE_ARRAY (8, sizeTables);
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
index e2a1ff4662..007ff3f47b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
@@ -29,6 +29,7 @@
#define HB_OT_COLOR_COLR_TABLE_HH
#include "hb-open-type.hh"
+#include "hb-ot-layout-common.hh"
/*
* COLR -- Color
@@ -36,9 +37,78 @@
*/
#define HB_OT_TAG_COLR HB_TAG('C','O','L','R')
+#ifndef COLRV1_MAX_NESTING_LEVEL
+#define COLRV1_MAX_NESTING_LEVEL 100
+#endif
+
+#ifndef COLRV1_ENABLE_SUBSETTING
+#define COLRV1_ENABLE_SUBSETTING 0
+#endif
namespace OT {
+struct COLR;
+struct hb_colrv1_closure_context_t :
+ hb_dispatch_context_t<hb_colrv1_closure_context_t>
+{
+ template <typename T>
+ return_t dispatch (const T &obj)
+ {
+ if (unlikely (nesting_level_left == 0))
+ return hb_empty_t ();
+
+ if (paint_visited (&obj))
+ return hb_empty_t ();
+
+ nesting_level_left--;
+ obj.closurev1 (this);
+ nesting_level_left++;
+ return hb_empty_t ();
+ }
+ static return_t default_return_value () { return hb_empty_t (); }
+
+ bool paint_visited (const void *paint)
+ {
+ hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) paint - (uintptr_t) base);
+ if (visited_paint.has (delta))
+ return true;
+
+ visited_paint.add (delta);
+ return false;
+ }
+
+ const COLR* get_colr_table () const
+ { return reinterpret_cast<const COLR *> (base); }
+
+ void add_glyph (unsigned glyph_id)
+ { glyphs->add (glyph_id); }
+
+ void add_layer_indices (unsigned first_layer_index, unsigned num_of_layers)
+ { layer_indices->add_range (first_layer_index, first_layer_index + num_of_layers - 1); }
+
+ void add_palette_index (unsigned palette_index)
+ { palette_indices->add (palette_index); }
+
+ public:
+ const void *base;
+ hb_set_t visited_paint;
+ hb_set_t *glyphs;
+ hb_set_t *layer_indices;
+ hb_set_t *palette_indices;
+ unsigned nesting_level_left;
+
+ hb_colrv1_closure_context_t (const void *base_,
+ hb_set_t *glyphs_,
+ hb_set_t *layer_indices_,
+ hb_set_t *palette_indices_,
+ unsigned nesting_level_left_ = COLRV1_MAX_NESTING_LEVEL) :
+ base (base_),
+ glyphs (glyphs_),
+ layer_indices (layer_indices_),
+ palette_indices (palette_indices_),
+ nesting_level_left (nesting_level_left_)
+ {}
+};
struct LayerRecord
{
@@ -90,6 +160,707 @@ struct BaseGlyphRecord
DEFINE_SIZE_STATIC (6);
};
+template <typename T>
+struct Variable
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ T value;
+ VarIdx varIdx;
+ public:
+ DEFINE_SIZE_STATIC (4 + T::static_size);
+};
+
+template <typename T>
+struct NoVariable
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ T value;
+ public:
+ DEFINE_SIZE_STATIC (T::static_size);
+};
+
+// Color structures
+
+template <template<typename> class Var>
+struct ColorIndex
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (*this);
+ if (unlikely (!out)) return_trace (false);
+ return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT16 paletteIndex;
+ Var<F2DOT14> alpha;
+ public:
+ DEFINE_SIZE_STATIC (2 + Var<F2DOT14>::static_size);
+};
+
+template <template<typename> class Var>
+struct ColorStop
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ if (unlikely (!c->serializer->embed (stopOffset))) return_trace (false);
+ return_trace (color.subset (c));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ Var<F2DOT14> stopOffset;
+ ColorIndex<Var> color;
+ public:
+ DEFINE_SIZE_STATIC (Var<F2DOT14>::static_size + ColorIndex<Var>::static_size);
+};
+
+struct Extend : HBUINT8
+{
+ enum {
+ EXTEND_PAD = 0,
+ EXTEND_REPEAT = 1,
+ EXTEND_REFLECT = 2,
+ };
+ public:
+ DEFINE_SIZE_STATIC (1);
+};
+
+template <template<typename> class Var>
+struct ColorLine
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (this);
+ if (unlikely (!out)) return_trace (false);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ if (!c->serializer->check_assign (out->extend, extend, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false);
+ if (!c->serializer->check_assign (out->stops.len, stops.len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW)) return_trace (false);
+
+ for (const auto& stop : stops.iter ())
+ {
+ if (!stop.subset (c)) return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ stops.sanitize (c));
+ }
+
+ Extend extend;
+ Array16Of<ColorStop<Var>> stops;
+ public:
+ DEFINE_SIZE_ARRAY_SIZED (3, stops);
+};
+
+// Composition modes
+
+// Compositing modes are taken from https://www.w3.org/TR/compositing-1/
+// NOTE: a brief audit of major implementations suggests most support most
+// or all of the specified modes.
+struct CompositeMode : HBUINT8
+{
+ enum {
+ // Porter-Duff modes
+ // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators
+ COMPOSITE_CLEAR = 0, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_clear
+ COMPOSITE_SRC = 1, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_src
+ COMPOSITE_DEST = 2, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dst
+ COMPOSITE_SRC_OVER = 3, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcover
+ COMPOSITE_DEST_OVER = 4, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstover
+ COMPOSITE_SRC_IN = 5, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcin
+ COMPOSITE_DEST_IN = 6, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstin
+ COMPOSITE_SRC_OUT = 7, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcout
+ COMPOSITE_DEST_OUT = 8, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstout
+ COMPOSITE_SRC_ATOP = 9, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcatop
+ COMPOSITE_DEST_ATOP = 10, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstatop
+ COMPOSITE_XOR = 11, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_xor
+ COMPOSITE_PLUS = 12, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_plus
+
+ // Blend modes
+ // https://www.w3.org/TR/compositing-1/#blending
+ COMPOSITE_SCREEN = 13, // https://www.w3.org/TR/compositing-1/#blendingscreen
+ COMPOSITE_OVERLAY = 14, // https://www.w3.org/TR/compositing-1/#blendingoverlay
+ COMPOSITE_DARKEN = 15, // https://www.w3.org/TR/compositing-1/#blendingdarken
+ COMPOSITE_LIGHTEN = 16, // https://www.w3.org/TR/compositing-1/#blendinglighten
+ COMPOSITE_COLOR_DODGE = 17, // https://www.w3.org/TR/compositing-1/#blendingcolordodge
+ COMPOSITE_COLOR_BURN = 18, // https://www.w3.org/TR/compositing-1/#blendingcolorburn
+ COMPOSITE_HARD_LIGHT = 19, // https://www.w3.org/TR/compositing-1/#blendinghardlight
+ COMPOSITE_SOFT_LIGHT = 20, // https://www.w3.org/TR/compositing-1/#blendingsoftlight
+ COMPOSITE_DIFFERENCE = 21, // https://www.w3.org/TR/compositing-1/#blendingdifference
+ COMPOSITE_EXCLUSION = 22, // https://www.w3.org/TR/compositing-1/#blendingexclusion
+ COMPOSITE_MULTIPLY = 23, // https://www.w3.org/TR/compositing-1/#blendingmultiply
+
+ // Modes that, uniquely, do not operate on components
+ // https://www.w3.org/TR/compositing-1/#blendingnonseparable
+ COMPOSITE_HSL_HUE = 24, // https://www.w3.org/TR/compositing-1/#blendinghue
+ COMPOSITE_HSL_SATURATION = 25, // https://www.w3.org/TR/compositing-1/#blendingsaturation
+ COMPOSITE_HSL_COLOR = 26, // https://www.w3.org/TR/compositing-1/#blendingcolor
+ COMPOSITE_HSL_LUMINOSITY = 27, // https://www.w3.org/TR/compositing-1/#blendingluminosity
+ };
+ public:
+ DEFINE_SIZE_STATIC (1);
+};
+
+template <template<typename> class Var>
+struct Affine2x3
+{
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ Var<HBFixed> xx;
+ Var<HBFixed> yx;
+ Var<HBFixed> xy;
+ Var<HBFixed> yy;
+ Var<HBFixed> dx;
+ Var<HBFixed> dy;
+ public:
+ DEFINE_SIZE_STATIC (6 * Var<HBFixed>::static_size);
+};
+
+struct PaintColrLayers
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+ return_trace (c->serializer->check_assign (out->firstLayerIndex, c->plan->colrv1_layers->get (firstLayerIndex),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
+
+ return_trace (true);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT8 format; /* format = 1 */
+ HBUINT8 numLayers;
+ HBUINT32 firstLayerIndex; /* index into COLRv1::layersV1 */
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+template <template<typename> class Var>
+struct PaintSolid
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ { c->add_palette_index (color.paletteIndex); }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ if (unlikely (!c->serializer->embed (format))) return_trace (false);
+ return_trace (color.subset (c));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT8 format; /* format = 2(noVar) or 3(Var)*/
+ ColorIndex<Var> color;
+ public:
+ DEFINE_SIZE_STATIC (1 + ColorIndex<Var>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintLinearGradient
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ {
+ for (const auto &stop : (this+colorLine).stops.iter ())
+ c->add_palette_index (stop.color.paletteIndex);
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->colorLine.serialize_subset (c, colorLine, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 4(noVar) or 5 (Var) */
+ Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintLinearGradient
+ * table) to ColorLine subtable. */
+ Var<FWORD> x0;
+ Var<FWORD> y0;
+ Var<FWORD> x1;
+ Var<FWORD> y1;
+ Var<FWORD> x2;
+ Var<FWORD> y2;
+ public:
+ DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintRadialGradient
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->colorLine.serialize_subset (c, colorLine, this));
+ }
+
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ {
+ for (const auto &stop : (this+colorLine).stops.iter ())
+ c->add_palette_index (stop.color.paletteIndex);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 6(noVar) or 7 (Var) */
+ Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintRadialGradient
+ * table) to ColorLine subtable. */
+ Var<FWORD> x0;
+ Var<FWORD> y0;
+ Var<UFWORD> radius0;
+ Var<FWORD> x1;
+ Var<FWORD> y1;
+ Var<UFWORD> radius1;
+ public:
+ DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintSweepGradient
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->colorLine.serialize_subset (c, colorLine, this));
+ }
+
+ void closurev1 (hb_colrv1_closure_context_t* c) const
+ {
+ for (const auto &stop : (this+colorLine).stops.iter ())
+ c->add_palette_index (stop.color.paletteIndex);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 8(noVar) or 9 (Var) */
+ Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintSweepGradient
+ * table) to ColorLine subtable. */
+ Var<FWORD> centerX;
+ Var<FWORD> centerY;
+ Var<HBFixed> startAngle;
+ Var<HBFixed> endAngle;
+ public:
+ DEFINE_SIZE_STATIC (2 * Var<FWORD>::static_size + 2 * Var<HBFixed>::static_size);
+};
+
+struct Paint;
+// Paint a non-COLR glyph, filled as indicated by paint.
+struct PaintGlyph
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ if (! c->serializer->check_assign (out->gid, c->plan->glyph_map->get (gid),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+
+ return_trace (out->paint.serialize_subset (c, paint, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && paint.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 10 */
+ Offset24To<Paint> paint; /* Offset (from beginning of PaintGlyph table) to Paint subtable. */
+ HBUINT16 gid;
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct PaintColrGlyph
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (c->serializer->check_assign (out->gid, c->plan->glyph_map->get (gid),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT8 format; /* format = 11 */
+ HBUINT16 gid;
+ public:
+ DEFINE_SIZE_STATIC (3);
+};
+
+template <template<typename> class Var>
+struct PaintTransform
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 12(noVar) or 13 (Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintTransform table) to Paint subtable. */
+ Affine2x3<Var> transform;
+ public:
+ DEFINE_SIZE_STATIC (4 + Affine2x3<Var>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintTranslate
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 14(noVar) or 15 (Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintTranslate table) to Paint subtable. */
+ Var<HBFixed> dx;
+ Var<HBFixed> dy;
+ public:
+ DEFINE_SIZE_STATIC (4 + Var<HBFixed>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintRotate
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 16 (noVar) or 17(Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintRotate table) to Paint subtable. */
+ Var<HBFixed> angle;
+ Var<HBFixed> centerX;
+ Var<HBFixed> centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + 3 * Var<HBFixed>::static_size);
+};
+
+template <template<typename> class Var>
+struct PaintSkew
+{
+ HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ return_trace (out->src.serialize_subset (c, src, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && src.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 18(noVar) or 19 (Var) */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintSkew table) to Paint subtable. */
+ Var<HBFixed> xSkewAngle;
+ Var<HBFixed> ySkewAngle;
+ Var<HBFixed> centerX;
+ Var<HBFixed> centerY;
+ public:
+ DEFINE_SIZE_STATIC (4 + 4 * Var<HBFixed>::static_size);
+};
+
+struct PaintComposite
+{
+ void closurev1 (hb_colrv1_closure_context_t* c) const;
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
+ if (unlikely (!out)) return_trace (false);
+
+ if (!out->src.serialize_subset (c, src, this)) return_trace (false);
+ return_trace (out->backdrop.serialize_subset (c, backdrop, this));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ src.sanitize (c, this) &&
+ backdrop.sanitize (c, this));
+ }
+
+ HBUINT8 format; /* format = 20 */
+ Offset24To<Paint> src; /* Offset (from beginning of PaintComposite table) to source Paint subtable. */
+ CompositeMode mode; /* If mode is unrecognized use COMPOSITE_CLEAR */
+ Offset24To<Paint> backdrop; /* Offset (from beginning of PaintComposite table) to backdrop Paint subtable. */
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct Paint
+{
+ template <typename context_t, typename ...Ts>
+ typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
+ {
+ TRACE_DISPATCH (this, u.format);
+ if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
+ switch (u.format) {
+ case 1: return_trace (c->dispatch (u.paintformat1, hb_forward<Ts> (ds)...));
+ case 2: return_trace (c->dispatch (u.paintformat2, hb_forward<Ts> (ds)...));
+ case 3: return_trace (c->dispatch (u.paintformat3, hb_forward<Ts> (ds)...));
+ case 4: return_trace (c->dispatch (u.paintformat4, hb_forward<Ts> (ds)...));
+ case 5: return_trace (c->dispatch (u.paintformat5, hb_forward<Ts> (ds)...));
+ case 6: return_trace (c->dispatch (u.paintformat6, hb_forward<Ts> (ds)...));
+ case 7: return_trace (c->dispatch (u.paintformat7, hb_forward<Ts> (ds)...));
+ case 8: return_trace (c->dispatch (u.paintformat8, hb_forward<Ts> (ds)...));
+ case 9: return_trace (c->dispatch (u.paintformat9, hb_forward<Ts> (ds)...));
+ case 10: return_trace (c->dispatch (u.paintformat10, hb_forward<Ts> (ds)...));
+ case 11: return_trace (c->dispatch (u.paintformat11, hb_forward<Ts> (ds)...));
+ case 12: return_trace (c->dispatch (u.paintformat12, hb_forward<Ts> (ds)...));
+ case 13: return_trace (c->dispatch (u.paintformat13, hb_forward<Ts> (ds)...));
+ case 14: return_trace (c->dispatch (u.paintformat14, hb_forward<Ts> (ds)...));
+ case 15: return_trace (c->dispatch (u.paintformat15, hb_forward<Ts> (ds)...));
+ case 16: return_trace (c->dispatch (u.paintformat16, hb_forward<Ts> (ds)...));
+ case 17: return_trace (c->dispatch (u.paintformat17, hb_forward<Ts> (ds)...));
+ case 18: return_trace (c->dispatch (u.paintformat18, hb_forward<Ts> (ds)...));
+ case 19: return_trace (c->dispatch (u.paintformat19, hb_forward<Ts> (ds)...));
+ case 20: return_trace (c->dispatch (u.paintformat20, hb_forward<Ts> (ds)...));
+ default:return_trace (c->default_return_value ());
+ }
+ }
+
+ protected:
+ union {
+ HBUINT8 format;
+ PaintColrLayers paintformat1;
+ PaintSolid<NoVariable> paintformat2;
+ PaintSolid<Variable> paintformat3;
+ PaintLinearGradient<NoVariable> paintformat4;
+ PaintLinearGradient<Variable> paintformat5;
+ PaintRadialGradient<NoVariable> paintformat6;
+ PaintRadialGradient<Variable> paintformat7;
+ PaintSweepGradient<NoVariable> paintformat8;
+ PaintSweepGradient<Variable> paintformat9;
+ PaintGlyph paintformat10;
+ PaintColrGlyph paintformat11;
+ PaintTransform<NoVariable> paintformat12;
+ PaintTransform<Variable> paintformat13;
+ PaintTranslate<NoVariable> paintformat14;
+ PaintTranslate<Variable> paintformat15;
+ PaintRotate<NoVariable> paintformat16;
+ PaintRotate<Variable> paintformat17;
+ PaintSkew<NoVariable> paintformat18;
+ PaintSkew<Variable> paintformat19;
+ PaintComposite paintformat20;
+ } u;
+};
+
+struct BaseGlyphV1Record
+{
+ int cmp (hb_codepoint_t g) const
+ { return g < glyphId ? -1 : g > glyphId ? 1 : 0; }
+
+ bool serialize (hb_serialize_context_t *s, const hb_map_t* glyph_map,
+ const void* src_base, hb_subset_context_t *c) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = s->embed (this);
+ if (unlikely (!out)) return_trace (false);
+ if (!s->check_assign (out->glyphId, glyph_map->get (glyphId),
+ HB_SERIALIZE_ERROR_INT_OVERFLOW))
+ return_trace (false);
+
+ return_trace (out->paint.serialize_subset (c, paint, src_base));
+ }
+
+ bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely (c->check_struct (this) && paint.sanitize (c, base)));
+ }
+
+ public:
+ HBGlyphID glyphId; /* Glyph ID of reference glyph */
+ Offset32To<Paint> paint; /* Offset (from beginning of BaseGlyphV1Record array) to Paint,
+ * Typically PaintColrLayers */
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct BaseGlyphV1List : SortedArray32Of<BaseGlyphV1Record>
+{
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+ const hb_set_t* glyphset = c->plan->_glyphset;
+
+ for (const auto& _ : as_array ())
+ {
+ unsigned gid = _.glyphId;
+ if (!glyphset->has (gid)) continue;
+
+ if (_.serialize (c->serializer, c->plan->glyph_map, this, c)) out->len++;
+ else return_trace (false);
+ }
+
+ return_trace (out->len != 0);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (SortedArray32Of<BaseGlyphV1Record>::sanitize (c, this));
+ }
+};
+
+struct LayerV1List : Array32OfOffset32To<Paint>
+{
+ const Paint& get_paint (unsigned i) const
+ { return this+(*this)[i]; }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ for (const auto& _ : + hb_enumerate (*this)
+ | hb_filter (c->plan->colrv1_layers, hb_first))
+
+ {
+ auto *o = out->serialize_append (c->serializer);
+ if (unlikely (!o) || !o->serialize_subset (c, _.second, this))
+ return_trace (false);
+ }
+ return_trace (true);
+ }
+
+ bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (Array32OfOffset32To<Paint>::sanitize (c, this));
+ }
+};
+
struct COLR
{
static constexpr hb_tag_t tableTag = HB_OT_TAG_COLR;
@@ -131,6 +902,15 @@ struct COLR
hb_set_t *related_ids /* OUT */) const
{ colr->closure_glyphs (glyph, related_ids); }
+ void closure_V0palette_indices (const hb_set_t *glyphs,
+ hb_set_t *palettes /* OUT */) const
+ { colr->closure_V0palette_indices (glyphs, palettes); }
+
+ void closure_forV1 (hb_set_t *glyphset,
+ hb_set_t *layer_indices,
+ hb_set_t *palette_indices) const
+ { colr->closure_forV1 (glyphset, layer_indices, palette_indices); }
+
private:
hb_blob_ptr_t<COLR> colr;
};
@@ -147,21 +927,70 @@ struct COLR
related_ids->add_array (&glyph_layers[0].glyphId, glyph_layers.length, LayerRecord::min_size);
}
+ void closure_V0palette_indices (const hb_set_t *glyphs,
+ hb_set_t *palettes /* OUT */) const
+ {
+ if (!numBaseGlyphs || !numLayers) return;
+ hb_array_t<const BaseGlyphRecord> baseGlyphs = (this+baseGlyphsZ).as_array (numBaseGlyphs);
+ hb_array_t<const LayerRecord> all_layers = (this+layersZ).as_array (numLayers);
+
+ for (const BaseGlyphRecord record : baseGlyphs)
+ {
+ if (!glyphs->has (record.glyphId)) continue;
+ hb_array_t<const LayerRecord> glyph_layers = all_layers.sub_array (record.firstLayerIdx,
+ record.numLayers);
+ for (const LayerRecord layer : glyph_layers)
+ palettes->add (layer.colorIdx);
+ }
+ }
+
+ void closure_forV1 (hb_set_t *glyphset,
+ hb_set_t *layer_indices,
+ hb_set_t *palette_indices) const
+ {
+ if (version != 1) return;
+ hb_set_t visited_glyphs;
+
+ hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices);
+ const BaseGlyphV1List &baseglyphV1_records = this+baseGlyphsV1List;
+
+ for (const BaseGlyphV1Record &baseglyphV1record: baseglyphV1_records.iter ())
+ {
+ unsigned gid = baseglyphV1record.glyphId;
+ if (!glyphset->has (gid)) continue;
+
+ const Paint &paint = &baseglyphV1_records+baseglyphV1record.paint;
+ paint.dispatch (&c);
+ }
+ hb_set_union (glyphset, &visited_glyphs);
+ }
+
+ const LayerV1List& get_layerV1List () const
+ { return (this+layersV1); }
+
+ const BaseGlyphV1List& get_baseglyphV1List () const
+ { return (this+baseGlyphsV1List); }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (likely (c->check_struct (this) &&
- (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) &&
- (this+layersZ).sanitize (c, numLayers)));
+ return_trace (c->check_struct (this) &&
+ (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) &&
+ (this+layersZ).sanitize (c, numLayers) &&
+ (version == 0 ||
+ (COLRV1_ENABLE_SUBSETTING && version == 1 &&
+ baseGlyphsV1List.sanitize (c, this) &&
+ layersV1.sanitize (c, this) &&
+ varStore.sanitize (c, this))));
}
template<typename BaseIterator, typename LayerIterator,
hb_requires (hb_is_iterator (BaseIterator)),
hb_requires (hb_is_iterator (LayerIterator))>
- bool serialize (hb_serialize_context_t *c,
- unsigned version,
- BaseIterator base_it,
- LayerIterator layer_it)
+ bool serialize_V0 (hb_serialize_context_t *c,
+ unsigned version,
+ BaseIterator base_it,
+ LayerIterator layer_it)
{
TRACE_SERIALIZE (this);
if (unlikely (base_it.len () != layer_it.len ()))
@@ -171,6 +1000,12 @@ struct COLR
this->version = version;
numLayers = 0;
numBaseGlyphs = base_it.len ();
+ if (base_it.len () == 0)
+ {
+ baseGlyphsZ = 0;
+ layersZ = 0;
+ return_trace (true);
+ }
baseGlyphsZ = COLR::min_size;
layersZ = COLR::min_size + numBaseGlyphs * BaseGlyphRecord::min_size;
@@ -198,6 +1033,14 @@ struct COLR
return record;
}
+ const BaseGlyphV1Record* get_base_glyphV1_record (hb_codepoint_t gid) const
+ {
+ const BaseGlyphV1Record* record = &(this+baseGlyphsV1List).bsearch ((unsigned) gid);
+ if ((record && (hb_codepoint_t) record->glyphId != gid))
+ record = nullptr;
+ return record;
+ }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
@@ -245,6 +1088,7 @@ struct COLR
if (unlikely (!c->plan->new_gid_for_old_gid (out_layers[i].glyphId, &new_gid)))
return hb_pair_t<bool, hb_vector_t<LayerRecord>> (false, out_layers);
out_layers[i].glyphId = new_gid;
+ out_layers[i].colorIdx = c->plan->colr_palettes->get (layers[i].colorIdx);
}
return hb_pair_t<bool, hb_vector_t<LayerRecord>> (true, out_layers);
@@ -253,23 +1097,45 @@ struct COLR
| hb_map_retains_sorting (hb_second)
;
- if (unlikely (!base_it || !layer_it || base_it.len () != layer_it.len ()))
+ if (version == 0 && (!base_it || !layer_it))
return_trace (false);
COLR *colr_prime = c->serializer->start_embed<COLR> ();
- return_trace (colr_prime->serialize (c->serializer, version, base_it, layer_it));
+ bool ret = colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it);
+
+ if (version == 0) return_trace (ret);
+ auto snap = c->serializer->snapshot ();
+ if (!c->serializer->allocate_size<void> (3 * HBUINT32::static_size)) return_trace (false);
+ if (!colr_prime->baseGlyphsV1List.serialize_subset (c, baseGlyphsV1List, this))
+ {
+ if (c->serializer->in_error ()) return_trace (false);
+ //no more COLRv1 glyphs: downgrade to version 0
+ c->serializer->revert (snap);
+ colr_prime->version = 0;
+ return_trace (true);
+ }
+
+ if (!colr_prime->layersV1.serialize_subset (c, layersV1, this)) return_trace (false);
+
+ colr_prime->varStore = 0;
+ //TODO: subset varStore once it's implemented in fonttools
+ return_trace (true);
}
protected:
HBUINT16 version; /* Table version number (starts at 0). */
HBUINT16 numBaseGlyphs; /* Number of Base Glyph Records. */
- LNNOffsetTo<SortedUnsizedArrayOf<BaseGlyphRecord>>
+ NNOffset32To<SortedUnsizedArrayOf<BaseGlyphRecord>>
baseGlyphsZ; /* Offset to Base Glyph records. */
- LNNOffsetTo<UnsizedArrayOf<LayerRecord>>
+ NNOffset32To<UnsizedArrayOf<LayerRecord>>
layersZ; /* Offset to Layer Records. */
HBUINT16 numLayers; /* Number of Layer Records. */
+ // Version-1 additions
+ Offset32To<BaseGlyphV1List> baseGlyphsV1List;
+ Offset32To<LayerV1List> layersV1;
+ Offset32To<VariationStore> varStore;
public:
- DEFINE_SIZE_STATIC (14);
+ DEFINE_SIZE_MIN (14);
};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
new file mode 100644
index 0000000000..4124efe0b1
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
@@ -0,0 +1,101 @@
+/*
+ * Copyright © 2018 Ebrahim Byagowi
+ * Copyright © 2020 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_OT_COLR_COLRV1_CLOSURE_HH
+#define HB_OT_COLR_COLRV1_CLOSURE_HH
+
+#include "hb-open-type.hh"
+#include "hb-ot-layout-common.hh"
+#include "hb-ot-color-colr-table.hh"
+
+/*
+ * COLR -- Color
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/colr
+ */
+namespace OT {
+
+HB_INTERNAL void PaintColrLayers::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ c->add_layer_indices (firstLayerIndex, numLayers);
+ const LayerV1List &paint_offset_lists = c->get_colr_table ()->get_layerV1List ();
+ for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++)
+ {
+ const Paint &paint = hb_addressof (paint_offset_lists) + paint_offset_lists[i];
+ paint.dispatch (c);
+ }
+}
+
+HB_INTERNAL void PaintGlyph::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ c->add_glyph (gid);
+ (this+paint).dispatch (c);
+}
+
+HB_INTERNAL void PaintColrGlyph::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ const COLR *colr_table = c->get_colr_table ();
+ const BaseGlyphV1Record* baseglyphV1_record = colr_table->get_base_glyphV1_record (gid);
+ if (!baseglyphV1_record) return;
+ c->add_glyph (gid);
+
+ const BaseGlyphV1List &baseglyphV1_list = colr_table->get_baseglyphV1List ();
+ (&baseglyphV1_list+baseglyphV1_record->paint).dispatch (c);
+}
+
+template <template<typename> class Var>
+HB_INTERNAL void PaintTransform<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ (this+src).dispatch (c);
+}
+
+template <template<typename> class Var>
+HB_INTERNAL void PaintTranslate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ (this+src).dispatch (c);
+}
+
+template <template<typename> class Var>
+HB_INTERNAL void PaintRotate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ (this+src).dispatch (c);
+}
+
+template <template<typename> class Var>
+HB_INTERNAL void PaintSkew<Var>::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ (this+src).dispatch (c);
+}
+
+HB_INTERNAL void PaintComposite::closurev1 (hb_colrv1_closure_context_t* c) const
+{
+ (this+src).dispatch (c);
+ (this+backdrop).dispatch (c);
+}
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_COLR_COLRV1_CLOSURE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh
index fa7d3207be..a9deeba9a7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh
@@ -39,7 +39,6 @@
*/
#define HB_OT_TAG_CPAL HB_TAG('C','P','A','L')
-
namespace OT {
@@ -74,6 +73,44 @@ struct CPALV1Tail
}
public:
+ bool serialize (hb_serialize_context_t *c,
+ unsigned palette_count,
+ unsigned color_count,
+ const void *base,
+ const hb_map_t *color_index_map) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->allocate_size<CPALV1Tail> (static_size);
+ if (unlikely (!out)) return_trace (false);
+
+ out->paletteFlagsZ = 0;
+ if (paletteFlagsZ)
+ out->paletteFlagsZ.serialize_copy (c, paletteFlagsZ, base, 0, hb_serialize_context_t::Head, palette_count);
+
+ out->paletteLabelsZ = 0;
+ if (paletteLabelsZ)
+ out->paletteLabelsZ.serialize_copy (c, paletteLabelsZ, base, 0, hb_serialize_context_t::Head, palette_count);
+
+ const hb_array_t<const NameID> colorLabels = (base+colorLabelsZ).as_array (color_count);
+ if (colorLabelsZ)
+ {
+ c->push ();
+ for (const auto _ : colorLabels)
+ {
+ if (!color_index_map->has (_)) continue;
+ NameID new_color_idx;
+ new_color_idx = color_index_map->get (_);
+ if (!c->copy<NameID> (new_color_idx))
+ {
+ c->pop_discard ();
+ return_trace (false);
+ }
+ }
+ c->add_link (out->colorLabelsZ, c->pop_pack ());
+ }
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c,
const void *base,
unsigned int palette_count,
@@ -87,15 +124,17 @@ struct CPALV1Tail
}
protected:
- LNNOffsetTo<UnsizedArrayOf<HBUINT32>>
+ // TODO(garretrieger): these offsets can hold nulls so we should not be using non-null offsets
+ // here. Currently they are needed since UnsizedArrayOf doesn't define null_size
+ NNOffset32To<UnsizedArrayOf<HBUINT32>>
paletteFlagsZ; /* Offset from the beginning of CPAL table to
* the Palette Type Array. Set to 0 if no array
* is provided. */
- LNNOffsetTo<UnsizedArrayOf<NameID>>
+ NNOffset32To<UnsizedArrayOf<NameID>>
paletteLabelsZ; /* Offset from the beginning of CPAL table to
* the palette labels array. Set to 0 if no
* array is provided. */
- LNNOffsetTo<UnsizedArrayOf<NameID>>
+ NNOffset32To<UnsizedArrayOf<NameID>>
colorLabelsZ; /* Offset from the beginning of CPAL table to
* the color labels array. Set to 0
* if no array is provided. */
@@ -157,6 +196,84 @@ struct CPAL
}
public:
+ bool serialize (hb_serialize_context_t *c,
+ const hb_array_t<const BGRAColor> &color_records,
+ const hb_array_t<const HBUINT16> &color_record_indices,
+ const hb_map_t &color_record_index_map,
+ const hb_set_t &retained_color_record_indices) const
+ {
+ TRACE_SERIALIZE (this);
+
+ for (const auto idx : color_record_indices)
+ {
+ HBUINT16 new_idx;
+ if (idx == 0) new_idx = 0;
+ else new_idx = color_record_index_map.get (idx);
+ if (!c->copy<HBUINT16> (new_idx)) return_trace (false);
+ }
+
+ c->push ();
+ for (const auto _ : retained_color_record_indices.iter ())
+ {
+ if (!c->copy<BGRAColor> (color_records[_]))
+ {
+ c->pop_discard ();
+ return_trace (false);
+ }
+ }
+ c->add_link (colorRecordsZ, c->pop_pack ());
+ return_trace (true);
+ }
+
+ bool subset (hb_subset_context_t *c) const
+ {
+ TRACE_SUBSET (this);
+ const hb_map_t *color_index_map = c->plan->colr_palettes;
+ if (color_index_map->is_empty ()) return_trace (false);
+
+ hb_set_t retained_color_indices;
+ for (const auto _ : color_index_map->keys ())
+ {
+ if (_ == 0xFFFF) continue;
+ retained_color_indices.add (_);
+ }
+ if (retained_color_indices.is_empty ()) return_trace (false);
+
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ out->version = version;
+ out->numColors = retained_color_indices.get_population ();
+ out->numPalettes = numPalettes;
+
+ const hb_array_t<const HBUINT16> colorRecordIndices = colorRecordIndicesZ.as_array (numPalettes);
+ hb_map_t color_record_index_map;
+ hb_set_t retained_color_record_indices;
+
+ unsigned record_count = 0;
+ for (const auto first_color_record_idx : colorRecordIndices)
+ {
+ for (unsigned retained_color_idx : retained_color_indices.iter ())
+ {
+ unsigned color_record_idx = first_color_record_idx + retained_color_idx;
+ if (color_record_index_map.has (color_record_idx)) continue;
+ color_record_index_map.set (color_record_idx, record_count);
+ retained_color_record_indices.add (color_record_idx);
+ record_count++;
+ }
+ }
+
+ out->numColorRecords = record_count;
+ const hb_array_t<const BGRAColor> color_records = (this+colorRecordsZ).as_array (numColorRecords);
+ if (!out->serialize (c->serializer, color_records, colorRecordIndices, color_record_index_map, retained_color_record_indices))
+ return_trace (false);
+
+ if (version == 1)
+ return_trace (v1 ().serialize (c->serializer, numPalettes, numColors, this, color_index_map));
+
+ return_trace (true);
+ }
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -173,7 +290,7 @@ struct CPAL
HBUINT16 numPalettes; /* Number of palettes in the table. */
HBUINT16 numColorRecords; /* Total number of color records, combined for
* all palettes. */
- LNNOffsetTo<UnsizedArrayOf<BGRAColor>>
+ NNOffset32To<UnsizedArrayOf<BGRAColor>>
colorRecordsZ; /* Offset from the beginning of CPAL table to
* the first ColorRecord. */
UnsizedArrayOf<HBUINT16>
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
index 09da11597d..d2911f19e6 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
@@ -145,7 +145,7 @@ struct SBIXStrike
auto* out = c->serializer->start_embed<SBIXStrike> ();
if (unlikely (!out)) return_trace (false);
auto snap = c->serializer->snapshot ();
- if (unlikely (!c->serializer->extend (*out, num_output_glyphs + 1))) return_trace (false);
+ if (unlikely (!c->serializer->extend (out, num_output_glyphs + 1))) return_trace (false);
out->ppem = ppem;
out->resolution = resolution;
HBUINT32 head;
@@ -185,7 +185,7 @@ struct SBIXStrike
HBUINT16 resolution; /* The device pixel density (in PPI) for which this
* strike was designed. (E.g., 96 PPI, 192 PPI.) */
protected:
- UnsizedArrayOf<LOffsetTo<SBIXGlyph>>
+ UnsizedArrayOf<Offset32To<SBIXGlyph>>
imageOffsetsZ; /* Offset from the beginning of the strike data header
* to bitmap data for an individual glyph ID. */
public:
@@ -352,11 +352,11 @@ struct sbix
{
TRACE_SERIALIZE (this);
- auto *out = c->serializer->start_embed<LOffsetLArrayOf<SBIXStrike>> ();
+ auto *out = c->serializer->start_embed<Array32OfOffset32To<SBIXStrike>> ();
if (unlikely (!out)) return_trace (false);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
- hb_vector_t<LOffsetTo<SBIXStrike>*> new_strikes;
+ hb_vector_t<Offset32To<SBIXStrike>*> new_strikes;
hb_vector_t<hb_serialize_context_t::objidx_t> objidxs;
for (int i = strikes.len - 1; i >= 0; --i)
{
@@ -400,7 +400,7 @@ struct sbix
HBUINT16 version; /* Table version number — set to 1 */
HBUINT16 flags; /* Bit 0: Set to 1. Bit 1: Draw outlines.
* Bits 2 to 15: reserved (set to 0). */
- LOffsetLArrayOf<SBIXStrike>
+ Array32OfOffset32To<SBIXStrike>
strikes; /* Offsets from the beginning of the 'sbix'
* table to data for each individual bitmap strike. */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
index 1cc40ae53f..e022ef43b7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
@@ -62,7 +62,7 @@ struct SVGDocumentIndexEntry
* this index entry. */
HBUINT16 endGlyphID; /* The last glyph ID in the range described by
* this index entry. Must be >= startGlyphID. */
- LNNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset32To<UnsizedArrayOf<HBUINT8>>
svgDoc; /* Offset from the beginning of the SVG Document Index
* to an SVG document. Must be non-zero. */
HBUINT32 svgDocLength; /* Length of the SVG document.
@@ -107,7 +107,7 @@ struct SVG
protected:
HBUINT16 version; /* Table version (starting at 0). */
- LOffsetTo<SortedArrayOf<SVGDocumentIndexEntry>>
+ Offset32To<SortedArray16Of<SVGDocumentIndexEntry>>
svgDocEntries; /* Offset (relative to the start of the SVG table) to the
* SVG Documents Index. Must be non-zero. */
/* Array of SVG Document Index Entries. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
index 367e143fdf..ffbbb1bc53 100644
--- a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
@@ -40,7 +40,7 @@
/* This lists font tables that the hb_face_t will contain and lazily
* load. Don't add a table unless it's used though. This is not
- * exactly free. */
+ * exactly zero-cost. */
/* v--- Add new tables in the right place here. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-font.cc b/thirdparty/harfbuzz/src/hb-ot-font.cc
index fae7b5b65a..5c044c1c4f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-font.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-font.cc
@@ -253,9 +253,7 @@ hb_ot_get_font_v_extents (hb_font_t *font,
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_LINE_GAP, &metrics->line_gap);
}
-#if HB_USE_ATEXIT
-static void free_static_ot_funcs ();
-#endif
+static inline void free_static_ot_funcs ();
static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t>
{
@@ -281,21 +279,17 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
hb_font_funcs_make_immutable (funcs);
-#if HB_USE_ATEXIT
- atexit (free_static_ot_funcs);
-#endif
+ hb_atexit (free_static_ot_funcs);
return funcs;
}
} static_ot_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_ot_funcs ()
{
static_ot_funcs.free_instance ();
}
-#endif
static hb_font_funcs_t *
_hb_ot_get_font_funcs ()
diff --git a/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh b/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh
index 4f291924af..f2a9cad464 100644
--- a/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh
@@ -71,7 +71,7 @@ struct gasp
protected:
HBUINT16 version; /* Version number (set to 1) */
- ArrayOf<GaspRange>
+ Array16Of<GaspRange>
gaspRanges; /* Number of records to follow
* Sorted by ppem */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
index 5352156f02..ff7b9b2d25 100644
--- a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
@@ -45,6 +45,10 @@ namespace OT {
*/
#define HB_OT_TAG_loca HB_TAG('l','o','c','a')
+#ifndef HB_MAX_COMPOSITE_OPERATIONS
+#define HB_MAX_COMPOSITE_OPERATIONS 100000
+#endif
+
struct loca
{
@@ -98,7 +102,7 @@ struct glyf
unsigned num_offsets = padded_offsets.len () + 1;
bool use_short_loca = max_offset < 0x1FFFF;
unsigned entry_size = use_short_loca ? 2 : 4;
- char *loca_prime_data = (char *) calloc (entry_size, num_offsets);
+ char *loca_prime_data = (char *) hb_calloc (entry_size, num_offsets);
if (unlikely (!loca_prime_data)) return false;
@@ -115,7 +119,7 @@ struct glyf
entry_size * num_offsets,
HB_MEMORY_MODE_WRITABLE,
loca_prime_data,
- free);
+ hb_free);
bool result = plan->add_table (HB_OT_TAG_loca, loca_blob)
&& _add_head_and_set_loca_version (plan, use_short_loca);
@@ -209,10 +213,15 @@ struct glyf
if (!plan->old_gid_for_new_gid (new_gid, &subset_glyph.old_gid))
return subset_glyph;
- subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true);
- if (plan->drop_hints) subset_glyph.drop_hints_bytes ();
- else subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes ();
-
+ if (new_gid == 0 &&
+ !(plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE))
+ subset_glyph.source_glyph = Glyph ();
+ else
+ subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true);
+ if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ subset_glyph.drop_hints_bytes ();
+ else
+ subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes ();
return subset_glyph;
})
| hb_sink (glyphs)
@@ -281,6 +290,11 @@ struct glyf
hb_codepoint_t get_glyph_index () const { return glyphIndex; }
void drop_instructions_flag () { flags = (uint16_t) flags & ~WE_HAVE_INSTRUCTIONS; }
+ void set_overlaps_flag ()
+ {
+ flags = (uint16_t) flags | OVERLAP_COMPOUND;
+ }
+
bool has_instructions () const { return flags & WE_HAVE_INSTRUCTIONS; }
bool has_more () const { return flags & MORE_COMPONENTS; }
@@ -383,9 +397,12 @@ struct glyf
{
typedef const CompositeGlyphChain *__item_t__;
composite_iter_t (hb_bytes_t glyph_, __item_t__ current_) :
- glyph (glyph_), current (current_)
- { if (!check_range (current)) current = nullptr; }
- composite_iter_t () : glyph (hb_bytes_t ()), current (nullptr) {}
+ glyph (glyph_), current (nullptr), current_size (0)
+ {
+ set_next (current_);
+ }
+
+ composite_iter_t () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {}
const CompositeGlyphChain &__item__ () const { return *current; }
bool __more__ () const { return current; }
@@ -393,23 +410,36 @@ struct glyf
{
if (!current->has_more ()) { current = nullptr; return; }
- const CompositeGlyphChain *possible = &StructAfter<CompositeGlyphChain,
- CompositeGlyphChain> (*current);
- if (!check_range (possible)) { current = nullptr; return; }
- current = possible;
+ set_next (&StructAtOffset<CompositeGlyphChain> (current, current_size));
}
bool operator != (const composite_iter_t& o) const
{ return glyph != o.glyph || current != o.current; }
- bool check_range (const CompositeGlyphChain *composite) const
+
+ void set_next (const CompositeGlyphChain *composite)
{
- return glyph.check_range (composite, CompositeGlyphChain::min_size)
- && glyph.check_range (composite, composite->get_size ());
+ if (!glyph.check_range (composite, CompositeGlyphChain::min_size))
+ {
+ current = nullptr;
+ current_size = 0;
+ return;
+ }
+ unsigned size = composite->get_size ();
+ if (!glyph.check_range (composite, size))
+ {
+ current = nullptr;
+ current_size = 0;
+ return;
+ }
+
+ current = composite;
+ current_size = size;
}
private:
hb_bytes_t glyph;
__item_t__ current;
+ unsigned current_size;
};
enum phantom_point_index_t
@@ -427,14 +457,14 @@ struct glyf
{
enum simple_glyph_flag_t
{
- FLAG_ON_CURVE = 0x01,
- FLAG_X_SHORT = 0x02,
- FLAG_Y_SHORT = 0x04,
- FLAG_REPEAT = 0x08,
- FLAG_X_SAME = 0x10,
- FLAG_Y_SAME = 0x20,
- FLAG_RESERVED1 = 0x40,
- FLAG_RESERVED2 = 0x80
+ FLAG_ON_CURVE = 0x01,
+ FLAG_X_SHORT = 0x02,
+ FLAG_Y_SHORT = 0x04,
+ FLAG_REPEAT = 0x08,
+ FLAG_X_SAME = 0x10,
+ FLAG_Y_SAME = 0x20,
+ FLAG_OVERLAP_SIMPLE = 0x40,
+ FLAG_RESERVED2 = 0x80
};
private:
@@ -495,8 +525,8 @@ struct glyf
const Glyph trim_padding () const
{
/* based on FontTools _g_l_y_f.py::trim */
- const char *glyph = bytes.arrayZ;
- const char *glyph_end = glyph + bytes.length;
+ const uint8_t *glyph = (uint8_t*) bytes.arrayZ;
+ const uint8_t *glyph_end = glyph + bytes.length;
/* simple glyph w/contours, possibly trimmable */
glyph += instruction_len_offset ();
@@ -553,6 +583,17 @@ struct glyf
dest_end = bytes.sub_array (glyph_length, bytes.length - glyph_length);
}
+ void set_overlaps_flag ()
+ {
+ if (unlikely (!header.numberOfContours)) return;
+
+ unsigned flags_offset = length (instructions_length ());
+ if (unlikely (length (flags_offset + 1) > bytes.length)) return;
+
+ HBUINT8 &first_flag = (HBUINT8 &) StructAtOffset<HBUINT16> (&bytes, flags_offset);
+ first_flag = (uint8_t) first_flag | FLAG_OVERLAP_SIMPLE;
+ }
+
static bool read_points (const HBUINT8 *&p /* IN/OUT */,
contour_point_vector_t &points_ /* IN/OUT */,
const hb_bytes_t &bytes,
@@ -666,6 +707,12 @@ struct glyf
/* Chop instructions off the end */
void drop_hints_bytes (hb_bytes_t &dest_start) const
{ dest_start = bytes.sub_array (0, bytes.length - instructions_length (bytes)); }
+
+ void set_overlaps_flag ()
+ {
+ const_cast<CompositeGlyphChain &> (StructAfter<CompositeGlyphChain, GlyphHeader> (header))
+ .set_overlaps_flag ();
+ }
};
enum glyph_type_t { EMPTY, SIMPLE, COMPOSITE };
@@ -695,6 +742,15 @@ struct glyf
}
}
+ void set_overlaps_flag ()
+ {
+ switch (type) {
+ case COMPOSITE: CompositeGlyph (*header, bytes).set_overlaps_flag (); return;
+ case SIMPLE: SimpleGlyph (*header, bytes).set_overlaps_flag (); return;
+ default: return;
+ }
+ }
+
void drop_hints_bytes (hb_bytes_t &dest_start, hb_bytes_t &dest_end) const
{
switch (type) {
@@ -886,7 +942,7 @@ struct glyf
{
if (gid >= num_glyphs) return false;
- /* Making this alloc free is not that easy
+ /* Making this allocfree is not that easy
https://github.com/harfbuzz/harfbuzz/issues/2095
mostly because of gvar handling in VF fonts,
perhaps a separate path for non-VF fonts can be considered */
@@ -1045,18 +1101,28 @@ struct glyf
return needs_padding_removal ? glyph.trim_padding () : glyph;
}
- void
- add_gid_and_children (hb_codepoint_t gid, hb_set_t *gids_to_retain,
- unsigned int depth = 0) const
+ unsigned
+ add_gid_and_children (hb_codepoint_t gid,
+ hb_set_t *gids_to_retain,
+ unsigned depth = 0,
+ unsigned operation_count = 0) const
{
- if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return;
+ if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return operation_count;
+ if (unlikely (operation_count++ > HB_MAX_COMPOSITE_OPERATIONS)) return operation_count;
/* Check if is already visited */
- if (gids_to_retain->has (gid)) return;
+ if (gids_to_retain->has (gid)) return operation_count;
gids_to_retain->add (gid);
- for (auto &item : glyph_for_gid (gid).get_composite_iterator ())
- add_gid_and_children (item.get_glyph_index (), gids_to_retain, depth);
+ auto it = glyph_for_gid (gid).get_composite_iterator ();
+ while (it)
+ {
+ auto item = *(it++);
+ operation_count +=
+ add_gid_and_children (item.get_glyph_index (), gids_to_retain, depth, operation_count);
+ }
+
+ return operation_count;
}
#ifdef HB_EXPERIMENTAL_API
@@ -1230,7 +1296,11 @@ struct glyf
const_cast<CompositeGlyphChain &> (_).set_glyph_index (new_gid);
}
- if (plan->drop_hints) Glyph (dest_glyph).drop_hints ();
+ if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ Glyph (dest_glyph).drop_hints ();
+
+ if (plan->flags & HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG)
+ Glyph (dest_glyph).set_overlaps_flag ();
return_trace (true);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh
index c9c391bad5..dea2b7e29a 100644
--- a/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh
@@ -52,7 +52,7 @@ struct DeviceRecord
unsigned length = it.len ();
- if (unlikely (!c->extend (*this, length))) return_trace (false);
+ if (unlikely (!c->extend (this, length))) return_trace (false);
this->pixelSize = pixelSize;
this->maxWidth =
@@ -110,7 +110,7 @@ struct hdmx
for (const hb_item_type<Iterator>& _ : +it)
c->start_embed<DeviceRecord> ()->serialize (c, _.first, _.second);
- return_trace (c->successful);
+ return_trace (c->successful ());
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
index d06c0fa4a4..4038329938 100644
--- a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
@@ -146,7 +146,7 @@ struct hmtxvmtx
_mtx.fini ();
- if (unlikely (c->serializer->ran_out_of_room || c->serializer->in_error ()))
+ if (unlikely (c->serializer->in_error ()))
return_trace (false);
// Amend header num hmetrics
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
index 4df0d942ce..492947751e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh
@@ -103,7 +103,7 @@ struct BaseCoordFormat3
protected:
HBUINT16 format; /* Format identifier--format = 3 */
FWORD coordinate; /* X or Y value, in design units */
- OffsetTo<Device>
+ Offset16To<Device>
deviceTable; /* Offset to Device table for X or
* Y value, from beginning of
* BaseCoord table (may be NULL). */
@@ -173,11 +173,11 @@ struct FeatMinMaxRecord
protected:
Tag tag; /* 4-byte feature identification tag--must
* match feature tag in FeatureList */
- OffsetTo<BaseCoord>
+ Offset16To<BaseCoord>
minCoord; /* Offset to BaseCoord table that defines
* the minimum extent value, from beginning
* of MinMax table (may be NULL) */
- OffsetTo<BaseCoord>
+ Offset16To<BaseCoord>
maxCoord; /* Offset to BaseCoord table that defines
* the maximum extent value, from beginning
* of MinMax table (may be NULL) */
@@ -212,15 +212,15 @@ struct MinMax
}
protected:
- OffsetTo<BaseCoord>
+ Offset16To<BaseCoord>
minCoord; /* Offset to BaseCoord table that defines
* minimum extent value, from the beginning
* of MinMax table (may be NULL) */
- OffsetTo<BaseCoord>
+ Offset16To<BaseCoord>
maxCoord; /* Offset to BaseCoord table that defines
* maximum extent value, from the beginning
* of MinMax table (may be NULL) */
- SortedArrayOf<FeatMinMaxRecord>
+ SortedArray16Of<FeatMinMaxRecord>
featMinMaxRecords;
/* Array of FeatMinMaxRecords, in alphabetical
* order by featureTableTag */
@@ -247,7 +247,7 @@ struct BaseValues
Index defaultIndex; /* Index number of default baseline for this
* script — equals index position of baseline tag
* in baselineTags array of the BaseTagList */
- OffsetArrayOf<BaseCoord>
+ Array16OfOffset16To<BaseCoord>
baseCoords; /* Number of BaseCoord tables defined — should equal
* baseTagCount in the BaseTagList
*
@@ -275,7 +275,7 @@ struct BaseLangSysRecord
protected:
Tag baseLangSysTag; /* 4-byte language system identification tag */
- OffsetTo<MinMax>
+ Offset16To<MinMax>
minMax; /* Offset to MinMax table, from beginning
* of BaseScript table */
public:
@@ -305,13 +305,13 @@ struct BaseScript
}
protected:
- OffsetTo<BaseValues>
+ Offset16To<BaseValues>
baseValues; /* Offset to BaseValues table, from beginning
* of BaseScript table (may be NULL) */
- OffsetTo<MinMax>
+ Offset16To<MinMax>
defaultMinMax; /* Offset to MinMax table, from beginning of
* BaseScript table (may be NULL) */
- SortedArrayOf<BaseLangSysRecord>
+ SortedArray16Of<BaseLangSysRecord>
baseLangSysRecords;
/* Number of BaseLangSysRecords
* defined — may be zero (0) */
@@ -339,7 +339,7 @@ struct BaseScriptRecord
protected:
Tag baseScriptTag; /* 4-byte script identification tag */
- OffsetTo<BaseScript>
+ Offset16To<BaseScript>
baseScript; /* Offset to BaseScript table, from beginning
* of BaseScriptList */
@@ -364,7 +364,7 @@ struct BaseScriptList
}
protected:
- SortedArrayOf<BaseScriptRecord>
+ SortedArray16Of<BaseScriptRecord>
baseScriptRecords;
public:
@@ -426,12 +426,12 @@ struct Axis
}
protected:
- OffsetTo<SortedArrayOf<Tag>>
+ Offset16To<SortedArray16Of<Tag>>
baseTagList; /* Offset to BaseTagList table, from beginning
* of Axis table (may be NULL)
* Array of 4-byte baseline identification tags — must
* be in alphabetical order */
- OffsetTo<BaseScriptList>
+ Offset16To<BaseScriptList>
baseScriptList; /* Offset to BaseScriptList table, from beginning
* of Axis table
* Array of BaseScriptRecords, in alphabetical order
@@ -501,11 +501,11 @@ struct BASE
protected:
FixedVersion<>version; /* Version of the BASE table */
- OffsetTo<Axis>hAxis; /* Offset to horizontal Axis table, from beginning
+ Offset16To<Axis>hAxis; /* Offset to horizontal Axis table, from beginning
* of BASE table (may be NULL) */
- OffsetTo<Axis>vAxis; /* Offset to vertical Axis table, from beginning
+ Offset16To<Axis>vAxis; /* Offset to vertical Axis table, from beginning
* of BASE table (may be NULL) */
- LOffsetTo<VariationStore>
+ Offset32To<VariationStore>
varStore; /* Offset to the table of Item Variation
* Store--from beginning of BASE
* header (may be NULL). Introduced
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
index 0ba7e3c061..65f499a00d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
@@ -88,12 +88,66 @@ static inline void ClassDef_serialize (hb_serialize_context_t *c,
Iterator it);
static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
- const hb_set_t &glyphset,
const hb_map_t &gid_klass_map,
hb_sorted_vector_t<HBGlyphID> &glyphs,
const hb_set_t &klasses,
+ bool use_class_zero,
hb_map_t *klass_map /*INOUT*/);
+
+struct hb_prune_langsys_context_t
+{
+ hb_prune_langsys_context_t (const void *table_,
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map_,
+ const hb_map_t *duplicate_feature_map_,
+ hb_set_t *new_collected_feature_indexes_)
+ :table (table_),
+ script_langsys_map (script_langsys_map_),
+ duplicate_feature_map (duplicate_feature_map_),
+ new_feature_indexes (new_collected_feature_indexes_),
+ script_count (0),langsys_count (0) {}
+
+ bool visitedScript (const void *s)
+ {
+ if (script_count++ > HB_MAX_SCRIPTS)
+ return true;
+
+ return visited (s, visited_script);
+ }
+
+ bool visitedLangsys (const void *l)
+ {
+ if (langsys_count++ > HB_MAX_LANGSYS)
+ return true;
+
+ return visited (l, visited_langsys);
+ }
+
+ private:
+ template <typename T>
+ bool visited (const T *p, hb_set_t &visited_set)
+ {
+ hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) p - (uintptr_t) table);
+ if (visited_set.has (delta))
+ return true;
+
+ visited_set.add (delta);
+ return false;
+ }
+
+ public:
+ const void *table;
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map;
+ const hb_map_t *duplicate_feature_map;
+ hb_set_t *new_feature_indexes;
+
+ private:
+ hb_set_t visited_script;
+ hb_set_t visited_langsys;
+ unsigned script_count;
+ unsigned langsys_count;
+};
+
struct hb_subset_layout_context_t :
hb_dispatch_context_t<hb_subset_layout_context_t, hb_empty_t, HB_DEBUG_SUBSET>
{
@@ -125,16 +179,21 @@ struct hb_subset_layout_context_t :
hb_subset_context_t *subset_context;
const hb_tag_t table_tag;
const hb_map_t *lookup_index_map;
+ const hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map;
const hb_map_t *feature_index_map;
+ unsigned cur_script_index;
hb_subset_layout_context_t (hb_subset_context_t *c_,
hb_tag_t tag_,
hb_map_t *lookup_map_,
- hb_map_t *feature_map_) :
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map_,
+ hb_map_t *feature_index_map_) :
subset_context (c_),
table_tag (tag_),
lookup_index_map (lookup_map_),
- feature_index_map (feature_map_),
+ script_langsys_map (script_langsys_map_),
+ feature_index_map (feature_index_map_),
+ cur_script_index (0xFFFFu),
script_count (0),
langsys_count (0),
feature_index_count (0),
@@ -325,7 +384,7 @@ struct Record
}
Tag tag; /* 4-byte Tag identifier */
- OffsetTo<Type>
+ Offset16To<Type>
offset; /* Offset from beginning of object holding
* the Record */
public:
@@ -333,11 +392,11 @@ struct Record
};
template <typename Type>
-struct RecordArrayOf : SortedArrayOf<Record<Type>>
+struct RecordArrayOf : SortedArray16Of<Record<Type>>
{
- const OffsetTo<Type>& get_offset (unsigned int i) const
+ const Offset16To<Type>& get_offset (unsigned int i) const
{ return (*this)[i].offset; }
- OffsetTo<Type>& get_offset (unsigned int i)
+ Offset16To<Type>& get_offset (unsigned int i)
{ return (*this)[i].offset; }
const Tag& get_tag (unsigned int i) const
{ return (*this)[i].tag; }
@@ -356,7 +415,7 @@ struct RecordArrayOf : SortedArrayOf<Record<Type>>
}
bool find_index (hb_tag_t tag, unsigned int *index) const
{
- return this->bfind (tag, index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
+ return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
}
};
@@ -407,6 +466,30 @@ struct RecordListOfFeature : RecordListOf<Feature>
}
};
+struct Script;
+struct RecordListOfScript : RecordListOf<Script>
+{
+ bool subset (hb_subset_context_t *c,
+ hb_subset_layout_context_t *l) const
+ {
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->start_embed (*this);
+ if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
+
+ unsigned count = this->len;
+ for (auto _ : + hb_zip (*this, hb_range (count)))
+ {
+ auto snap = c->serializer->snapshot ();
+ l->cur_script_index = _.second;
+ bool ret = _.first.subset (l, this);
+ if (!ret) c->serializer->revert (snap);
+ else out->len++;
+ }
+
+ return_trace (true);
+ }
+};
+
struct RangeRecord
{
int cmp (hb_codepoint_t g) const
@@ -434,7 +517,7 @@ struct RangeRecord
DECLARE_NULL_NAMESPACE_BYTES (OT, RangeRecord);
-struct IndexArray : ArrayOf<Index>
+struct IndexArray : Array16Of<Index>
{
bool intersects (const hb_map_t *indexes) const
{ return hb_any (*this, indexes); }
@@ -474,7 +557,7 @@ struct IndexArray : ArrayOf<Index>
void add_indexes_to (hb_set_t* output /* OUT */) const
{
- output->add_array (arrayZ, len);
+ output->add_array (as_array ());
}
};
@@ -506,18 +589,46 @@ struct LangSys
return_trace (c->embed (*this));
}
- bool operator == (const LangSys& o) const
+ bool compare (const LangSys& o, const hb_map_t *feature_index_map) const
{
- if (featureIndex.len != o.featureIndex.len ||
- reqFeatureIndex != o.reqFeatureIndex)
+ if (reqFeatureIndex != o.reqFeatureIndex)
+ return false;
+
+ auto iter =
+ + hb_iter (featureIndex)
+ | hb_filter (feature_index_map)
+ | hb_map (feature_index_map)
+ ;
+
+ auto o_iter =
+ + hb_iter (o.featureIndex)
+ | hb_filter (feature_index_map)
+ | hb_map (feature_index_map)
+ ;
+
+ if (iter.len () != o_iter.len ())
return false;
- for (const auto _ : + hb_zip (featureIndex, o.featureIndex))
+ for (const auto _ : + hb_zip (iter, o_iter))
if (_.first != _.second) return false;
return true;
}
+ void collect_features (hb_prune_langsys_context_t *c) const
+ {
+ if (!has_required_feature () && !get_feature_count ()) return;
+ if (c->visitedLangsys (this)) return;
+ if (has_required_feature () &&
+ c->duplicate_feature_map->has (reqFeatureIndex))
+ c->new_feature_indexes->add (get_required_feature_index ());
+
+ + hb_iter (featureIndex)
+ | hb_filter (c->duplicate_feature_map)
+ | hb_sink (c->new_feature_indexes)
+ ;
+ }
+
bool subset (hb_subset_context_t *c,
hb_subset_layout_context_t *l,
const Tag *tag = nullptr) const
@@ -581,6 +692,49 @@ struct Script
bool has_default_lang_sys () const { return defaultLangSys != 0; }
const LangSys& get_default_lang_sys () const { return this+defaultLangSys; }
+ void prune_langsys (hb_prune_langsys_context_t *c,
+ unsigned script_index) const
+ {
+ if (!has_default_lang_sys () && !get_lang_sys_count ()) return;
+ if (c->visitedScript (this)) return;
+
+ if (!c->script_langsys_map->has (script_index))
+ {
+ hb_set_t* empty_set = hb_set_create ();
+ if (unlikely (!c->script_langsys_map->set (script_index, empty_set)))
+ {
+ hb_set_destroy (empty_set);
+ return;
+ }
+ }
+
+ unsigned langsys_count = get_lang_sys_count ();
+ if (has_default_lang_sys ())
+ {
+ //only collect features from non-redundant langsys
+ const LangSys& d = get_default_lang_sys ();
+ d.collect_features (c);
+
+ for (auto _ : + hb_zip (langSys, hb_range (langsys_count)))
+ {
+ const LangSys& l = this+_.first.offset;
+ if (l.compare (d, c->duplicate_feature_map)) continue;
+
+ l.collect_features (c);
+ c->script_langsys_map->get (script_index)->add (_.second);
+ }
+ }
+ else
+ {
+ for (auto _ : + hb_zip (langSys, hb_range (langsys_count)))
+ {
+ const LangSys& l = this+_.first.offset;
+ l.collect_features (c);
+ c->script_langsys_map->get (script_index)->add (_.second);
+ }
+ }
+ }
+
bool subset (hb_subset_context_t *c,
hb_subset_layout_context_t *l,
const Tag *tag) const
@@ -609,16 +763,17 @@ struct Script
}
}
- + langSys.iter ()
- | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); })
- | hb_filter ([&] (const Record<LangSys>& record)
- {
- const LangSys& d = this+defaultLangSys;
- const LangSys& l = this+record.offset;
- return !(l == d);
- })
- | hb_apply (subset_record_array (l, &(out->langSys), this))
- ;
+ const hb_set_t *active_langsys = l->script_langsys_map->get (l->cur_script_index);
+ if (active_langsys)
+ {
+ unsigned count = langSys.len;
+ + hb_zip (langSys, hb_range (count))
+ | hb_filter (active_langsys, hb_second)
+ | hb_map (hb_first)
+ | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); })
+ | hb_apply (subset_record_array (l, &(out->langSys), this))
+ ;
+ }
return_trace (bool (out->langSys.len) || defaultLang || l->table_tag == HB_OT_TAG_GSUB);
}
@@ -631,7 +786,7 @@ struct Script
}
protected:
- OffsetTo<LangSys>
+ Offset16To<LangSys>
defaultLangSys; /* Offset to DefaultLangSys table--from
* beginning of Script table--may be Null */
RecordArrayOf<LangSys>
@@ -641,7 +796,7 @@ struct Script
DEFINE_SIZE_ARRAY_SIZED (4, langSys);
};
-typedef RecordListOf<Script> ScriptList;
+typedef RecordListOfScript ScriptList;
/* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
@@ -856,7 +1011,7 @@ struct FeatureParamsCharacterVariants
* user-interface labels for the
* feature parameters. (Must be zero
* if numParameters is zero.) */
- ArrayOf<HBUINT24>
+ Array16Of<HBUINT24>
characters; /* Array of the Unicode Scalar Value
* of the characters for which this
* feature provides glyph variants.
@@ -953,7 +1108,7 @@ struct Feature
auto *out = c->serializer->start_embed (*this);
if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false);
- bool subset_featureParams = out->featureParams.serialize_subset (c, featureParams, this, tag);
+ out->featureParams.serialize_subset (c, featureParams, this, tag);
auto it =
+ hb_iter (lookupIndex)
@@ -962,8 +1117,9 @@ struct Feature
;
out->lookupIndex.serialize (c->serializer, l, it);
- return_trace (bool (it) || subset_featureParams
- || (tag && *tag == HB_TAG ('p', 'r', 'e', 'f')));
+ // The decision to keep or drop this feature is already made before we get here
+ // so always retain it.
+ return_trace (true);
}
bool sanitize (hb_sanitize_context_t *c,
@@ -998,7 +1154,7 @@ struct Feature
unsigned int new_offset_int = orig_offset -
(((char *) this) - ((char *) closure->list_base));
- OffsetTo<FeatureParams> new_offset;
+ Offset16To<FeatureParams> new_offset;
/* Check that it would not overflow. */
new_offset = new_offset_int;
if (new_offset == new_offset_int &&
@@ -1010,7 +1166,7 @@ struct Feature
return_trace (true);
}
- OffsetTo<FeatureParams>
+ Offset16To<FeatureParams>
featureParams; /* Offset to Feature Parameters table (if one
* has been defined for the feature), relative
* to the beginning of the Feature Table; = Null
@@ -1049,11 +1205,11 @@ struct Lookup
unsigned int get_subtable_count () const { return subTable.len; }
template <typename TSubTable>
- const OffsetArrayOf<TSubTable>& get_subtables () const
- { return reinterpret_cast<const OffsetArrayOf<TSubTable> &> (subTable); }
+ const Array16OfOffset16To<TSubTable>& get_subtables () const
+ { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); }
template <typename TSubTable>
- OffsetArrayOf<TSubTable>& get_subtables ()
- { return reinterpret_cast<OffsetArrayOf<TSubTable> &> (subTable); }
+ Array16OfOffset16To<TSubTable>& get_subtables ()
+ { return reinterpret_cast<Array16OfOffset16To<TSubTable> &> (subTable); }
template <typename TSubTable>
const TSubTable& get_subtable (unsigned int i) const
@@ -1106,13 +1262,13 @@ struct Lookup
unsigned int num_subtables)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
lookupType = lookup_type;
lookupFlag = lookup_props & 0xFFFFu;
if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
if (lookupFlag & LookupFlag::UseMarkFilteringSet)
{
- if (unlikely (!c->extend (*this))) return_trace (false);
+ if (unlikely (!c->extend (this))) return_trace (false);
HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
markFilteringSet = lookup_props >> 16;
}
@@ -1131,10 +1287,18 @@ struct Lookup
const hb_set_t *glyphset = c->plan->glyphset_gsub ();
unsigned int lookup_type = get_type ();
+ hb_iter (get_subtables <TSubTable> ())
- | hb_filter ([this, glyphset, lookup_type] (const OffsetTo<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); })
+ | hb_filter ([this, glyphset, lookup_type] (const Offset16To<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); })
| hb_apply (subset_offset_array (c, out->get_subtables<TSubTable> (), this, lookup_type))
;
+ if (lookupFlag & LookupFlag::UseMarkFilteringSet)
+ {
+ if (unlikely (!c->serializer->extend (out))) return_trace (false);
+ const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
+ HBUINT16 &outMarkFilteringSet = StructAfter<HBUINT16> (out->subTable);
+ outMarkFilteringSet = markFilteringSet;
+ }
+
return_trace (true);
}
@@ -1179,7 +1343,7 @@ struct Lookup
private:
HBUINT16 lookupType; /* Different enumerations for GSUB and GPOS */
HBUINT16 lookupFlag; /* Lookup qualifiers */
- ArrayOf<Offset16>
+ Array16Of<Offset16>
subTable; /* Array of SubTables */
/*HBUINT16 markFilteringSetX[HB_VAR_ARRAY];*//* Index (base 0) into GDEF mark glyph sets
* structure. This field is only present if bit
@@ -1188,10 +1352,10 @@ struct Lookup
DEFINE_SIZE_ARRAY (6, subTable);
};
-typedef OffsetListOf<Lookup> LookupList;
+typedef List16OfOffset16To<Lookup> LookupList;
template <typename TLookup>
-struct LookupOffsetList : OffsetListOf<TLookup>
+struct LookupOffsetList : List16OfOffset16To<TLookup>
{
bool subset (hb_subset_context_t *c,
hb_subset_layout_context_t *l) const
@@ -1212,7 +1376,7 @@ struct LookupOffsetList : OffsetListOf<TLookup>
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (OffsetListOf<TLookup>::sanitize (c, this));
+ return_trace (List16OfOffset16To<TLookup>::sanitize (c, this));
}
};
@@ -1229,7 +1393,7 @@ struct CoverageFormat1
unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
unsigned int i;
- glyphArray.bfind (glyph_id, &i, HB_BFIND_NOT_FOUND_STORE, NOT_COVERED);
+ glyphArray.bfind (glyph_id, &i, HB_NOT_FOUND_STORE, NOT_COVERED);
return i;
}
@@ -1250,19 +1414,25 @@ struct CoverageFormat1
bool intersects (const hb_set_t *glyphs) const
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
- unsigned int count = glyphArray.len;
- const HBGlyphID *arr = glyphArray.arrayZ;
- for (unsigned int i = 0; i < count; i++)
- if (glyphs->has (arr[i]))
+ for (const auto& g : glyphArray.as_array ())
+ if (glyphs->has (g))
return true;
return false;
}
bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
{ return glyphs->has (glyphArray[index]); }
+ void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const
+ {
+ unsigned count = glyphArray.len;
+ for (unsigned i = 0; i < count; i++)
+ if (glyphs->has (glyphArray[i]))
+ intersect_glyphs->add (glyphArray[i]);
+ }
+
template <typename set_t>
bool collect_coverage (set_t *glyphs) const
- { return glyphs->add_sorted_array (glyphArray.arrayZ, glyphArray.len); }
+ { return glyphs->add_sorted_array (glyphArray.as_array ()); }
public:
/* Older compilers need this to be public. */
@@ -1284,7 +1454,7 @@ struct CoverageFormat1
protected:
HBUINT16 coverageFormat; /* Format identifier--format = 1 */
- SortedArrayOf<HBGlyphID>
+ SortedArray16Of<HBGlyphID>
glyphArray; /* Array of GlyphIDs--in numerical order */
public:
DEFINE_SIZE_ARRAY (4, glyphArray);
@@ -1308,7 +1478,7 @@ struct CoverageFormat2
bool serialize (hb_serialize_context_t *c, Iterator glyphs)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!glyphs))
{
@@ -1358,20 +1528,16 @@ struct CoverageFormat2
{
/* TODO Speed up, using hb_set_next() and bsearch()? */
/* TODO(iter) Rewrite as dagger. */
- unsigned count = rangeRecord.len;
- const RangeRecord *arr = rangeRecord.arrayZ;
- for (unsigned i = 0; i < count; i++)
- if (arr[i].intersects (glyphs))
+ for (const auto& range : rangeRecord.as_array ())
+ if (range.intersects (glyphs))
return true;
return false;
}
bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const
{
/* TODO(iter) Rewrite as dagger. */
- unsigned count = rangeRecord.len;
- const RangeRecord *arr = rangeRecord.arrayZ;
- for (unsigned i = 0; i < count; i++) {
- const RangeRecord &range = arr[i];
+ for (const auto& range : rangeRecord.as_array ())
+ {
if (range.value <= index &&
index < (unsigned int) range.value + (range.last - range.first) &&
range.intersects (glyphs))
@@ -1382,6 +1548,16 @@ struct CoverageFormat2
return false;
}
+ void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const
+ {
+ for (const auto& range : rangeRecord.as_array ())
+ {
+ if (!range.intersects (glyphs)) continue;
+ for (hb_codepoint_t g = range.first; g <= range.last; g++)
+ if (glyphs->has (g)) intersect_glyphs->add (g);
+ }
+ }
+
template <typename set_t>
bool collect_coverage (set_t *glyphs) const
{
@@ -1448,7 +1624,7 @@ struct CoverageFormat2
protected:
HBUINT16 coverageFormat; /* Format identifier--format = 2 */
- SortedArrayOf<RangeRecord>
+ SortedArray16Of<RangeRecord>
rangeRecord; /* Array of glyph ranges--ordered by
* Start GlyphID. rangeCount entries
* long */
@@ -1481,7 +1657,7 @@ struct Coverage
bool serialize (hb_serialize_context_t *c, Iterator glyphs)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
unsigned count = 0;
unsigned num_ranges = 0;
@@ -1564,6 +1740,16 @@ struct Coverage
}
}
+ void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const
+ {
+ switch (u.format)
+ {
+ case 1: return u.format1.intersected_coverage_glyphs (glyphs, intersect_glyphs);
+ case 2: return u.format2.intersected_coverage_glyphs (glyphs, intersect_glyphs);
+ default:return ;
+ }
+ }
+
struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
{
static constexpr bool is_sorted_iterator = true;
@@ -1645,10 +1831,10 @@ Coverage_serialize (hb_serialize_context_t *c,
{ c->start_embed<Coverage> ()->serialize (c, it); }
static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
- const hb_set_t &glyphset,
const hb_map_t &gid_klass_map,
hb_sorted_vector_t<HBGlyphID> &glyphs,
const hb_set_t &klasses,
+ bool use_class_zero,
hb_map_t *klass_map /*INOUT*/)
{
if (!klass_map)
@@ -1660,7 +1846,7 @@ static void ClassDef_remap_and_serialize (hb_serialize_context_t *c,
/* any glyph not assigned a class value falls into Class zero (0),
* if any glyph assigned to class 0, remapping must start with 0->0*/
- if (glyphset.get_population () > gid_klass_map.get_population ())
+ if (!use_class_zero)
klass_map->set (0, 0);
unsigned idx = klass_map->has (0) ? 1 : 0;
@@ -1704,10 +1890,11 @@ struct ClassDefFormat1
Iterator it)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!it))
{
+ classFormat = 1;
startGlyph = 0;
classValue.len = 0;
return_trace (true);
@@ -1730,7 +1917,10 @@ struct ClassDefFormat1
}
bool subset (hb_subset_context_t *c,
- hb_map_t *klass_map = nullptr /*OUT*/) const
+ hb_map_t *klass_map = nullptr /*OUT*/,
+ bool keep_empty_table = true,
+ bool use_class_zero = true,
+ const Coverage* glyph_filter = nullptr) const
{
TRACE_SUBSET (this);
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
@@ -1742,9 +1932,12 @@ struct ClassDefFormat1
hb_codepoint_t start = startGlyph;
hb_codepoint_t end = start + classValue.len;
+
for (const hb_codepoint_t gid : + hb_range (start, end)
- | hb_filter (glyphset))
+ | hb_filter (glyphset))
{
+ if (glyph_filter && !glyph_filter->has(gid)) continue;
+
unsigned klass = classValue[gid - start];
if (!klass) continue;
@@ -1753,9 +1946,13 @@ struct ClassDefFormat1
orig_klasses.add (klass);
}
- ClassDef_remap_and_serialize (c->serializer, glyphset, gid_org_klass_map,
- glyphs, orig_klasses, klass_map);
- return_trace ((bool) glyphs);
+ unsigned glyph_count = glyph_filter
+ ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter))
+ : glyphset.get_population ();
+ use_class_zero = use_class_zero && glyph_count <= gid_org_klass_map.get_population ();
+ ClassDef_remap_and_serialize (c->serializer, gid_org_klass_map,
+ glyphs, orig_klasses, use_class_zero, klass_map);
+ return_trace (keep_empty_table || (bool) glyphs);
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -1829,10 +2026,28 @@ struct ClassDefFormat1
return false;
}
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
+ {
+ unsigned count = classValue.len;
+ if (klass == 0)
+ {
+ hb_codepoint_t endGlyph = startGlyph + count -1;
+ for (hb_codepoint_t g : glyphs->iter ())
+ if (g < startGlyph || g > endGlyph)
+ intersect_glyphs->add (g);
+
+ return;
+ }
+
+ for (unsigned i = 0; i < count; i++)
+ if (classValue[i] == klass && glyphs->has (startGlyph + i))
+ intersect_glyphs->add (startGlyph + i);
+ }
+
protected:
HBUINT16 classFormat; /* Format identifier--format = 1 */
HBGlyphID startGlyph; /* First GlyphID of the classValueArray */
- ArrayOf<HBUINT16>
+ Array16Of<HBUINT16>
classValue; /* Array of Class Values--one per GlyphID */
public:
DEFINE_SIZE_ARRAY (6, classValue);
@@ -1854,10 +2069,11 @@ struct ClassDefFormat2
Iterator it)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!it))
{
+ classFormat = 2;
rangeRecord.len = 0;
return_trace (true);
}
@@ -1903,7 +2119,10 @@ struct ClassDefFormat2
}
bool subset (hb_subset_context_t *c,
- hb_map_t *klass_map = nullptr /*OUT*/) const
+ hb_map_t *klass_map = nullptr /*OUT*/,
+ bool keep_empty_table = true,
+ bool use_class_zero = true,
+ const Coverage* glyph_filter = nullptr) const
{
TRACE_SUBSET (this);
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
@@ -1923,15 +2142,20 @@ struct ClassDefFormat2
for (hb_codepoint_t g = start; g < end; g++)
{
if (!glyphset.has (g)) continue;
+ if (glyph_filter && !glyph_filter->has (g)) continue;
glyphs.push (glyph_map[g]);
gid_org_klass_map.set (glyph_map[g], klass);
orig_klasses.add (klass);
}
}
- ClassDef_remap_and_serialize (c->serializer, glyphset, gid_org_klass_map,
- glyphs, orig_klasses, klass_map);
- return_trace ((bool) glyphs);
+ unsigned glyph_count = glyph_filter
+ ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter))
+ : glyphset.get_population ();
+ use_class_zero = use_class_zero && glyph_count <= gid_org_klass_map.get_population ();
+ ClassDef_remap_and_serialize (c->serializer, gid_org_klass_map,
+ glyphs, orig_klasses, use_class_zero, klass_map);
+ return_trace (keep_empty_table || (bool) glyphs);
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -2005,9 +2229,57 @@ struct ClassDefFormat2
return false;
}
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
+ {
+ unsigned count = rangeRecord.len;
+ if (klass == 0)
+ {
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (!hb_set_next (glyphs, &g))
+ break;
+ while (g != HB_SET_VALUE_INVALID && g < rangeRecord[i].first)
+ {
+ intersect_glyphs->add (g);
+ hb_set_next (glyphs, &g);
+ }
+ g = rangeRecord[i].last;
+ }
+ while (g != HB_SET_VALUE_INVALID && hb_set_next (glyphs, &g))
+ intersect_glyphs->add (g);
+
+ return;
+ }
+
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (rangeRecord[i].value != klass) continue;
+
+ if (g != HB_SET_VALUE_INVALID)
+ {
+ if (g >= rangeRecord[i].first &&
+ g <= rangeRecord[i].last)
+ intersect_glyphs->add (g);
+ if (g > rangeRecord[i].last)
+ continue;
+ }
+
+ g = rangeRecord[i].first - 1;
+ while (hb_set_next (glyphs, &g))
+ {
+ if (g >= rangeRecord[i].first && g <= rangeRecord[i].last)
+ intersect_glyphs->add (g);
+ else if (g > rangeRecord[i].last)
+ break;
+ }
+ }
+ }
+
protected:
HBUINT16 classFormat; /* Format identifier--format = 2 */
- SortedArrayOf<RangeRecord>
+ SortedArray16Of<RangeRecord>
rangeRecord; /* Array of glyph ranges--ordered by
* Start GlyphID */
public:
@@ -2036,19 +2308,20 @@ struct ClassDef
template<typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
- bool serialize (hb_serialize_context_t *c, Iterator it)
+ bool serialize (hb_serialize_context_t *c, Iterator it_with_class_zero)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+
+ auto it = + it_with_class_zero | hb_filter (hb_second);
unsigned format = 2;
if (likely (it))
{
hb_codepoint_t glyph_min = (*it).first;
- hb_codepoint_t glyph_max = + it
- | hb_map (hb_first)
- | hb_reduce (hb_max, 0u);
+ hb_codepoint_t glyph_max = glyph_min;
+ unsigned num_glyphs = 0;
unsigned num_ranges = 1;
hb_codepoint_t prev_gid = glyph_min;
unsigned prev_klass = (*it).second;
@@ -2057,7 +2330,9 @@ struct ClassDef
{
hb_codepoint_t cur_gid = gid_klass_pair.first;
unsigned cur_klass = gid_klass_pair.second;
- if (cur_gid == glyph_min || !cur_klass) continue;
+ num_glyphs++;
+ if (cur_gid == glyph_min) continue;
+ if (cur_gid > glyph_max) glyph_max = cur_gid;
if (cur_gid != prev_gid + 1 ||
cur_klass != prev_klass)
num_ranges++;
@@ -2066,7 +2341,7 @@ struct ClassDef
prev_klass = cur_klass;
}
- if (1 + (glyph_max - glyph_min + 1) <= num_ranges * 3)
+ if (num_glyphs && 1 + (glyph_max - glyph_min + 1) <= num_ranges * 3)
format = 1;
}
u.format = format;
@@ -2080,12 +2355,15 @@ struct ClassDef
}
bool subset (hb_subset_context_t *c,
- hb_map_t *klass_map = nullptr /*OUT*/) const
+ hb_map_t *klass_map = nullptr /*OUT*/,
+ bool keep_empty_table = true,
+ bool use_class_zero = true,
+ const Coverage* glyph_filter = nullptr) const
{
TRACE_SUBSET (this);
switch (u.format) {
- case 1: return_trace (u.format1.subset (c, klass_map));
- case 2: return_trace (u.format2.subset (c, klass_map));
+ case 1: return_trace (u.format1.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
+ case 2: return_trace (u.format2.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter));
default:return_trace (false);
}
}
@@ -2142,6 +2420,15 @@ struct ClassDef
}
}
+ void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const
+ {
+ switch (u.format) {
+ case 1: return u.format1.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
+ case 2: return u.format2.intersected_class_glyphs (glyphs, klass, intersect_glyphs);
+ default:return;
+ }
+ }
+
protected:
union {
HBUINT16 format; /* Format identifier */
@@ -2229,19 +2516,19 @@ struct VarRegionList
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) &&
- axesZ.sanitize (c, (unsigned int) axisCount * (unsigned int) regionCount));
+ return_trace (c->check_struct (this) && axesZ.sanitize (c, axisCount * regionCount));
}
bool serialize (hb_serialize_context_t *c, const VarRegionList *src, const hb_bimap_t &region_map)
{
TRACE_SERIALIZE (this);
- VarRegionList *out = c->allocate_min<VarRegionList> ();
- if (unlikely (!out)) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
axisCount = src->axisCount;
regionCount = region_map.get_population ();
- if (unlikely (!c->allocate_size<VarRegionList> (get_size () - min_size))) return_trace (false);
- unsigned int region_count = src->get_region_count ();
+ if (unlikely (hb_unsigned_mul_overflows (axisCount * regionCount,
+ VarRegionAxis::static_size))) return_trace (false);
+ if (unlikely (!c->extend (this))) return_trace (false);
+ unsigned int region_count = src->regionCount;
for (unsigned int r = 0; r < regionCount; r++)
{
unsigned int backward = region_map.backward (r);
@@ -2253,11 +2540,11 @@ struct VarRegionList
}
unsigned int get_size () const { return min_size + VarRegionAxis::static_size * axisCount * regionCount; }
- unsigned int get_region_count () const { return regionCount; }
- protected:
+ public:
HBUINT16 axisCount;
HBUINT16 regionCount;
+ protected:
UnsizedArrayOf<VarRegionAxis>
axesZ;
public:
@@ -2273,7 +2560,10 @@ struct VarData
{ return shortCount + regionIndices.len; }
unsigned int get_size () const
- { return itemCount * get_row_size (); }
+ { return min_size
+ - regionIndices.min_size + regionIndices.get_size ()
+ + itemCount * get_row_size ();
+ }
float get_delta (unsigned int inner,
const int *coords, unsigned int coord_count,
@@ -2307,10 +2597,10 @@ struct VarData
return delta;
}
- void get_scalars (const int *coords, unsigned int coord_count,
- const VarRegionList &regions,
- float *scalars /*OUT */,
- unsigned int num_scalars) const
+ void get_region_scalars (const int *coords, unsigned int coord_count,
+ const VarRegionList &regions,
+ float *scalars /*OUT */,
+ unsigned int num_scalars) const
{
unsigned count = hb_min (num_scalars, regionIndices.len);
for (unsigned int i = 0; i < count; i++)
@@ -2336,7 +2626,7 @@ struct VarData
const hb_bimap_t &region_map)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
itemCount = inner_map.get_next_value ();
/* Optimize short count */
@@ -2378,9 +2668,7 @@ struct VarData
shortCount = new_short_count;
regionIndices.len = new_ri_count;
- unsigned int size = regionIndices.get_size () - HBUINT16::static_size/*regionIndices.len*/ + (get_row_size () * itemCount);
- if (unlikely (!c->allocate_size<HBUINT8> (size)))
- return_trace (false);
+ if (unlikely (!c->extend (this))) return_trace (false);
for (r = 0; r < ri_count; r++)
if (delta_sz[r]) regionIndices[ri_map[r]] = region_map[src->regionIndices[r]];
@@ -2395,16 +2683,16 @@ struct VarData
return_trace (true);
}
- void collect_region_refs (hb_inc_bimap_t &region_map, const hb_inc_bimap_t &inner_map) const
+ void collect_region_refs (hb_set_t &region_indices, const hb_inc_bimap_t &inner_map) const
{
for (unsigned int r = 0; r < regionIndices.len; r++)
{
unsigned int region = regionIndices[r];
- if (region_map.has (region)) continue;
+ if (region_indices.has (region)) continue;
for (unsigned int i = 0; i < inner_map.get_next_value (); i++)
if (get_item_delta (inner_map.backward (i), r) != 0)
{
- region_map.add (region);
+ region_indices.add (region);
break;
}
}
@@ -2439,7 +2727,7 @@ struct VarData
protected:
HBUINT16 itemCount;
HBUINT16 shortCount;
- ArrayOf<HBUINT16> regionIndices;
+ Array16Of<HBUINT16> regionIndices;
/*UnsizedArrayOf<HBUINT8>bytesX;*/
public:
DEFINE_SIZE_ARRAY (6, regionIndices);
@@ -2447,6 +2735,7 @@ struct VarData
struct VariationStore
{
+ private:
float get_delta (unsigned int outer, unsigned int inner,
const int *coords, unsigned int coord_count) const
{
@@ -2462,6 +2751,7 @@ struct VariationStore
this+regions);
}
+ public:
float get_delta (unsigned int index,
const int *coords, unsigned int coord_count) const
{
@@ -2488,32 +2778,48 @@ struct VariationStore
const hb_array_t <hb_inc_bimap_t> &inner_maps)
{
TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+
unsigned int set_count = 0;
for (unsigned int i = 0; i < inner_maps.length; i++)
- if (inner_maps[i].get_population () > 0) set_count++;
+ if (inner_maps[i].get_population ())
+ set_count++;
- unsigned int size = min_size + HBUINT32::static_size * set_count;
- if (unlikely (!c->allocate_size<HBUINT32> (size))) return_trace (false);
format = 1;
- hb_inc_bimap_t region_map;
+ const auto &src_regions = src+src->regions;
+
+ hb_set_t region_indices;
for (unsigned int i = 0; i < inner_maps.length; i++)
- (src+src->dataSets[i]).collect_region_refs (region_map, inner_maps[i]);
- region_map.sort ();
+ (src+src->dataSets[i]).collect_region_refs (region_indices, inner_maps[i]);
- if (unlikely (!regions.serialize (c, this)
- .serialize (c, &(src+src->regions), region_map))) return_trace (false);
+ if (region_indices.in_error ())
+ return_trace (false);
+
+ region_indices.del_range ((src_regions).regionCount, hb_set_t::INVALID);
+
+ /* TODO use constructor when our data-structures support that. */
+ hb_inc_bimap_t region_map;
+ + hb_iter (region_indices)
+ | hb_apply ([&region_map] (unsigned _) { region_map.add(_); })
+ ;
+ if (region_map.in_error())
+ return_trace (false);
+
+ if (unlikely (!regions.serialize_serialize (c, &src_regions, region_map)))
+ return_trace (false);
- /* TODO: The following code could be simplified when
- * OffsetListOf::subset () can take a custom param to be passed to VarData::serialize ()
- */
dataSets.len = set_count;
+ if (unlikely (!c->extend (dataSets))) return_trace (false);
+
+ /* TODO: The following code could be simplified when
+ * List16OfOffset16To::subset () can take a custom param to be passed to VarData::serialize () */
unsigned int set_index = 0;
for (unsigned int i = 0; i < inner_maps.length; i++)
{
- if (inner_maps[i].get_population () == 0) continue;
- if (unlikely (!dataSets[set_index++].serialize (c, this)
- .serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map)))
+ if (!inner_maps[i].get_population ()) continue;
+ if (unlikely (!dataSets[set_index++]
+ .serialize_serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map)))
return_trace (false);
}
@@ -2558,13 +2864,13 @@ struct VariationStore
&& varstore_prime->dataSets);
}
- unsigned int get_region_index_count (unsigned int ivs) const
- { return (this+dataSets[ivs]).get_region_index_count (); }
+ unsigned int get_region_index_count (unsigned int major) const
+ { return (this+dataSets[major]).get_region_index_count (); }
- void get_scalars (unsigned int ivs,
- const int *coords, unsigned int coord_count,
- float *scalars /*OUT*/,
- unsigned int num_scalars) const
+ void get_region_scalars (unsigned int major,
+ const int *coords, unsigned int coord_count,
+ float *scalars /*OUT*/,
+ unsigned int num_scalars) const
{
#ifdef HB_NO_VAR
for (unsigned i = 0; i < num_scalars; i++)
@@ -2572,18 +2878,19 @@ struct VariationStore
return;
#endif
- (this+dataSets[ivs]).get_scalars (coords, coord_count, this+regions,
- &scalars[0], num_scalars);
+ (this+dataSets[major]).get_region_scalars (coords, coord_count,
+ this+regions,
+ &scalars[0], num_scalars);
}
unsigned int get_sub_table_count () const { return dataSets.len; }
protected:
HBUINT16 format;
- LOffsetTo<VarRegionList> regions;
- LOffsetArrayOf<VarData> dataSets;
+ Offset32To<VarRegionList> regions;
+ Array16OfOffset32To<VarData> dataSets;
public:
- DEFINE_SIZE_ARRAY (8, dataSets);
+ DEFINE_SIZE_ARRAY_SIZED (8, dataSets);
};
/*
@@ -2684,7 +2991,8 @@ struct ConditionSet
+ conditions.iter ()
| hb_apply (subset_offset_array (c, out->conditions, this))
;
- return_trace (true);
+
+ return_trace (bool (out->conditions));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -2694,7 +3002,7 @@ struct ConditionSet
}
protected:
- LOffsetArrayOf<Condition> conditions;
+ Array16OfOffset32To<Condition> conditions;
public:
DEFINE_SIZE_ARRAY (2, conditions);
};
@@ -2719,6 +3027,12 @@ struct FeatureTableSubstitutionRecord
bool subset (hb_subset_layout_context_t *c, const void *base) const
{
TRACE_SUBSET (this);
+ if (!c->feature_index_map->has (featureIndex)) {
+ // Feature that is being substituted is not being retained, so we don't
+ // need this.
+ return_trace (false);
+ }
+
auto *out = c->subset_context->serializer->embed (this);
if (unlikely (!out)) return_trace (false);
@@ -2735,7 +3049,7 @@ struct FeatureTableSubstitutionRecord
protected:
HBUINT16 featureIndex;
- LOffsetTo<Feature> feature;
+ Offset32To<Feature> feature;
public:
DEFINE_SIZE_STATIC (6);
};
@@ -2771,6 +3085,15 @@ struct FeatureTableSubstitution
record.closure_features (this, lookup_indexes, feature_indexes);
}
+ bool intersects_features (const hb_map_t *feature_index_map) const
+ {
+ for (const FeatureTableSubstitutionRecord& record : substitutions)
+ {
+ if (feature_index_map->has (record.featureIndex)) return true;
+ }
+ return false;
+ }
+
bool subset (hb_subset_context_t *c,
hb_subset_layout_context_t *l) const
{
@@ -2784,7 +3107,8 @@ struct FeatureTableSubstitution
+ substitutions.iter ()
| hb_apply (subset_record_array (l, &(out->substitutions), this))
;
- return_trace (true);
+
+ return_trace (bool (out->substitutions));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -2797,7 +3121,7 @@ struct FeatureTableSubstitution
protected:
FixedVersion<> version; /* Version--0x00010000u */
- ArrayOf<FeatureTableSubstitutionRecord>
+ Array16Of<FeatureTableSubstitutionRecord>
substitutions;
public:
DEFINE_SIZE_ARRAY (6, substitutions);
@@ -2821,6 +3145,11 @@ struct FeatureVariationRecord
(base+substitutions).closure_features (lookup_indexes, feature_indexes);
}
+ bool intersects_features (const void *base, const hb_map_t *feature_index_map) const
+ {
+ return (base+substitutions).intersects_features (feature_index_map);
+ }
+
bool subset (hb_subset_layout_context_t *c, const void *base) const
{
TRACE_SUBSET (this);
@@ -2841,9 +3170,9 @@ struct FeatureVariationRecord
}
protected:
- LOffsetTo<ConditionSet>
+ Offset32To<ConditionSet>
conditions;
- LOffsetTo<FeatureTableSubstitution>
+ Offset32To<FeatureTableSubstitution>
substitutions;
public:
DEFINE_SIZE_STATIC (8);
@@ -2907,9 +3236,18 @@ struct FeatureVariations
out->version.major = version.major;
out->version.minor = version.minor;
- + varRecords.iter ()
- | hb_apply (subset_record_array (l, &(out->varRecords), this))
- ;
+ int keep_up_to = -1;
+ for (int i = varRecords.len - 1; i >= 0; i--) {
+ if (varRecords[i].intersects_features (this, l->feature_index_map)) {
+ keep_up_to = i;
+ break;
+ }
+ }
+
+ unsigned count = (unsigned) (keep_up_to + 1);
+ for (unsigned i = 0; i < count; i++) {
+ subset_record_array (l, &(out->varRecords), this) (varRecords[i]);
+ }
return_trace (bool (out->varRecords));
}
@@ -2923,7 +3261,7 @@ struct FeatureVariations
protected:
FixedVersion<> version; /* Version--0x00010000u */
- LArrayOf<FeatureVariationRecord>
+ Array32Of<FeatureVariationRecord>
varRecords;
public:
DEFINE_SIZE_ARRAY_SIZED (8, varRecords);
@@ -3036,22 +3374,20 @@ struct VariationDevice
if (unlikely (!out)) return_trace (nullptr);
if (!layout_variation_idx_map || layout_variation_idx_map->is_empty ()) return_trace (out);
- unsigned org_idx = (outerIndex << 16) + innerIndex;
- if (!layout_variation_idx_map->has (org_idx))
+ /* TODO Just get() and bail if NO_VARIATION. Needs to setup the map to return that. */
+ if (!layout_variation_idx_map->has (varIdx))
{
c->revert (snap);
return_trace (nullptr);
}
- unsigned new_idx = layout_variation_idx_map->get (org_idx);
- out->outerIndex = new_idx >> 16;
- out->innerIndex = new_idx & 0xFFFF;
+ unsigned new_idx = layout_variation_idx_map->get (varIdx);
+ out->varIdx = new_idx;
return_trace (out);
}
void record_variation_index (hb_set_t *layout_variation_indices) const
{
- unsigned var_idx = (outerIndex << 16) + innerIndex;
- layout_variation_indices->add (var_idx);
+ layout_variation_indices->add (varIdx);
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -3064,12 +3400,11 @@ struct VariationDevice
float get_delta (hb_font_t *font, const VariationStore &store) const
{
- return store.get_delta (outerIndex, innerIndex, font->coords, font->num_coords);
+ return store.get_delta (varIdx, font->coords, font->num_coords);
}
protected:
- HBUINT16 outerIndex;
- HBUINT16 innerIndex;
+ VarIdx varIdx;
HBUINT16 deltaFormat; /* Format identifier for this table: 0x0x8000 */
public:
DEFINE_SIZE_STATIC (6);
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
index 437e760f64..31a4a3e84c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
@@ -42,7 +42,7 @@ namespace OT {
*/
/* Array of contour point indices--in increasing numerical order */
-struct AttachPoint : ArrayOf<HBUINT16>
+struct AttachPoint : Array16Of<HBUINT16>
{
bool subset (hb_subset_context_t *c) const
{
@@ -98,8 +98,7 @@ struct AttachList
| hb_map (glyph_map)
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -110,10 +109,10 @@ struct AttachList
}
protected:
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table -- from
* beginning of AttachList table */
- OffsetArrayOf<AttachPoint>
+ Array16OfOffset16To<AttachPoint>
attachPoint; /* Array of AttachPoint tables
* in Coverage Index order */
public:
@@ -220,7 +219,7 @@ struct CaretValueFormat3
protected:
HBUINT16 caretValueFormat; /* Format identifier--format = 3 */
FWORD coordinate; /* X or Y value, in design units */
- OffsetTo<Device>
+ Offset16To<Device>
deviceTable; /* Offset to Device table for X or Y
* value--from beginning of CaretValue
* table */
@@ -329,7 +328,7 @@ struct LigGlyph
void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
{
- for (const OffsetTo<CaretValue>& offset : carets.iter ())
+ for (const Offset16To<CaretValue>& offset : carets.iter ())
(this+offset).collect_variation_indices (c->layout_variation_indices);
}
@@ -340,7 +339,7 @@ struct LigGlyph
}
protected:
- OffsetArrayOf<CaretValue>
+ Array16OfOffset16To<CaretValue>
carets; /* Offset array of CaretValue tables
* --from beginning of LigGlyph table
* --in increasing coordinate order */
@@ -386,8 +385,7 @@ struct LigCaretList
| hb_map (glyph_map)
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -408,10 +406,10 @@ struct LigCaretList
}
protected:
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of LigCaretList table */
- OffsetArrayOf<LigGlyph>
+ Array16OfOffset16To<LigGlyph>
ligGlyph; /* Array of LigGlyph tables
* in Coverage Index order */
public:
@@ -432,7 +430,7 @@ struct MarkGlyphSetsFormat1
out->format = format;
bool ret = true;
- for (const LOffsetTo<Coverage>& offset : coverage.iter ())
+ for (const Offset32To<Coverage>& offset : coverage.iter ())
{
auto *o = out->coverage.serialize_append (c->serializer);
if (unlikely (!o))
@@ -460,7 +458,7 @@ struct MarkGlyphSetsFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- ArrayOf<LOffsetTo<Coverage>>
+ Array16Of<Offset32To<Coverage>>
coverage; /* Array of long offsets to mark set
* coverage tables */
public:
@@ -643,10 +641,10 @@ struct GDEF
auto *out = c->serializer->embed (*this);
if (unlikely (!out)) return_trace (false);
- bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this);
+ bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true);
bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this);
bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this);
- bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this);
+ bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true);
bool subset_markglyphsetsdef = true;
if (version.to_int () >= 0x00010002u)
@@ -687,28 +685,28 @@ struct GDEF
protected:
FixedVersion<>version; /* Version of the GDEF table--currently
* 0x00010003u */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
glyphClassDef; /* Offset to class definition table
* for glyph type--from beginning of
* GDEF header (may be Null) */
- OffsetTo<AttachList>
+ Offset16To<AttachList>
attachList; /* Offset to list of glyphs with
* attachment points--from beginning
* of GDEF header (may be Null) */
- OffsetTo<LigCaretList>
+ Offset16To<LigCaretList>
ligCaretList; /* Offset to list of positioning points
* for ligature carets--from beginning
* of GDEF header (may be Null) */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
markAttachClassDef; /* Offset to class definition table for
* mark attachment type--from beginning
* of GDEF header (may be Null) */
- OffsetTo<MarkGlyphSets>
+ Offset16To<MarkGlyphSets>
markGlyphSetsDef; /* Offset to the table of mark set
* definitions--from beginning of GDEF
* header (may be NULL). Introduced
* in version 0x00010002. */
- LOffsetTo<VariationStore>
+ Offset32To<VariationStore>
varStore; /* Offset to the table of Item Variation
* Store--from beginning of GDEF
* header (may be NULL). Introduced
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
index f523e35c00..1e305518f5 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
@@ -89,20 +89,22 @@ struct ValueFormat : HBUINT16
HBINT16 yAdvance; /* Vertical adjustment for advance--in
* design units (only used for vertical
* writing) */
- OffsetTo<Device> xPlaDevice; /* Offset to Device table for
+ Offset16To<Device> xPlaDevice; /* Offset to Device table for
* horizontal placement--measured from
* beginning of PosTable (may be NULL) */
- OffsetTo<Device> yPlaDevice; /* Offset to Device table for vertical
+ Offset16To<Device> yPlaDevice; /* Offset to Device table for vertical
* placement--measured from beginning
* of PosTable (may be NULL) */
- OffsetTo<Device> xAdvDevice; /* Offset to Device table for
+ Offset16To<Device> xAdvDevice; /* Offset to Device table for
* horizontal advance--measured from
* beginning of PosTable (may be NULL) */
- OffsetTo<Device> yAdvDevice; /* Offset to Device table for vertical
+ Offset16To<Device> yAdvDevice; /* Offset to Device table for vertical
* advance--measured from beginning of
* PosTable (may be NULL) */
#endif
+ IntType& operator = (uint16_t i) { v = i; return *this; }
+
unsigned int get_len () const { return hb_popcount ((unsigned int) *this); }
unsigned int get_size () const { return get_len () * Value::static_size; }
@@ -160,16 +162,40 @@ struct ValueFormat : HBUINT16
return ret;
}
- void serialize_copy (hb_serialize_context_t *c, const void *base,
- const Value *values, const hb_map_t *layout_variation_idx_map) const
+ unsigned int get_effective_format (const Value *values) const
+ {
+ unsigned int format = *this;
+ for (unsigned flag = xPlacement; flag <= yAdvDevice; flag = flag << 1) {
+ if (format & flag) should_drop (*values++, (Flags) flag, &format);
+ }
+
+ return format;
+ }
+
+ template<typename Iterator,
+ hb_requires (hb_is_iterator (Iterator))>
+ unsigned int get_effective_format (Iterator it) const {
+ unsigned int new_format = 0;
+
+ for (const hb_array_t<const Value>& values : it)
+ new_format = new_format | get_effective_format (&values);
+
+ return new_format;
+ }
+
+ void copy_values (hb_serialize_context_t *c,
+ unsigned int new_format,
+ const void *base,
+ const Value *values,
+ const hb_map_t *layout_variation_idx_map) const
{
unsigned int format = *this;
if (!format) return;
- if (format & xPlacement) c->copy (*values++);
- if (format & yPlacement) c->copy (*values++);
- if (format & xAdvance) c->copy (*values++);
- if (format & yAdvance) c->copy (*values++);
+ if (format & xPlacement) copy_value (c, new_format, xPlacement, *values++);
+ if (format & yPlacement) copy_value (c, new_format, yPlacement, *values++);
+ if (format & xAdvance) copy_value (c, new_format, xAdvance, *values++);
+ if (format & yAdvance) copy_value (c, new_format, yAdvance, *values++);
if (format & xPlaDevice) copy_device (c, base, values++, layout_variation_idx_map);
if (format & yPlaDevice) copy_device (c, base, values++, layout_variation_idx_map);
@@ -177,6 +203,16 @@ struct ValueFormat : HBUINT16
if (format & yAdvDevice) copy_device (c, base, values++, layout_variation_idx_map);
}
+ void copy_value (hb_serialize_context_t *c,
+ unsigned int new_format,
+ Flags flag,
+ Value value) const
+ {
+ // Filter by new format.
+ if (!(new_format & flag)) return;
+ c->copy (value);
+ }
+
void collect_variation_indices (hb_collect_variation_indices_context_t *c,
const void *base,
const hb_array_t<const Value>& values) const
@@ -232,14 +268,14 @@ struct ValueFormat : HBUINT16
return true;
}
- static inline OffsetTo<Device>& get_device (Value* value)
+ static inline Offset16To<Device>& get_device (Value* value)
{
- return *static_cast<OffsetTo<Device> *> (value);
+ return *static_cast<Offset16To<Device> *> (value);
}
- static inline const OffsetTo<Device>& get_device (const Value* value, bool *worked=nullptr)
+ static inline const Offset16To<Device>& get_device (const Value* value, bool *worked=nullptr)
{
if (worked) *worked |= bool (*value);
- return *static_cast<const OffsetTo<Device> *> (value);
+ return *static_cast<const Offset16To<Device> *> (value);
}
bool copy_device (hb_serialize_context_t *c, const void *base,
@@ -317,13 +353,21 @@ struct ValueFormat : HBUINT16
return_trace (true);
}
+
+ private:
+
+ void should_drop (Value value, Flags flag, unsigned int* format) const
+ {
+ if (value) return;
+ *format = *format & ~flag;
+ }
+
};
-template<typename Iterator>
+template<typename Iterator, typename SrcLookup>
static void SinglePos_serialize (hb_serialize_context_t *c,
- const void *src,
+ const SrcLookup *src,
Iterator it,
- ValueFormat valFormat,
const hb_map_t *layout_variation_idx_map);
@@ -346,7 +390,10 @@ struct AnchorFormat1
AnchorFormat1* copy (hb_serialize_context_t *c) const
{
TRACE_SERIALIZE (this);
- return_trace (c->embed<AnchorFormat1> (this));
+ AnchorFormat1* out = c->embed<AnchorFormat1> (this);
+ if (!out) return_trace (out);
+ out->format = 1;
+ return_trace (out);
}
protected:
@@ -447,11 +494,11 @@ struct AnchorFormat3
HBUINT16 format; /* Format identifier--format = 3 */
FWORD xCoordinate; /* Horizontal value--in design units */
FWORD yCoordinate; /* Vertical value--in design units */
- OffsetTo<Device>
+ Offset16To<Device>
xDeviceTable; /* Offset to Device table for X
* coordinate-- from beginning of
* Anchor table (may be NULL) */
- OffsetTo<Device>
+ Offset16To<Device>
yDeviceTable; /* Offset to Device table for Y
* coordinate-- from beginning of
* Anchor table (may be NULL) */
@@ -485,14 +532,22 @@ struct Anchor
}
}
- Anchor* copy (hb_serialize_context_t *c, const hb_map_t *layout_variation_idx_map) const
+ bool subset (hb_subset_context_t *c) const
{
- TRACE_SERIALIZE (this);
+ TRACE_SUBSET (this);
switch (u.format) {
- case 1: return_trace (reinterpret_cast<Anchor *> (u.format1.copy (c)));
- case 2: return_trace (reinterpret_cast<Anchor *> (u.format2.copy (c)));
- case 3: return_trace (reinterpret_cast<Anchor *> (u.format3.copy (c, layout_variation_idx_map)));
- default:return_trace (nullptr);
+ case 1: return_trace (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer))));
+ case 2:
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ {
+ // AnchorFormat 2 just containins extra hinting information, so
+ // if hints are being dropped convert to format 1.
+ return_trace (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer))));
+ }
+ return_trace (bool (reinterpret_cast<Anchor *> (u.format2.copy (c->serializer))));
+ case 3: return_trace (bool (reinterpret_cast<Anchor *> (u.format3.copy (c->serializer,
+ c->plan->layout_variation_idx_map))));
+ default:return_trace (false);
}
}
@@ -541,51 +596,29 @@ struct AnchorMatrix
}
template <typename Iterator,
- hb_requires (hb_is_iterator (Iterator))>
- bool serialize (hb_serialize_context_t *c,
- unsigned num_rows,
- AnchorMatrix const *offset_matrix,
- const hb_map_t *layout_variation_idx_map,
- Iterator index_iter)
+ hb_requires (hb_is_iterator (Iterator))>
+ bool subset (hb_subset_context_t *c,
+ unsigned num_rows,
+ Iterator index_iter) const
{
- TRACE_SERIALIZE (this);
+ TRACE_SUBSET (this);
+
+ auto *out = c->serializer->start_embed (this);
+
if (!index_iter) return_trace (false);
- if (unlikely (!c->extend_min ((*this)))) return_trace (false);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
- this->rows = num_rows;
+ out->rows = num_rows;
for (const unsigned i : index_iter)
{
- auto *offset = c->embed (offset_matrix->matrixZ[i]);
+ auto *offset = c->serializer->embed (matrixZ[i]);
if (!offset) return_trace (false);
- offset->serialize_copy (c, offset_matrix->matrixZ[i],
- offset_matrix, c->to_bias (this),
- hb_serialize_context_t::Head,
- layout_variation_idx_map);
+ offset->serialize_subset (c, matrixZ[i], this);
}
return_trace (true);
}
- bool subset (hb_subset_context_t *c,
- unsigned cols,
- const hb_map_t *klass_mapping) const
- {
- TRACE_SUBSET (this);
- auto *out = c->serializer->start_embed (*this);
-
- auto indexes =
- + hb_range (rows * cols)
- | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % cols); })
- ;
-
- out->serialize (c->serializer,
- (unsigned) rows,
- this,
- c->plan->layout_variation_idx_map,
- indexes);
- return_trace (true);
- }
-
bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const
{
TRACE_SANITIZE (this);
@@ -599,7 +632,7 @@ struct AnchorMatrix
}
HBUINT16 rows; /* Number of rows */
- UnsizedArrayOf<OffsetTo<Anchor>>
+ UnsizedArrayOf<Offset16To<Anchor>>
matrixZ; /* Matrix of offsets to Anchor tables--
* from beginning of AnchorMatrix table */
public:
@@ -618,18 +651,16 @@ struct MarkRecord
return_trace (c->check_struct (this) && markAnchor.sanitize (c, base));
}
- MarkRecord *copy (hb_serialize_context_t *c,
- const void *src_base,
- unsigned dst_bias,
- const hb_map_t *klass_mapping,
- const hb_map_t *layout_variation_idx_map) const
+ MarkRecord *subset (hb_subset_context_t *c,
+ const void *src_base,
+ const hb_map_t *klass_mapping) const
{
- TRACE_SERIALIZE (this);
- auto *out = c->embed (this);
+ TRACE_SUBSET (this);
+ auto *out = c->serializer->embed (this);
if (unlikely (!out)) return_trace (nullptr);
out->klass = klass_mapping->get (klass);
- out->markAnchor.serialize_copy (c, markAnchor, src_base, dst_bias, hb_serialize_context_t::Head, layout_variation_idx_map);
+ out->markAnchor.serialize_subset (c, markAnchor, src_base);
return_trace (out);
}
@@ -641,14 +672,14 @@ struct MarkRecord
protected:
HBUINT16 klass; /* Class defined for this mark */
- OffsetTo<Anchor>
+ Offset16To<Anchor>
markAnchor; /* Offset to Anchor table--from
* beginning of MarkArray table */
public:
DEFINE_SIZE_STATIC (4);
};
-struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage order */
+struct MarkArray : Array16Of<MarkRecord> /* Array of MarkRecords--in Coverage order */
{
bool apply (hb_ot_apply_context_t *c,
unsigned int mark_index, unsigned int glyph_index,
@@ -657,7 +688,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
{
TRACE_APPLY (this);
hb_buffer_t *buffer = c->buffer;
- const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index);
+ const MarkRecord &record = Array16Of<MarkRecord>::operator[](mark_index);
unsigned int mark_class = record.klass;
const Anchor& mark_anchor = this + record.markAnchor;
@@ -684,25 +715,42 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
return_trace (true);
}
- template<typename Iterator,
- hb_requires (hb_is_source_of (Iterator, MarkRecord))>
- bool serialize (hb_serialize_context_t *c,
- const hb_map_t *klass_mapping,
- const hb_map_t *layout_variation_idx_map,
- const void *base,
- Iterator it)
+ template <typename Iterator,
+ hb_requires (hb_is_iterator (Iterator))>
+ bool subset (hb_subset_context_t *c,
+ Iterator coverage,
+ const hb_map_t *klass_mapping) const
{
- TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!c->check_assign (len, it.len ()))) return_trace (false);
- c->copy_all (it, base, c->to_bias (this), klass_mapping, layout_variation_idx_map);
+ TRACE_SUBSET (this);
+ const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
+
+ auto* out = c->serializer->start_embed (this);
+ if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
+
+ auto mark_iter =
+ + hb_zip (coverage, this->iter ())
+ | hb_filter (glyphset, hb_first)
+ | hb_map (hb_second)
+ ;
+
+ unsigned new_length = 0;
+ for (const auto& mark_record : mark_iter) {
+ if (unlikely (!mark_record.subset (c, this, klass_mapping)))
+ return_trace (false);
+ new_length++;
+ }
+
+ if (unlikely (!c->serializer->check_assign (out->len, new_length,
+ HB_SERIALIZE_ERROR_ARRAY_OVERFLOW)))
+ return_trace (false);
+
return_trace (true);
}
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (ArrayOf<MarkRecord>::sanitize (c, this));
+ return_trace (Array16Of<MarkRecord>::sanitize (c, this));
}
};
@@ -733,6 +781,8 @@ struct SinglePosFormat1
const Coverage &get_coverage () const { return this+coverage; }
+ ValueFormat get_value_format () const { return valueFormat; }
+
bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -747,29 +797,33 @@ struct SinglePosFormat1
}
template<typename Iterator,
- hb_requires (hb_is_iterator (Iterator))>
+ typename SrcLookup,
+ hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
- const void *src,
+ const SrcLookup *src,
Iterator it,
- ValueFormat valFormat,
+ ValueFormat newFormat,
const hb_map_t *layout_variation_idx_map)
{
- auto out = c->extend_min (*this);
- if (unlikely (!out)) return;
- if (unlikely (!c->check_assign (valueFormat, valFormat))) return;
+ if (unlikely (!c->extend_min (this))) return;
+ if (unlikely (!c->check_assign (valueFormat,
+ newFormat,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW))) return;
- + it
- | hb_map (hb_second)
- | hb_apply ([&] (hb_array_t<const Value> _)
- { valFormat.serialize_copy (c, src, &_, layout_variation_idx_map); })
- ;
+ for (const hb_array_t<const Value>& _ : + it | hb_map (hb_second))
+ {
+ src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_map);
+ // Only serialize the first entry in the iterator, the rest are assumed to
+ // be the same.
+ break;
+ }
auto glyphs =
+ it
| hb_map_retains_sorting (hb_first)
;
- coverage.serialize (c, this).serialize (c, glyphs);
+ coverage.serialize_serialize (c, glyphs);
}
bool subset (hb_subset_context_t *c) const
@@ -786,7 +840,7 @@ struct SinglePosFormat1
;
bool ret = bool (it);
- SinglePos_serialize (c->serializer, this, it, valueFormat, c->plan->layout_variation_idx_map);
+ SinglePos_serialize (c->serializer, this, it, c->plan->layout_variation_idx_map);
return_trace (ret);
}
@@ -800,7 +854,7 @@ struct SinglePosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
ValueFormat valueFormat; /* Defines the types of data in the
@@ -843,6 +897,8 @@ struct SinglePosFormat2
const Coverage &get_coverage () const { return this+coverage; }
+ ValueFormat get_value_format () const { return valueFormat; }
+
bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -861,22 +917,23 @@ struct SinglePosFormat2
}
template<typename Iterator,
- hb_requires (hb_is_iterator (Iterator))>
+ typename SrcLookup,
+ hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
- const void *src,
+ const SrcLookup *src,
Iterator it,
- ValueFormat valFormat,
+ ValueFormat newFormat,
const hb_map_t *layout_variation_idx_map)
{
- auto out = c->extend_min (*this);
+ auto out = c->extend_min (this);
if (unlikely (!out)) return;
- if (unlikely (!c->check_assign (valueFormat, valFormat))) return;
- if (unlikely (!c->check_assign (valueCount, it.len ()))) return;
+ if (unlikely (!c->check_assign (valueFormat, newFormat, HB_SERIALIZE_ERROR_INT_OVERFLOW))) return;
+ if (unlikely (!c->check_assign (valueCount, it.len (), HB_SERIALIZE_ERROR_ARRAY_OVERFLOW))) return;
+ it
| hb_map (hb_second)
| hb_apply ([&] (hb_array_t<const Value> _)
- { valFormat.serialize_copy (c, src, &_, layout_variation_idx_map); })
+ { src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_map); })
;
auto glyphs =
@@ -884,7 +941,7 @@ struct SinglePosFormat2
| hb_map_retains_sorting (hb_first)
;
- coverage.serialize (c, this).serialize (c, glyphs);
+ coverage.serialize_serialize (c, glyphs);
}
bool subset (hb_subset_context_t *c) const
@@ -908,7 +965,7 @@ struct SinglePosFormat2
;
bool ret = bool (it);
- SinglePos_serialize (c->serializer, this, it, valueFormat, c->plan->layout_variation_idx_map);
+ SinglePos_serialize (c->serializer, this, it, c->plan->layout_variation_idx_map);
return_trace (ret);
}
@@ -922,7 +979,7 @@ struct SinglePosFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
ValueFormat valueFormat; /* Defines the types of data in the
@@ -952,24 +1009,37 @@ struct SinglePos
template<typename Iterator,
- hb_requires (hb_is_iterator (Iterator))>
+ typename SrcLookup,
+ hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
- const void *src,
+ const SrcLookup* src,
Iterator glyph_val_iter_pairs,
- ValueFormat valFormat,
const hb_map_t *layout_variation_idx_map)
{
if (unlikely (!c->extend_min (u.format))) return;
unsigned format = 2;
+ ValueFormat new_format = src->get_value_format ();
- if (glyph_val_iter_pairs) format = get_format (glyph_val_iter_pairs);
+ if (glyph_val_iter_pairs)
+ {
+ format = get_format (glyph_val_iter_pairs);
+ new_format = src->get_value_format ().get_effective_format (+ glyph_val_iter_pairs | hb_map (hb_second));
+ }
u.format = format;
switch (u.format) {
- case 1: u.format1.serialize (c, src, glyph_val_iter_pairs, valFormat, layout_variation_idx_map);
- return;
- case 2: u.format2.serialize (c, src, glyph_val_iter_pairs, valFormat, layout_variation_idx_map);
- return;
+ case 1: u.format1.serialize (c,
+ src,
+ glyph_val_iter_pairs,
+ new_format,
+ layout_variation_idx_map);
+ return;
+ case 2: u.format2.serialize (c,
+ src,
+ glyph_val_iter_pairs,
+ new_format,
+ layout_variation_idx_map);
+ return;
default:return;
}
}
@@ -994,14 +1064,13 @@ struct SinglePos
} u;
};
-template<typename Iterator>
+template<typename Iterator, typename SrcLookup>
static void
SinglePos_serialize (hb_serialize_context_t *c,
- const void *src,
+ const SrcLookup *src,
Iterator it,
- ValueFormat valFormat,
const hb_map_t *layout_variation_idx_map)
-{ c->start_embed<SinglePos> ()->serialize (c, src, it, valFormat, layout_variation_idx_map); }
+{ c->start_embed<SinglePos> ()->serialize (c, src, it, layout_variation_idx_map); }
struct PairValueRecord
@@ -1011,26 +1080,35 @@ struct PairValueRecord
int cmp (hb_codepoint_t k) const
{ return secondGlyph.cmp (k); }
- struct serialize_closure_t
+ struct context_t
{
const void *base;
const ValueFormat *valueFormats;
+ const ValueFormat *newFormats;
unsigned len1; /* valueFormats[0].get_len() */
const hb_map_t *glyph_map;
const hb_map_t *layout_variation_idx_map;
};
- bool serialize (hb_serialize_context_t *c,
- serialize_closure_t *closure) const
+ bool subset (hb_subset_context_t *c,
+ context_t *closure) const
{
TRACE_SERIALIZE (this);
- auto *out = c->start_embed (*this);
- if (unlikely (!c->extend_min (out))) return_trace (false);
+ auto *s = c->serializer;
+ auto *out = s->start_embed (*this);
+ if (unlikely (!s->extend_min (out))) return_trace (false);
out->secondGlyph = (*closure->glyph_map)[secondGlyph];
- closure->valueFormats[0].serialize_copy (c, closure->base, &values[0], closure->layout_variation_idx_map);
- closure->valueFormats[1].serialize_copy (c, closure->base, &values[closure->len1], closure->layout_variation_idx_map);
+ closure->valueFormats[0].copy_values (s,
+ closure->newFormats[0],
+ closure->base, &values[0],
+ closure->layout_variation_idx_map);
+ closure->valueFormats[1].copy_values (s,
+ closure->newFormats[1],
+ closure->base,
+ &values[closure->len1],
+ closure->layout_variation_idx_map);
return_trace (true);
}
@@ -1050,6 +1128,21 @@ struct PairValueRecord
valueFormats[1].collect_variation_indices (c, base, values_array.sub_array (record1_len, record2_len));
}
+ bool intersects (const hb_set_t& glyphset) const
+ {
+ return glyphset.has(secondGlyph);
+ }
+
+ const Value* get_values_1 () const
+ {
+ return &values[0];
+ }
+
+ const Value* get_values_2 (ValueFormat format1) const
+ {
+ return &values[format1.get_len ()];
+ }
+
protected:
HBGlyphID secondGlyph; /* GlyphID of second glyph in the
* pair--first glyph is listed in the
@@ -1140,7 +1233,8 @@ struct PairSet
}
bool subset (hb_subset_context_t *c,
- const ValueFormat valueFormats[2]) const
+ const ValueFormat valueFormats[2],
+ const ValueFormat newFormats[2]) const
{
TRACE_SUBSET (this);
auto snap = c->serializer->snapshot ();
@@ -1156,10 +1250,11 @@ struct PairSet
unsigned len2 = valueFormats[1].get_len ();
unsigned record_size = HBUINT16::static_size + Value::static_size * (len1 + len2);
- PairValueRecord::serialize_closure_t closure =
+ PairValueRecord::context_t context =
{
this,
valueFormats,
+ newFormats,
len1,
&glyph_map,
c->plan->layout_variation_idx_map
@@ -1170,7 +1265,7 @@ struct PairSet
for (unsigned i = 0; i < count; i++)
{
if (glyphset.has (record->secondGlyph)
- && record->serialize (c->serializer, &closure)) num++;
+ && record->subset (c, &context)) num++;
record = &StructAtOffset<const PairValueRecord> (record, record_size);
}
@@ -1218,7 +1313,7 @@ struct PairPosFormat1
+ hb_zip (this+coverage, pairSet)
| hb_filter (*glyphs, hb_first)
| hb_map (hb_second)
- | hb_map ([glyphs, this] (const OffsetTo<PairSet> &_)
+ | hb_map ([glyphs, this] (const Offset16To<PairSet> &_)
{ return (this+_).intersects (glyphs, valueFormat); })
| hb_any
;
@@ -1278,17 +1373,23 @@ struct PairPosFormat1
out->format = format;
out->valueFormat[0] = valueFormat[0];
out->valueFormat[1] = valueFormat[1];
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ {
+ hb_pair_t<unsigned, unsigned> newFormats = compute_effective_value_formats (glyphset);
+ out->valueFormat[0] = newFormats.first;
+ out->valueFormat[1] = newFormats.second;
+ }
hb_sorted_vector_t<hb_codepoint_t> new_coverage;
+ hb_zip (this+coverage, pairSet)
| hb_filter (glyphset, hb_first)
- | hb_filter ([this, c, out] (const OffsetTo<PairSet>& _)
+ | hb_filter ([this, c, out] (const Offset16To<PairSet>& _)
{
auto *o = out->pairSet.serialize_append (c->serializer);
if (unlikely (!o)) return false;
auto snap = c->serializer->snapshot ();
- bool ret = o->serialize_subset (c, _, this, valueFormat);
+ bool ret = o->serialize_subset (c, _, this, valueFormat, out->valueFormat);
if (!ret)
{
out->pairSet.pop ();
@@ -1302,12 +1403,41 @@ struct PairPosFormat1
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
+
+ hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_set_t& glyphset) const
+ {
+ unsigned len1 = valueFormat[0].get_len ();
+ unsigned len2 = valueFormat[1].get_len ();
+ unsigned record_size = HBUINT16::static_size + Value::static_size * (len1 + len2);
+
+ unsigned format1 = 0;
+ unsigned format2 = 0;
+ for (const Offset16To<PairSet>& _ :
+ + hb_zip (this+coverage, pairSet) | hb_filter (glyphset, hb_first) | hb_map (hb_second))
+ {
+ const PairSet& set = (this + _);
+ const PairValueRecord *record = &set.firstPairValueRecord;
+
+ for (unsigned i = 0; i < set.len; i++)
+ {
+ if (record->intersects (glyphset))
+ {
+ format1 = format1 | valueFormat[0].get_effective_format (record->get_values_1 ());
+ format2 = format2 | valueFormat[1].get_effective_format (record->get_values_2 (valueFormat[0]));
+ }
+ record = &StructAtOffset<const PairValueRecord> (record, record_size);
+ }
+ }
+
+ return hb_pair (format1, format2);
+ }
+
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -1328,7 +1458,7 @@ struct PairPosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
ValueFormat valueFormat[2]; /* [0] Defines the types of data in
@@ -1337,7 +1467,7 @@ struct PairPosFormat1
/* [1] Defines the types of data in
* ValueRecord2--for the second glyph
* in the pair--may be zero (0) */
- OffsetArrayOf<PairSet>
+ Array16OfOffset16To<PairSet>
pairSet; /* Array of PairSet tables
* ordered by Coverage Index */
public:
@@ -1355,18 +1485,35 @@ struct PairPosFormat2
void closure_lookups (hb_closure_lookups_context_t *c) const {}
void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
{
+ if (!intersects (c->glyph_set)) return;
if ((!valueFormat1.has_device ()) && (!valueFormat2.has_device ())) return;
+ hb_set_t klass1_glyphs, klass2_glyphs;
+ if (!(this+classDef1).collect_coverage (&klass1_glyphs)) return;
+ if (!(this+classDef2).collect_coverage (&klass2_glyphs)) return;
+
hb_set_t class1_set, class2_set;
- for (const unsigned cp : c->glyph_set->iter ())
+ for (const unsigned cp : + c->glyph_set->iter () | hb_filter (this + coverage))
+ {
+ if (!klass1_glyphs.has (cp)) class1_set.add (0);
+ else
+ {
+ unsigned klass1 = (this+classDef1).get (cp);
+ class1_set.add (klass1);
+ }
+ }
+
+ class2_set.add (0);
+ for (const unsigned cp : + c->glyph_set->iter () | hb_filter (klass2_glyphs))
{
- unsigned klass1 = (this+classDef1).get (cp);
unsigned klass2 = (this+classDef2).get (cp);
- class1_set.add (klass1);
class2_set.add (klass2);
}
- if (class1_set.is_empty () || class2_set.is_empty ()) return;
+ if (class1_set.is_empty ()
+ || class2_set.is_empty ()
+ || (class2_set.get_population() == 1 && class2_set.has(0)))
+ return;
unsigned len1 = valueFormat1.get_len ();
unsigned len2 = valueFormat2.get_len ();
@@ -1431,35 +1578,34 @@ struct PairPosFormat2
auto *out = c->serializer->start_embed (*this);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
out->format = format;
- out->valueFormat1 = valueFormat1;
- out->valueFormat2 = valueFormat2;
hb_map_t klass1_map;
- out->classDef1.serialize_subset (c, classDef1, this, &klass1_map);
+ out->classDef1.serialize_subset (c, classDef1, this, &klass1_map, true, true, &(this + coverage));
out->class1Count = klass1_map.get_population ();
hb_map_t klass2_map;
- out->classDef2.serialize_subset (c, classDef2, this, &klass2_map);
+ out->classDef2.serialize_subset (c, classDef2, this, &klass2_map, true, false);
out->class2Count = klass2_map.get_population ();
unsigned len1 = valueFormat1.get_len ();
unsigned len2 = valueFormat2.get_len ();
- + hb_range ((unsigned) class1Count)
- | hb_filter (klass1_map)
- | hb_apply ([&] (const unsigned class1_idx)
- {
- + hb_range ((unsigned) class2Count)
- | hb_filter (klass2_map)
- | hb_apply ([&] (const unsigned class2_idx)
- {
- unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2);
- valueFormat1.serialize_copy (c->serializer, this, &values[idx], c->plan->layout_variation_idx_map);
- valueFormat2.serialize_copy (c->serializer, this, &values[idx + len1], c->plan->layout_variation_idx_map);
- })
- ;
- })
- ;
+ hb_pair_t<unsigned, unsigned> newFormats = hb_pair (valueFormat1, valueFormat2);
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ newFormats = compute_effective_value_formats (klass1_map, klass2_map);
+
+ out->valueFormat1 = newFormats.first;
+ out->valueFormat2 = newFormats.second;
+
+ for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map))
+ {
+ for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map))
+ {
+ unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2);
+ valueFormat1.copy_values (c->serializer, newFormats.first, this, &values[idx], c->plan->layout_variation_idx_map);
+ valueFormat2.copy_values (c->serializer, newFormats.second, this, &values[idx + len1], c->plan->layout_variation_idx_map);
+ }
+ }
const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
const hb_map_t &glyph_map = *c->plan->glyph_map;
@@ -1470,10 +1616,34 @@ struct PairPosFormat2
| hb_map_retains_sorting (glyph_map)
;
- out->coverage.serialize (c->serializer, out).serialize (c->serializer, it);
+ out->coverage.serialize_serialize (c->serializer, it);
return_trace (out->class1Count && out->class2Count && bool (it));
}
+
+ hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_map_t& klass1_map,
+ const hb_map_t& klass2_map) const
+ {
+ unsigned len1 = valueFormat1.get_len ();
+ unsigned len2 = valueFormat2.get_len ();
+
+ unsigned format1 = 0;
+ unsigned format2 = 0;
+
+ for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map))
+ {
+ for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map))
+ {
+ unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2);
+ format1 = format1 | valueFormat1.get_effective_format (&values[idx]);
+ format2 = format2 | valueFormat2.get_effective_format (&values[idx + len1]);
+ }
+ }
+
+ return hb_pair (format1, format2);
+ }
+
+
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -1496,7 +1666,7 @@ struct PairPosFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
ValueFormat valueFormat1; /* ValueRecord definition--for the
@@ -1505,11 +1675,11 @@ struct PairPosFormat2
ValueFormat valueFormat2; /* ValueRecord definition--for the
* second glyph of the pair--may be
* zero (0) */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
classDef1; /* Offset to ClassDef table--from
* beginning of PairPos subtable--for
* the first glyph of the pair */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
classDef2; /* Offset to ClassDef table--from
* beginning of PairPos subtable--for
* the second glyph of the pair */
@@ -1564,26 +1734,24 @@ struct EntryExitRecord
(src_base+exitAnchor).collect_variation_indices (c);
}
- EntryExitRecord* copy (hb_serialize_context_t *c,
- const void *src_base,
- const void *dst_base,
- const hb_map_t *layout_variation_idx_map) const
+ EntryExitRecord* subset (hb_subset_context_t *c,
+ const void *src_base) const
{
TRACE_SERIALIZE (this);
- auto *out = c->embed (this);
+ auto *out = c->serializer->embed (this);
if (unlikely (!out)) return_trace (nullptr);
- out->entryAnchor.serialize_copy (c, entryAnchor, src_base, c->to_bias (dst_base), hb_serialize_context_t::Head, layout_variation_idx_map);
- out->exitAnchor.serialize_copy (c, exitAnchor, src_base, c->to_bias (dst_base), hb_serialize_context_t::Head, layout_variation_idx_map);
+ out->entryAnchor.serialize_subset (c, entryAnchor, src_base);
+ out->exitAnchor.serialize_subset (c, exitAnchor, src_base);
return_trace (out);
}
protected:
- OffsetTo<Anchor>
+ Offset16To<Anchor>
entryAnchor; /* Offset to EntryAnchor table--from
* beginning of CursivePos
* subtable--may be NULL */
- OffsetTo<Anchor>
+ Offset16To<Anchor>
exitAnchor; /* Offset to ExitAnchor table--from
* beginning of CursivePos
* subtable--may be NULL */
@@ -1712,7 +1880,7 @@ struct CursivePosFormat1
else
pos[child].x_offset = x_offset;
- /* If parent was attached to child, break them free.
+ /* If parent was attached to child, separate them.
* https://github.com/harfbuzz/harfbuzz/issues/2469
*/
if (unlikely (pos[parent].attach_chain() == -pos[child].attach_chain()))
@@ -1724,25 +1892,24 @@ struct CursivePosFormat1
template <typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
- void serialize (hb_serialize_context_t *c,
+ void serialize (hb_subset_context_t *c,
Iterator it,
- const void *src_base,
- const hb_map_t *layout_variation_idx_map)
+ const void *src_base)
{
- if (unlikely (!c->extend_min ((*this)))) return;
+ if (unlikely (!c->serializer->extend_min ((*this)))) return;
this->format = 1;
this->entryExitRecord.len = it.len ();
for (const EntryExitRecord& entry_record : + it
| hb_map (hb_second))
- c->copy (entry_record, src_base, this, layout_variation_idx_map);
+ entry_record.subset (c, src_base);
auto glyphs =
+ it
| hb_map_retains_sorting (hb_first)
;
- coverage.serialize (c, this).serialize (c, glyphs);
+ coverage.serialize_serialize (c->serializer, glyphs);
}
bool subset (hb_subset_context_t *c) const
@@ -1762,7 +1929,7 @@ struct CursivePosFormat1
;
bool ret = bool (it);
- out->serialize (c->serializer, it, this, c->plan->layout_variation_idx_map);
+ out->serialize (c, it, this);
return_trace (ret);
}
@@ -1774,10 +1941,10 @@ struct CursivePosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
- ArrayOf<EntryExitRecord>
+ Array16Of<EntryExitRecord>
entryExitRecord; /* Array of EntryExit records--in
* Coverage Index order */
public:
@@ -1949,13 +2116,12 @@ struct MarkBasePosFormat1
| hb_sink (new_coverage)
;
- if (!out->markCoverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ()))
+ if (!out->markCoverage.serialize_serialize (c->serializer, new_coverage.iter ()))
return_trace (false);
- out->markArray.serialize (c->serializer, out)
- .serialize (c->serializer, &klass_mapping, c->plan->layout_variation_idx_map, &(this+markArray), + mark_iter
- | hb_map (hb_second));
+ out->markArray.serialize_subset (c, markArray, this,
+ (this+markCoverage).iter (),
+ &klass_mapping);
unsigned basecount = (this+baseArray).rows;
auto base_iter =
@@ -1970,8 +2136,7 @@ struct MarkBasePosFormat1
| hb_sink (new_coverage)
;
- if (!out->baseCoverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ()))
+ if (!out->baseCoverage.serialize_serialize (c->serializer, new_coverage.iter ()))
return_trace (false);
hb_sorted_vector_t<unsigned> base_indexes;
@@ -1984,8 +2149,10 @@ struct MarkBasePosFormat1
| hb_sink (base_indexes)
;
}
- out->baseArray.serialize (c->serializer, out)
- .serialize (c->serializer, base_iter.len (), &(this+baseArray), c->plan->layout_variation_idx_map, base_indexes.iter ());
+
+ out->baseArray.serialize_subset (c, baseArray, this,
+ base_iter.len (),
+ base_indexes.iter ());
return_trace (true);
}
@@ -2002,17 +2169,17 @@ struct MarkBasePosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
markCoverage; /* Offset to MarkCoverage table--from
* beginning of MarkBasePos subtable */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
baseCoverage; /* Offset to BaseCoverage table--from
* beginning of MarkBasePos subtable */
HBUINT16 classCount; /* Number of classes defined for marks */
- OffsetTo<MarkArray>
+ Offset16To<MarkArray>
markArray; /* Offset to MarkArray table--from
* beginning of MarkBasePos subtable */
- OffsetTo<BaseArray>
+ Offset16To<BaseArray>
baseArray; /* Offset to BaseArray table--from
* beginning of MarkBasePos subtable */
public:
@@ -2046,12 +2213,12 @@ typedef AnchorMatrix LigatureAttach; /* component-major--
* ordered by class--zero-based. */
/* Array of LigatureAttach tables ordered by LigatureCoverage Index */
-struct LigatureArray : OffsetListOf<LigatureAttach>
+struct LigatureArray : List16OfOffset16To<LigatureAttach>
{
template <typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
bool subset (hb_subset_context_t *c,
- Iterator coverage,
+ Iterator coverage,
unsigned class_count,
const hb_map_t *klass_mapping) const
{
@@ -2067,11 +2234,16 @@ struct LigatureArray : OffsetListOf<LigatureAttach>
auto *matrix = out->serialize_append (c->serializer);
if (unlikely (!matrix)) return_trace (false);
+ const LigatureAttach& src = (this + _.second);
+ auto indexes =
+ + hb_range (src.rows * class_count)
+ | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % class_count); })
+ ;
matrix->serialize_subset (c,
_.second,
this,
- class_count,
- klass_mapping);
+ src.rows,
+ indexes);
}
return_trace (this->len);
}
@@ -2201,17 +2373,12 @@ struct MarkLigPosFormat1
| hb_map_retains_sorting (glyph_map)
;
- if (!out->markCoverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_mark_coverage))
+ if (!out->markCoverage.serialize_serialize (c->serializer, new_mark_coverage))
return_trace (false);
- out->markArray.serialize (c->serializer, out)
- .serialize (c->serializer,
- &klass_mapping,
- c->plan->layout_variation_idx_map,
- &(this+markArray),
- + mark_iter
- | hb_map (hb_second));
+ out->markArray.serialize_subset (c, markArray, this,
+ (this+markCoverage).iter (),
+ &klass_mapping);
auto new_ligature_coverage =
+ hb_iter (this + ligatureCoverage)
@@ -2219,8 +2386,7 @@ struct MarkLigPosFormat1
| hb_map_retains_sorting (glyph_map)
;
- if (!out->ligatureCoverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_ligature_coverage))
+ if (!out->ligatureCoverage.serialize_serialize (c->serializer, new_ligature_coverage))
return_trace (false);
out->ligatureArray.serialize_subset (c, ligatureArray, this,
@@ -2241,18 +2407,18 @@ struct MarkLigPosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
markCoverage; /* Offset to Mark Coverage table--from
* beginning of MarkLigPos subtable */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
ligatureCoverage; /* Offset to Ligature Coverage
* table--from beginning of MarkLigPos
* subtable */
HBUINT16 classCount; /* Number of defined mark classes */
- OffsetTo<MarkArray>
+ Offset16To<MarkArray>
markArray; /* Offset to MarkArray table--from
* beginning of MarkLigPos subtable */
- OffsetTo<LigatureArray>
+ Offset16To<LigatureArray>
ligatureArray; /* Offset to LigatureArray table--from
* beginning of MarkLigPos subtable */
public:
@@ -2409,13 +2575,12 @@ struct MarkMarkPosFormat1
| hb_sink (new_coverage)
;
- if (!out->mark1Coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ()))
+ if (!out->mark1Coverage.serialize_serialize (c->serializer, new_coverage.iter ()))
return_trace (false);
- out->mark1Array.serialize (c->serializer, out)
- .serialize (c->serializer, &klass_mapping, c->plan->layout_variation_idx_map, &(this+mark1Array), + mark1_iter
- | hb_map (hb_second));
+ out->mark1Array.serialize_subset (c, mark1Array, this,
+ (this+mark1Coverage).iter (),
+ &klass_mapping);
unsigned mark2count = (this+mark2Array).rows;
auto mark2_iter =
@@ -2430,8 +2595,7 @@ struct MarkMarkPosFormat1
| hb_sink (new_coverage)
;
- if (!out->mark2Coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ()))
+ if (!out->mark2Coverage.serialize_serialize (c->serializer, new_coverage.iter ()))
return_trace (false);
hb_sorted_vector_t<unsigned> mark2_indexes;
@@ -2444,8 +2608,8 @@ struct MarkMarkPosFormat1
| hb_sink (mark2_indexes)
;
}
- out->mark2Array.serialize (c->serializer, out)
- .serialize (c->serializer, mark2_iter.len (), &(this+mark2Array), c->plan->layout_variation_idx_map, mark2_indexes.iter ());
+
+ out->mark2Array.serialize_subset (c, mark2Array, this, mark2_iter.len (), mark2_indexes.iter ());
return_trace (true);
}
@@ -2462,19 +2626,19 @@ struct MarkMarkPosFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
mark1Coverage; /* Offset to Combining Mark1 Coverage
* table--from beginning of MarkMarkPos
* subtable */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
mark2Coverage; /* Offset to Combining Mark2 Coverage
* table--from beginning of MarkMarkPos
* subtable */
HBUINT16 classCount; /* Number of defined mark classes */
- OffsetTo<MarkArray>
+ Offset16To<MarkArray>
mark1Array; /* Offset to Mark1Array table--from
* beginning of MarkMarkPos subtable */
- OffsetTo<Mark2Array>
+ Offset16To<Mark2Array>
mark2Array; /* Offset to Mark2Array table--from
* beginning of MarkMarkPos subtable */
public:
@@ -2663,7 +2827,7 @@ struct GPOS : GSUBGPOS
bool subset (hb_subset_context_t *c) const
{
- hb_subset_layout_context_t l (c, tableTag, c->plan->gpos_lookups, c->plan->gpos_features);
+ hb_subset_layout_context_t l (c, tableTag, c->plan->gpos_lookups, c->plan->gpos_langsys, c->plan->gpos_features);
return GSUBGPOS::subset<PosLookup> (&l);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
index 5f10ecb7ee..393ada1351 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
@@ -46,14 +46,19 @@ struct SingleSubstFormat1
bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
+ bool may_have_non_1to1 () const
+ { return false; }
+
void closure (hb_closure_context_t *c) const
{
unsigned d = deltaGlyphID;
+
+ hb_iter (this+coverage)
- | hb_filter (*c->glyphs)
+ | hb_filter (c->parent_active_glyphs ())
| hb_map ([d] (hb_codepoint_t g) { return (g + d) & 0xFFFFu; })
| hb_sink (c->output)
;
+
}
void closure_lookups (hb_closure_lookups_context_t *c) const {}
@@ -95,9 +100,9 @@ struct SingleSubstFormat1
unsigned delta)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false);
- c->check_assign (deltaGlyphID, delta);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
+ if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
+ c->check_assign (deltaGlyphID, delta, HB_SERIALIZE_ERROR_INT_OVERFLOW);
return_trace (true);
}
@@ -133,7 +138,7 @@ struct SingleSubstFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
HBUINT16 deltaGlyphID; /* Add to original GlyphID to get
@@ -147,13 +152,17 @@ struct SingleSubstFormat2
bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
+ bool may_have_non_1to1 () const
+ { return false; }
+
void closure (hb_closure_context_t *c) const
{
+ hb_zip (this+coverage, substitute)
- | hb_filter (*c->glyphs, hb_first)
+ | hb_filter (c->parent_active_glyphs (), hb_first)
| hb_map (hb_second)
| hb_sink (c->output)
;
+
}
void closure_lookups (hb_closure_lookups_context_t *c) const {}
@@ -200,9 +209,9 @@ struct SingleSubstFormat2
+ it
| hb_map_retains_sorting (hb_first)
;
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!substitute.serialize (c, substitutes))) return_trace (false);
- if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false);
+ if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
return_trace (true);
}
@@ -233,10 +242,10 @@ struct SingleSubstFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- ArrayOf<HBGlyphID>
+ Array16Of<HBGlyphID>
substitute; /* Array of substitute
* GlyphIDs--ordered by Coverage Index */
public:
@@ -334,9 +343,14 @@ struct Sequence
unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
+ unsigned lig_id = _hb_glyph_info_get_lig_id (&c->buffer->cur());
- for (unsigned int i = 0; i < count; i++) {
- _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
+ for (unsigned int i = 0; i < count; i++)
+ {
+ /* If is attached to a ligature, don't disturb that.
+ * https://github.com/harfbuzz/harfbuzz/issues/3069 */
+ if (!lig_id)
+ _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
c->output_glyph_for_component (substitute.arrayZ[i], klass);
}
c->buffer->skip_glyph ();
@@ -377,7 +391,7 @@ struct Sequence
}
protected:
- ArrayOf<HBGlyphID>
+ Array16Of<HBGlyphID>
substitute; /* String of GlyphIDs to substitute */
public:
DEFINE_SIZE_ARRAY (2, substitute);
@@ -388,10 +402,13 @@ struct MultipleSubstFormat1
bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
+ hb_zip (this+coverage, sequence)
- | hb_filter (*c->glyphs, hb_first)
+ | hb_filter (c->parent_active_glyphs (), hb_first)
| hb_map (hb_second)
| hb_map (hb_add (this))
| hb_apply ([c] (const Sequence &_) { _.closure (c); })
@@ -431,17 +448,17 @@ struct MultipleSubstFormat1
hb_array_t<const HBGlyphID> substitute_glyphs_list)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!sequence.serialize (c, glyphs.length))) return_trace (false);
for (unsigned int i = 0; i < glyphs.length; i++)
{
unsigned int substitute_len = substitute_len_list[i];
- if (unlikely (!sequence[i].serialize (c, this)
- .serialize (c, substitute_glyphs_list.sub_array (0, substitute_len))))
+ if (unlikely (!sequence[i]
+ .serialize_serialize (c, substitute_glyphs_list.sub_array (0, substitute_len))))
return_trace (false);
substitute_glyphs_list += substitute_len;
}
- return_trace (coverage.serialize (c, this).serialize (c, glyphs));
+ return_trace (coverage.serialize_serialize (c, glyphs));
}
bool subset (hb_subset_context_t *c) const
@@ -462,8 +479,7 @@ struct MultipleSubstFormat1
| hb_map (glyph_map)
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -475,10 +491,10 @@ struct MultipleSubstFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- OffsetArrayOf<Sequence>
+ Array16OfOffset16To<Sequence>
sequence; /* Array of Sequence tables
* ordered by Coverage Index */
public:
@@ -547,7 +563,12 @@ struct AlternateSet
/* If alt_index is MAX_VALUE, randomize feature if it is the rand feature. */
if (alt_index == HB_OT_MAP_MAX_VALUE && c->random)
+ {
+ /* Maybe we can do better than unsafe-to-break all; but since we are
+ * changing random state, it would be hard to track that. Good 'nough. */
+ c->buffer->unsafe_to_break_all ();
alt_index = c->random_number () % count + 1;
+ }
if (unlikely (alt_index > count || alt_index == 0)) return_trace (false);
@@ -603,7 +624,7 @@ struct AlternateSet
}
protected:
- ArrayOf<HBGlyphID>
+ Array16Of<HBGlyphID>
alternates; /* Array of alternate GlyphIDs--in
* arbitrary order */
public:
@@ -615,14 +636,18 @@ struct AlternateSubstFormat1
bool intersects (const hb_set_t *glyphs) const
{ return (this+coverage).intersects (glyphs); }
+ bool may_have_non_1to1 () const
+ { return false; }
+
void closure (hb_closure_context_t *c) const
{
+ hb_zip (this+coverage, alternateSet)
- | hb_filter (c->glyphs, hb_first)
+ | hb_filter (c->parent_active_glyphs (), hb_first)
| hb_map (hb_second)
| hb_map (hb_add (this))
| hb_apply ([c] (const AlternateSet &_) { _.closure (c); })
;
+
}
void closure_lookups (hb_closure_lookups_context_t *c) const {}
@@ -666,17 +691,17 @@ struct AlternateSubstFormat1
hb_array_t<const HBGlyphID> alternate_glyphs_list)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!alternateSet.serialize (c, glyphs.length))) return_trace (false);
for (unsigned int i = 0; i < glyphs.length; i++)
{
unsigned int alternate_len = alternate_len_list[i];
- if (unlikely (!alternateSet[i].serialize (c, this)
- .serialize (c, alternate_glyphs_list.sub_array (0, alternate_len))))
+ if (unlikely (!alternateSet[i]
+ .serialize_serialize (c, alternate_glyphs_list.sub_array (0, alternate_len))))
return_trace (false);
alternate_glyphs_list += alternate_len;
}
- return_trace (coverage.serialize (c, this).serialize (c, glyphs));
+ return_trace (coverage.serialize_serialize (c, glyphs));
}
bool subset (hb_subset_context_t *c) const
@@ -697,8 +722,7 @@ struct AlternateSubstFormat1
| hb_map (glyph_map)
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -710,10 +734,10 @@ struct AlternateSubstFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- OffsetArrayOf<AlternateSet>
+ Array16OfOffset16To<AlternateSet>
alternateSet; /* Array of AlternateSet tables
* ordered by Coverage Index */
public:
@@ -831,7 +855,7 @@ struct Ligature
Iterator components /* Starting from second */)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
ligGlyph = ligature;
if (unlikely (!component.serialize (c, components))) return_trace (false);
return_trace (true);
@@ -930,15 +954,14 @@ struct LigatureSet
hb_array_t<const HBGlyphID> &component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!ligature.serialize (c, ligatures.length))) return_trace (false);
for (unsigned int i = 0; i < ligatures.length; i++)
{
unsigned int component_count = (unsigned) hb_max ((int) component_count_list[i] - 1, 0);
- if (unlikely (!ligature[i].serialize (c, this)
- .serialize (c,
- ligatures[i],
- component_list.sub_array (0, component_count))))
+ if (unlikely (!ligature[i].serialize_serialize (c,
+ ligatures[i],
+ component_list.sub_array (0, component_count))))
return_trace (false);
component_list += component_count;
}
@@ -965,7 +988,7 @@ struct LigatureSet
}
protected:
- OffsetArrayOf<Ligature>
+ Array16OfOffset16To<Ligature>
ligature; /* Array LigatureSet tables
* ordered by preference */
public:
@@ -980,20 +1003,24 @@ struct LigatureSubstFormat1
+ hb_zip (this+coverage, ligatureSet)
| hb_filter (*glyphs, hb_first)
| hb_map (hb_second)
- | hb_map ([this, glyphs] (const OffsetTo<LigatureSet> &_)
+ | hb_map ([this, glyphs] (const Offset16To<LigatureSet> &_)
{ return (this+_).intersects (glyphs); })
| hb_any
;
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
+ hb_zip (this+coverage, ligatureSet)
- | hb_filter (*c->glyphs, hb_first)
+ | hb_filter (c->parent_active_glyphs (), hb_first)
| hb_map (hb_second)
| hb_map (hb_add (this))
| hb_apply ([c] (const LigatureSet &_) { _.closure (c); })
;
+
}
void closure_lookups (hb_closure_lookups_context_t *c) const {}
@@ -1039,20 +1066,20 @@ struct LigatureSubstFormat1
hb_array_t<const HBGlyphID> component_list /* Starting from second for each ligature */)
{
TRACE_SERIALIZE (this);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
if (unlikely (!ligatureSet.serialize (c, first_glyphs.length))) return_trace (false);
for (unsigned int i = 0; i < first_glyphs.length; i++)
{
unsigned int ligature_count = ligature_per_first_glyph_count_list[i];
- if (unlikely (!ligatureSet[i].serialize (c, this)
- .serialize (c,
- ligatures_list.sub_array (0, ligature_count),
- component_count_list.sub_array (0, ligature_count),
- component_list))) return_trace (false);
+ if (unlikely (!ligatureSet[i]
+ .serialize_serialize (c,
+ ligatures_list.sub_array (0, ligature_count),
+ component_count_list.sub_array (0, ligature_count),
+ component_list))) return_trace (false);
ligatures_list += ligature_count;
component_count_list += ligature_count;
}
- return_trace (coverage.serialize (c, this).serialize (c, first_glyphs));
+ return_trace (coverage.serialize_serialize (c, first_glyphs));
}
bool subset (hb_subset_context_t *c) const
@@ -1073,8 +1100,7 @@ struct LigatureSubstFormat1
| hb_map (glyph_map)
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -1086,10 +1112,10 @@ struct LigatureSubstFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- OffsetArrayOf<LigatureSet>
+ Array16OfOffset16To<LigatureSet>
ligatureSet; /* Array LigatureSet tables
* ordered by Coverage Index */
public:
@@ -1157,7 +1183,7 @@ struct ReverseChainSingleSubstFormat1
if (!(this+coverage).intersects (glyphs))
return false;
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
unsigned int count;
@@ -1174,15 +1200,18 @@ struct ReverseChainSingleSubstFormat1
return true;
}
+ bool may_have_non_1to1 () const
+ { return false; }
+
void closure (hb_closure_context_t *c) const
{
if (!intersects (c->glyphs)) return;
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
- const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
+ const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+ hb_zip (this+coverage, substitute)
- | hb_filter (*c->glyphs, hb_first)
+ | hb_filter (c->parent_active_glyphs (), hb_first)
| hb_map (hb_second)
| hb_sink (c->output)
;
@@ -1200,12 +1229,12 @@ struct ReverseChainSingleSubstFormat1
for (unsigned int i = 0; i < count; i++)
if (unlikely (!(this+backtrack[i]).collect_coverage (c->before))) return;
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
count = lookahead.len;
for (unsigned int i = 0; i < count; i++)
if (unlikely (!(this+lookahead[i]).collect_coverage (c->after))) return;
- const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
count = substitute.len;
c->output->add_array (substitute.arrayZ, substitute.len);
}
@@ -1224,8 +1253,8 @@ struct ReverseChainSingleSubstFormat1
unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint);
if (likely (index == NOT_COVERED)) return_trace (false);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
- const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
+ const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
if (unlikely (index >= substitute.len)) return_trace (false);
@@ -1250,11 +1279,80 @@ struct ReverseChainSingleSubstFormat1
return_trace (false);
}
+ template<typename Iterator,
+ hb_requires (hb_is_iterator (Iterator))>
+ bool serialize_coverage_offset_array (hb_subset_context_t *c, Iterator it) const
+ {
+ TRACE_SERIALIZE (this);
+ auto *out = c->serializer->start_embed<Array16OfOffset16To<Coverage>> ();
+
+ if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size)))
+ return_trace (false);
+
+ for (auto& offset : it) {
+ auto *o = out->serialize_append (c->serializer);
+ if (unlikely (!o) || !o->serialize_subset (c, offset, this))
+ return_trace (false);
+ }
+
+ return_trace (true);
+ }
+
+ template<typename Iterator, typename BacktrackIterator, typename LookaheadIterator,
+ hb_requires (hb_is_sorted_source_of (Iterator, hb_codepoint_pair_t)),
+ hb_requires (hb_is_iterator (BacktrackIterator)),
+ hb_requires (hb_is_iterator (LookaheadIterator))>
+ bool serialize (hb_subset_context_t *c,
+ Iterator coverage_subst_iter,
+ BacktrackIterator backtrack_iter,
+ LookaheadIterator lookahead_iter) const
+ {
+ TRACE_SERIALIZE (this);
+
+ auto *out = c->serializer->start_embed (this);
+ if (unlikely (!c->serializer->check_success (out))) return_trace (false);
+ if (unlikely (!c->serializer->embed (this->format))) return_trace (false);
+ if (unlikely (!c->serializer->embed (this->coverage))) return_trace (false);
+
+ if (!serialize_coverage_offset_array (c, backtrack_iter)) return_trace (false);
+ if (!serialize_coverage_offset_array (c, lookahead_iter)) return_trace (false);
+
+ auto *substitute_out = c->serializer->start_embed<Array16Of<HBGlyphID>> ();
+ auto substitutes =
+ + coverage_subst_iter
+ | hb_map (hb_second)
+ ;
+
+ auto glyphs =
+ + coverage_subst_iter
+ | hb_map_retains_sorting (hb_first)
+ ;
+ if (unlikely (! c->serializer->check_success (substitute_out->serialize (c->serializer, substitutes))))
+ return_trace (false);
+
+ if (unlikely (!out->coverage.serialize_serialize (c->serializer, glyphs)))
+ return_trace (false);
+ return_trace (true);
+ }
+
bool subset (hb_subset_context_t *c) const
{
TRACE_SUBSET (this);
- // TODO(subset)
- return_trace (false);
+ const hb_set_t &glyphset = *c->plan->glyphset_gsub ();
+ const hb_map_t &glyph_map = *c->plan->glyph_map;
+
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
+ const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
+
+ auto it =
+ + hb_zip (this+coverage, substitute)
+ | hb_filter (glyphset, hb_first)
+ | hb_filter (glyphset, hb_second)
+ | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID &> p) -> hb_codepoint_pair_t
+ { return hb_pair (glyph_map[p.first], glyph_map[p.second]); })
+ ;
+
+ return_trace (bool (it) && serialize (c, it, backtrack.iter (), lookahead.iter ()));
}
bool sanitize (hb_sanitize_context_t *c) const
@@ -1262,27 +1360,27 @@ struct ReverseChainSingleSubstFormat1
TRACE_SANITIZE (this);
if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
return_trace (false);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!lookahead.sanitize (c, this))
return_trace (false);
- const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead);
+ const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead);
return_trace (substitute.sanitize (c));
}
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
- OffsetArrayOf<Coverage>
+ Array16OfOffset16To<Coverage>
backtrack; /* Array of coverage tables
* in backtracking sequence, in glyph
* sequence order */
- OffsetArrayOf<Coverage>
+ Array16OfOffset16To<Coverage>
lookaheadX; /* Array of coverage tables
* in lookahead sequence, in glyph
* sequence order */
- ArrayOf<HBGlyphID>
+ Array16Of<HBGlyphID>
substituteX; /* Array of substitute
* GlyphIDs--ordered by Coverage Index */
public:
@@ -1388,6 +1486,12 @@ struct SubstLookup : Lookup
return lookup_type_is_reverse (type);
}
+ bool may_have_non_1to1 () const
+ {
+ hb_have_non_1to1_context_t c;
+ return dispatch (&c);
+ }
+
bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
@@ -1455,10 +1559,6 @@ struct SubstLookup : Lookup
static inline bool apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index);
- SubTable& serialize_subtable (hb_serialize_context_t *c,
- unsigned int i)
- { return get_subtables<SubTable> ()[i].serialize (c, this); }
-
bool serialize_single (hb_serialize_context_t *c,
uint32_t lookup_props,
hb_sorted_array_t<const HBGlyphID> glyphs,
@@ -1466,8 +1566,13 @@ struct SubstLookup : Lookup
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false);
- return_trace (serialize_subtable (c, 0).u.single.
- serialize (c, hb_zip (glyphs, substitutes)));
+ if (c->push<SubTable> ()->u.single.serialize (c, hb_zip (glyphs, substitutes)))
+ {
+ c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
+ return_trace (true);
+ }
+ c->pop_discard ();
+ return_trace (false);
}
bool serialize_multiple (hb_serialize_context_t *c,
@@ -1478,11 +1583,17 @@ struct SubstLookup : Lookup
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false);
- return_trace (serialize_subtable (c, 0).u.multiple.
- serialize (c,
- glyphs,
- substitute_len_list,
- substitute_glyphs_list));
+ if (c->push<SubTable> ()->u.multiple.
+ serialize (c,
+ glyphs,
+ substitute_len_list,
+ substitute_glyphs_list))
+ {
+ c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
+ return_trace (true);
+ }
+ c->pop_discard ();
+ return_trace (false);
}
bool serialize_alternate (hb_serialize_context_t *c,
@@ -1493,11 +1604,18 @@ struct SubstLookup : Lookup
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Alternate, lookup_props, 1))) return_trace (false);
- return_trace (serialize_subtable (c, 0).u.alternate.
- serialize (c,
- glyphs,
- alternate_len_list,
- alternate_glyphs_list));
+
+ if (c->push<SubTable> ()->u.alternate.
+ serialize (c,
+ glyphs,
+ alternate_len_list,
+ alternate_glyphs_list))
+ {
+ c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
+ return_trace (true);
+ }
+ c->pop_discard ();
+ return_trace (false);
}
bool serialize_ligature (hb_serialize_context_t *c,
@@ -1510,24 +1628,32 @@ struct SubstLookup : Lookup
{
TRACE_SERIALIZE (this);
if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false);
- return_trace (serialize_subtable (c, 0).u.ligature.
- serialize (c,
- first_glyphs,
- ligature_per_first_glyph_count_list,
- ligatures_list,
- component_count_list,
- component_list));
+ if (c->push<SubTable> ()->u.ligature.
+ serialize (c,
+ first_glyphs,
+ ligature_per_first_glyph_count_list,
+ ligatures_list,
+ component_count_list,
+ component_list))
+ {
+ c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
+ return_trace (true);
+ }
+ c->pop_discard ();
+ return_trace (false);
}
template <typename context_t>
static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index);
- static inline hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned int lookup_index)
+ static inline typename hb_closure_context_t::return_t closure_glyphs_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index);
+
+ static inline hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index)
{
if (!c->should_visit_lookup (lookup_index))
return hb_empty_t ();
- hb_closure_context_t::return_t ret = dispatch_recurse_func (c, lookup_index);
+ hb_closure_context_t::return_t ret = closure_glyphs_recurse_func (c, lookup_index, covered_seq_indices, seq_index, end_index);
/* While in theory we should flush here, it will cause timeouts because a recursive
* lookup can keep growing the glyph set. Skip, and outer loop will retry up to
@@ -1564,7 +1690,7 @@ struct GSUB : GSUBGPOS
bool subset (hb_subset_context_t *c) const
{
- hb_subset_layout_context_t l (c, tableTag, c->plan->gsub_lookups, c->plan->gsub_features);
+ hb_subset_layout_context_t l (c, tableTag, c->plan->gsub_lookups, c->plan->gsub_langsys, c->plan->gsub_features);
return GSUBGPOS::subset<SubstLookup> (&l);
}
@@ -1600,6 +1726,14 @@ template <typename context_t>
return l.dispatch (c);
}
+/*static*/ typename hb_closure_context_t::return_t SubstLookup::closure_glyphs_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index)
+{
+ const SubstLookup &l = c->face->table.GSUB.get_relaxed ()->table->get_lookup (lookup_index);
+ if (l.may_have_non_1to1 ())
+ hb_set_add_range (covered_seq_indices, seq_index, end_index);
+ return l.dispatch (c);
+}
+
/*static*/ inline hb_closure_lookups_context_t::return_t SubstLookup::dispatch_closure_lookups_recurse_func (hb_closure_lookups_context_t *c, unsigned this_index)
{
const SubstLookup &l = c->face->table.GSUB.get_relaxed ()->table->get_lookup (this_index);
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
index 36a95ead15..626abc5577 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
@@ -52,23 +52,32 @@ struct hb_intersects_context_t :
const hb_set_t *glyphs;
hb_intersects_context_t (const hb_set_t *glyphs_) :
- glyphs (glyphs_) {}
+ glyphs (glyphs_) {}
+};
+
+struct hb_have_non_1to1_context_t :
+ hb_dispatch_context_t<hb_have_non_1to1_context_t, bool>
+{
+ template <typename T>
+ return_t dispatch (const T &obj) { return obj.may_have_non_1to1 (); }
+ static return_t default_return_value () { return false; }
+ bool stop_sublookup_iteration (return_t r) const { return r; }
};
struct hb_closure_context_t :
hb_dispatch_context_t<hb_closure_context_t>
{
- typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
+ typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index);
template <typename T>
return_t dispatch (const T &obj) { obj.closure (this); return hb_empty_t (); }
static return_t default_return_value () { return hb_empty_t (); }
- void recurse (unsigned int lookup_index)
+ void recurse (unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index)
{
if (unlikely (nesting_level_left == 0 || !recurse_func))
return;
nesting_level_left--;
- recurse_func (this, lookup_index);
+ recurse_func (this, lookup_index, covered_seq_indicies, seq_index, end_index);
nesting_level_left++;
}
@@ -83,36 +92,90 @@ struct hb_closure_context_t :
if (is_lookup_done (lookup_index))
return false;
- done_lookups->set (lookup_index, glyphs->get_population ());
return true;
}
bool is_lookup_done (unsigned int lookup_index)
{
- if (unlikely (done_lookups->in_error ()))
+ if (done_lookups_glyph_count->in_error () ||
+ done_lookups_glyph_set->in_error ())
return true;
/* Have we visited this lookup with the current set of glyphs? */
- return done_lookups->get (lookup_index) == glyphs->get_population ();
+ if (done_lookups_glyph_count->get (lookup_index) != glyphs->get_population ())
+ {
+ done_lookups_glyph_count->set (lookup_index, glyphs->get_population ());
+
+ if (!done_lookups_glyph_set->get (lookup_index))
+ {
+ hb_set_t* empty_set = hb_set_create ();
+ if (unlikely (!done_lookups_glyph_set->set (lookup_index, empty_set)))
+ {
+ hb_set_destroy (empty_set);
+ return true;
+ }
+ }
+
+ hb_set_clear (done_lookups_glyph_set->get (lookup_index));
+ }
+
+ hb_set_t *covered_glyph_set = done_lookups_glyph_set->get (lookup_index);
+ if (unlikely (covered_glyph_set->in_error ()))
+ return true;
+ if (parent_active_glyphs ()->is_subset (*covered_glyph_set))
+ return true;
+
+ hb_set_union (covered_glyph_set, parent_active_glyphs ());
+ return false;
+ }
+
+ hb_set_t* parent_active_glyphs ()
+ {
+ if (active_glyphs_stack.length < 1)
+ return glyphs;
+
+ return active_glyphs_stack.tail ();
+ }
+
+ void push_cur_active_glyphs (hb_set_t* cur_active_glyph_set)
+ {
+ active_glyphs_stack.push (cur_active_glyph_set);
+ }
+
+ bool pop_cur_done_glyphs ()
+ {
+ if (active_glyphs_stack.length < 1)
+ return false;
+
+ active_glyphs_stack.pop ();
+ return true;
}
hb_face_t *face;
hb_set_t *glyphs;
+ hb_set_t *cur_intersected_glyphs;
hb_set_t output[1];
+ hb_vector_t<hb_set_t *> active_glyphs_stack;
recurse_func_t recurse_func;
unsigned int nesting_level_left;
hb_closure_context_t (hb_face_t *face_,
hb_set_t *glyphs_,
- hb_map_t *done_lookups_,
+ hb_set_t *cur_intersected_glyphs_,
+ hb_map_t *done_lookups_glyph_count_,
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *done_lookups_glyph_set_,
unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
face (face_),
glyphs (glyphs_),
+ cur_intersected_glyphs (cur_intersected_glyphs_),
recurse_func (nullptr),
nesting_level_left (nesting_level_left_),
- done_lookups (done_lookups_),
+ done_lookups_glyph_count (done_lookups_glyph_count_),
+ done_lookups_glyph_set (done_lookups_glyph_set_),
lookup_count (0)
- {}
+ {
+ push_cur_active_glyphs (glyphs_);
+ }
~hb_closure_context_t () { flush (); }
@@ -120,16 +183,21 @@ struct hb_closure_context_t :
void flush ()
{
- hb_set_del_range (output, face->get_num_glyphs (), hb_set_get_max (output)); /* Remove invalid glyphs. */
+ hb_set_del_range (output, face->get_num_glyphs (), HB_SET_VALUE_INVALID); /* Remove invalid glyphs. */
hb_set_union (glyphs, output);
hb_set_clear (output);
+ active_glyphs_stack.pop ();
+ active_glyphs_stack.fini ();
}
private:
- hb_map_t *done_lookups;
+ hb_map_t *done_lookups_glyph_count;
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *done_lookups_glyph_set;
unsigned int lookup_count;
};
+
+
struct hb_closure_lookups_context_t :
hb_dispatch_context_t<hb_closure_lookups_context_t>
{
@@ -737,12 +805,14 @@ struct hb_get_subtables_context_t :
typedef bool (*intersects_func_t) (const hb_set_t *glyphs, const HBUINT16 &value, const void *data);
+typedef void (*intersected_glyphs_func_t) (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs);
typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const HBUINT16 &value, const void *data);
typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data);
struct ContextClosureFuncs
{
intersects_func_t intersects;
+ intersected_glyphs_func_t intersected_glyphs;
};
struct ContextCollectGlyphsFuncs
{
@@ -765,10 +835,29 @@ static inline bool intersects_class (const hb_set_t *glyphs, const HBUINT16 &val
}
static inline bool intersects_coverage (const hb_set_t *glyphs, const HBUINT16 &value, const void *data)
{
- const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
+ const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value;
return (data+coverage).intersects (glyphs);
}
+
+static inline void intersected_glyph (const hb_set_t *glyphs HB_UNUSED, const void *data, unsigned value, hb_set_t *intersected_glyphs)
+{
+ unsigned g = reinterpret_cast<const HBUINT16 *>(data)[value];
+ intersected_glyphs->add (g);
+}
+static inline void intersected_class_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs)
+{
+ const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
+ class_def.intersected_class_glyphs (glyphs, value, intersected_glyphs);
+}
+static inline void intersected_coverage_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs)
+{
+ Offset16To<Coverage> coverage;
+ coverage = value;
+ (data+coverage).intersected_coverage_glyphs (glyphs, intersected_glyphs);
+}
+
+
static inline bool array_is_subset_of (const hb_set_t *glyphs,
unsigned int count,
const HBUINT16 values[],
@@ -792,7 +881,7 @@ static inline void collect_class (hb_set_t *glyphs, const HBUINT16 &value, const
}
static inline void collect_coverage (hb_set_t *glyphs, const HBUINT16 &value, const void *data)
{
- const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
+ const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value;
(data+coverage).collect_coverage (glyphs);
}
static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED,
@@ -820,7 +909,7 @@ static inline bool match_class (hb_codepoint_t glyph_id, const HBUINT16 &value,
}
static inline bool match_coverage (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data)
{
- const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
+ const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value;
return (data+coverage).get_coverage (glyph_id) != NOT_COVERED;
}
@@ -1146,10 +1235,79 @@ struct LookupRecord
DEFINE_SIZE_STATIC (4);
};
+enum ContextFormat { SimpleContext = 1, ClassBasedContext = 2, CoverageBasedContext = 3 };
+
+static void context_closure_recurse_lookups (hb_closure_context_t *c,
+ unsigned inputCount, const HBUINT16 input[],
+ unsigned lookupCount,
+ const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */,
+ unsigned value,
+ ContextFormat context_format,
+ const void *data,
+ intersected_glyphs_func_t intersected_glyphs_func)
+{
+ hb_set_t *covered_seq_indicies = hb_set_create ();
+ for (unsigned int i = 0; i < lookupCount; i++)
+ {
+ unsigned seqIndex = lookupRecord[i].sequenceIndex;
+ if (seqIndex >= inputCount) continue;
+
+ hb_set_t *pos_glyphs = nullptr;
+
+ if (hb_set_is_empty (covered_seq_indicies) || !hb_set_has (covered_seq_indicies, seqIndex))
+ {
+ pos_glyphs = hb_set_create ();
+ if (seqIndex == 0)
+ {
+ switch (context_format) {
+ case ContextFormat::SimpleContext:
+ pos_glyphs->add (value);
+ break;
+ case ContextFormat::ClassBasedContext:
+ intersected_glyphs_func (c->cur_intersected_glyphs, data, value, pos_glyphs);
+ break;
+ case ContextFormat::CoverageBasedContext:
+ hb_set_set (pos_glyphs, c->cur_intersected_glyphs);
+ break;
+ }
+ }
+ else
+ {
+ const void *input_data = input;
+ unsigned input_value = seqIndex - 1;
+ if (context_format != ContextFormat::SimpleContext)
+ {
+ input_data = data;
+ input_value = input[seqIndex - 1];
+ }
+
+ intersected_glyphs_func (c->glyphs, input_data, input_value, pos_glyphs);
+ }
+ }
+
+ hb_set_add (covered_seq_indicies, seqIndex);
+ if (pos_glyphs)
+ c->push_cur_active_glyphs (pos_glyphs);
+
+ unsigned endIndex = inputCount;
+ if (context_format == ContextFormat::CoverageBasedContext)
+ endIndex += 1;
+
+ c->recurse (lookupRecord[i].lookupListIndex, covered_seq_indicies, seqIndex, endIndex);
+
+ if (pos_glyphs) {
+ c->pop_cur_done_glyphs ();
+ hb_set_destroy (pos_glyphs);
+ }
+ }
+
+ hb_set_destroy (covered_seq_indicies);
+}
+
template <typename context_t>
static inline void recurse_lookups (context_t *c,
- unsigned int lookupCount,
- const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
+ unsigned int lookupCount,
+ const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */)
{
for (unsigned int i = 0; i < lookupCount; i++)
c->recurse (lookupRecord[i].lookupListIndex);
@@ -1284,6 +1442,7 @@ static inline bool apply_lookup (hb_ot_apply_context_t *c,
struct ContextClosureLookupContext
{
ContextClosureFuncs funcs;
+ ContextFormat context_format;
const void *intersects_data;
};
@@ -1314,13 +1473,19 @@ static inline void context_closure_lookup (hb_closure_context_t *c,
const HBUINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[],
+ unsigned value, /* Index of first glyph in Coverage or Class value in ClassDef table */
ContextClosureLookupContext &lookup_context)
{
if (context_intersects (c->glyphs,
inputCount, input,
lookup_context))
- recurse_lookups (c,
- lookupCount, lookupRecord);
+ context_closure_recurse_lookups (c,
+ inputCount, input,
+ lookupCount, lookupRecord,
+ value,
+ lookup_context.context_format,
+ lookup_context.intersects_data,
+ lookup_context.funcs.intersected_glyphs);
}
static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
@@ -1377,7 +1542,7 @@ struct Rule
lookup_context);
}
- void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c, unsigned value, ContextClosureLookupContext &lookup_context) const
{
if (unlikely (c->lookup_limit_exceeded ())) return;
@@ -1386,7 +1551,7 @@ struct Rule
context_closure_lookup (c,
inputCount, inputZ.arrayZ,
lookupCount, lookupRecord.arrayZ,
- lookup_context);
+ value, lookup_context);
}
void closure_lookups (hb_closure_lookups_context_t *c,
@@ -1453,7 +1618,14 @@ struct Rule
const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
(inputZ.as_array ((inputCount ? inputCount - 1 : 0)));
for (unsigned i = 0; i < (unsigned) lookupCount; i++)
+ {
+ if (!lookup_map->has (lookupRecord[i].lookupListIndex))
+ {
+ out->lookupCount--;
+ continue;
+ }
c->copy (lookupRecord[i], lookup_map);
+ }
return_trace (true);
}
@@ -1511,7 +1683,7 @@ struct RuleSet
;
}
- void closure (hb_closure_context_t *c,
+ void closure (hb_closure_context_t *c, unsigned value,
ContextClosureLookupContext &lookup_context) const
{
if (unlikely (c->lookup_limit_exceeded ())) return;
@@ -1519,7 +1691,7 @@ struct RuleSet
return
+ hb_iter (rule)
| hb_map (hb_add (this))
- | hb_apply ([&] (const Rule &_) { _.closure (c, lookup_context); })
+ | hb_apply ([&] (const Rule &_) { _.closure (c, value, lookup_context); })
;
}
@@ -1577,7 +1749,7 @@ struct RuleSet
auto *out = c->serializer->start_embed (*this);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
- for (const OffsetTo<Rule>& _ : rule)
+ for (const Offset16To<Rule>& _ : rule)
{
if (!_) continue;
auto *o = out->rule.serialize_append (c->serializer);
@@ -1604,7 +1776,7 @@ struct RuleSet
}
protected:
- OffsetArrayOf<Rule>
+ Array16OfOffset16To<Rule>
rule; /* Array of Rule tables
* ordered by preference */
public:
@@ -1617,7 +1789,8 @@ struct ContextFormat1
bool intersects (const hb_set_t *glyphs) const
{
struct ContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
nullptr
};
@@ -1631,25 +1804,32 @@ struct ContextFormat1
;
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
struct ContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
nullptr
};
- + hb_zip (this+coverage, ruleSet)
- | hb_filter (*c->glyphs, hb_first)
- | hb_map (hb_second)
- | hb_map (hb_add (this))
- | hb_apply ([&] (const RuleSet &_) { _.closure (c, lookup_context); })
+ + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
+ | hb_filter (c->parent_active_glyphs (), hb_first)
+ | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const RuleSet&> (_.first, this+ruleSet[_.second]); })
+ | hb_apply ([&] (const hb_pair_t<unsigned, const RuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
;
}
void closure_lookups (hb_closure_lookups_context_t *c) const
{
struct ContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
nullptr
};
@@ -1725,8 +1905,7 @@ struct ContextFormat1
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -1738,10 +1917,10 @@ struct ContextFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
- OffsetArrayOf<RuleSet>
+ Array16OfOffset16To<RuleSet>
ruleSet; /* Array of RuleSet tables
* ordered by Coverage Index */
public:
@@ -1759,7 +1938,8 @@ struct ContextFormat2
const ClassDef &class_def = this+classDef;
struct ContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
&class_def
};
@@ -1774,26 +1954,35 @@ struct ContextFormat2
;
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
if (!(this+coverage).intersects (c->glyphs))
return;
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
const ClassDef &class_def = this+classDef;
struct ContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
&class_def
};
return
+ hb_enumerate (ruleSet)
| hb_filter ([&] (unsigned _)
- { return class_def.intersects_class (c->glyphs, _); },
+ { return class_def.intersects_class (c->cur_intersected_glyphs, _); },
hb_first)
- | hb_map (hb_second)
- | hb_map (hb_add (this))
- | hb_apply ([&] (const RuleSet &_) { _.closure (c, lookup_context); })
+ | hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<RuleSet>&> _)
+ {
+ const RuleSet& rule_set = this+_.second;
+ rule_set.closure (c, _.first, lookup_context);
+ })
;
}
@@ -1805,7 +1994,8 @@ struct ContextFormat2
const ClassDef &class_def = this+classDef;
struct ContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
&class_def
};
@@ -1919,13 +2109,13 @@ struct ContextFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
classDef; /* Offset to glyph ClassDef table--from
* beginning of table */
- OffsetArrayOf<RuleSet>
+ Array16OfOffset16To<RuleSet>
ruleSet; /* Array of RuleSet tables
* ordered by class */
public:
@@ -1941,7 +2131,8 @@ struct ContextFormat3
return false;
struct ContextClosureLookupContext lookup_context = {
- {intersects_coverage},
+ {intersects_coverage, intersected_coverage_glyphs},
+ ContextFormat::CoverageBasedContext,
this
};
return context_intersects (glyphs,
@@ -1949,20 +2140,27 @@ struct ContextFormat3
lookup_context);
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
if (!(this+coverageZ[0]).intersects (c->glyphs))
return;
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
struct ContextClosureLookupContext lookup_context = {
- {intersects_coverage},
+ {intersects_coverage, intersected_coverage_glyphs},
+ ContextFormat::CoverageBasedContext,
this
};
context_closure_lookup (c,
glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
lookupCount, lookupRecord,
- lookup_context);
+ 0, lookup_context);
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -2032,10 +2230,10 @@ struct ContextFormat3
auto coverages = coverageZ.as_array (glyphCount);
- for (const OffsetTo<Coverage>& offset : coverages)
+ for (const Offset16To<Coverage>& offset : coverages)
{
/* TODO(subset) This looks like should not be necessary to write this way. */
- auto *o = c->serializer->allocate_size<OffsetTo<Coverage>> (OffsetTo<Coverage>::static_size);
+ auto *o = c->serializer->allocate_size<Offset16To<Coverage>> (Offset16To<Coverage>::static_size);
if (unlikely (!o)) return_trace (false);
if (!o->serialize_subset (c, offset, this)) return_trace (false);
}
@@ -2043,7 +2241,14 @@ struct ContextFormat3
const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
for (unsigned i = 0; i < (unsigned) lookupCount; i++)
+ {
+ if (!lookup_map->has (lookupRecord[i].lookupListIndex))
+ {
+ out->lookupCount--;
+ continue;
+ }
c->serializer->copy (lookupRecord[i], lookup_map);
+ }
return_trace (true);
}
@@ -2066,7 +2271,7 @@ struct ContextFormat3
HBUINT16 glyphCount; /* Number of glyphs in the input glyph
* sequence */
HBUINT16 lookupCount; /* Number of LookupRecords */
- UnsizedArrayOf<OffsetTo<Coverage>>
+ UnsizedArrayOf<Offset16To<Coverage>>
coverageZ; /* Array of offsets to Coverage
* table in glyph sequence order */
/*UnsizedArrayOf<LookupRecord>
@@ -2106,6 +2311,7 @@ struct Context
struct ChainContextClosureLookupContext
{
ContextClosureFuncs funcs;
+ ContextFormat context_format;
const void *intersects_data[3];
};
@@ -2150,6 +2356,7 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
const HBUINT16 lookahead[],
unsigned int lookupCount,
const LookupRecord lookupRecord[],
+ unsigned value,
ChainContextClosureLookupContext &lookup_context)
{
if (chain_context_intersects (c->glyphs,
@@ -2157,8 +2364,13 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
inputCount, input,
lookaheadCount, lookahead,
lookup_context))
- recurse_lookups (c,
- lookupCount, lookupRecord);
+ context_closure_recurse_lookups (c,
+ inputCount, input,
+ lookupCount, lookupRecord,
+ value,
+ lookup_context.context_format,
+ lookup_context.intersects_data[1],
+ lookup_context.funcs.intersected_glyphs);
}
static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
@@ -2239,7 +2451,7 @@ struct ChainRule
bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const
{
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
return chain_context_intersects (glyphs,
backtrack.len, backtrack.arrayZ,
input.lenP1, input.arrayZ,
@@ -2247,19 +2459,20 @@ struct ChainRule
lookup_context);
}
- void closure (hb_closure_context_t *c,
+ void closure (hb_closure_context_t *c, unsigned value,
ChainContextClosureLookupContext &lookup_context) const
{
if (unlikely (c->lookup_limit_exceeded ())) return;
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
chain_context_closure_lookup (c,
backtrack.len, backtrack.arrayZ,
input.lenP1, input.arrayZ,
lookahead.len, lookahead.arrayZ,
lookup.len, lookup.arrayZ,
+ value,
lookup_context);
}
@@ -2270,8 +2483,8 @@ struct ChainRule
if (!intersects (c->glyphs, lookup_context)) return;
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
recurse_lookups (c, lookup.len, lookup.arrayZ);
}
@@ -2279,8 +2492,8 @@ struct ChainRule
ChainContextCollectGlyphsLookupContext &lookup_context) const
{
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
chain_context_collect_glyphs_lookup (c,
backtrack.len, backtrack.arrayZ,
input.lenP1, input.arrayZ,
@@ -2293,8 +2506,8 @@ struct ChainRule
ChainContextApplyLookupContext &lookup_context) const
{
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
return chain_context_would_apply_lookup (c,
backtrack.len, backtrack.arrayZ,
input.lenP1, input.arrayZ,
@@ -2306,8 +2519,8 @@ struct ChainRule
{
TRACE_APPLY (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
return_trace (chain_context_apply_lookup (c,
backtrack.len, backtrack.arrayZ,
input.lenP1, input.arrayZ,
@@ -2345,12 +2558,12 @@ struct ChainRule
serialize_array (c, input.lenP1, + input.iter ()
| hb_map (mapping));
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
if (lookahead_map) mapping = lookahead_map;
serialize_array (c, lookahead.len, + lookahead.iter ()
| hb_map (mapping));
- const ArrayOf<LookupRecord> &lookupRecord = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead);
HBUINT16* lookupCount = c->embed (&(lookupRecord.len));
if (!lookupCount) return_trace (nullptr);
@@ -2377,7 +2590,7 @@ struct ChainRule
TRACE_SUBSET (this);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
if (!backtrack_map)
{
@@ -2408,24 +2621,24 @@ struct ChainRule
if (!backtrack.sanitize (c)) return_trace (false);
const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack);
if (!input.sanitize (c)) return_trace (false);
- const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input);
+ const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input);
if (!lookahead.sanitize (c)) return_trace (false);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
return_trace (lookup.sanitize (c));
}
protected:
- ArrayOf<HBUINT16>
+ Array16Of<HBUINT16>
backtrack; /* Array of backtracking values
* (to be matched before the input
* sequence) */
HeadlessArrayOf<HBUINT16>
inputX; /* Array of input values (start with
* second glyph) */
- ArrayOf<HBUINT16>
+ Array16Of<HBUINT16>
lookaheadX; /* Array of lookahead values's (to be
* matched after the input sequence) */
- ArrayOf<LookupRecord>
+ Array16Of<LookupRecord>
lookupX; /* Array of LookupRecords--in
* design order) */
public:
@@ -2443,14 +2656,14 @@ struct ChainRuleSet
| hb_any
;
}
- void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
+ void closure (hb_closure_context_t *c, unsigned value, ChainContextClosureLookupContext &lookup_context) const
{
if (unlikely (c->lookup_limit_exceeded ())) return;
return
+ hb_iter (rule)
| hb_map (hb_add (this))
- | hb_apply ([&] (const ChainRule &_) { _.closure (c, lookup_context); })
+ | hb_apply ([&] (const ChainRule &_) { _.closure (c, value, lookup_context); })
;
}
@@ -2508,7 +2721,7 @@ struct ChainRuleSet
auto *out = c->serializer->start_embed (*this);
if (unlikely (!c->serializer->extend_min (out))) return_trace (false);
- for (const OffsetTo<ChainRule>& _ : rule)
+ for (const Offset16To<ChainRule>& _ : rule)
{
if (!_) continue;
auto *o = out->rule.serialize_append (c->serializer);
@@ -2539,7 +2752,7 @@ struct ChainRuleSet
}
protected:
- OffsetArrayOf<ChainRule>
+ Array16OfOffset16To<ChainRule>
rule; /* Array of ChainRule tables
* ordered by preference */
public:
@@ -2551,7 +2764,8 @@ struct ChainContextFormat1
bool intersects (const hb_set_t *glyphs) const
{
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
{nullptr, nullptr, nullptr}
};
@@ -2565,25 +2779,32 @@ struct ChainContextFormat1
;
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
{nullptr, nullptr, nullptr}
};
- + hb_zip (this+coverage, ruleSet)
- | hb_filter (*c->glyphs, hb_first)
- | hb_map (hb_second)
- | hb_map (hb_add (this))
- | hb_apply ([&] (const ChainRuleSet &_) { _.closure (c, lookup_context); })
+ + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
+ | hb_filter (c->parent_active_glyphs (), hb_first)
+ | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const ChainRuleSet&> (_.first, this+ruleSet[_.second]); })
+ | hb_apply ([&] (const hb_pair_t<unsigned, const ChainRuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
;
}
void closure_lookups (hb_closure_lookups_context_t *c) const
{
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_glyph},
+ {intersects_glyph, intersected_glyph},
+ ContextFormat::SimpleContext,
{nullptr, nullptr, nullptr}
};
@@ -2658,8 +2879,7 @@ struct ChainContextFormat1
| hb_sink (new_coverage)
;
- out->coverage.serialize (c->serializer, out)
- .serialize (c->serializer, new_coverage.iter ());
+ out->coverage.serialize_serialize (c->serializer, new_coverage.iter ());
return_trace (bool (new_coverage));
}
@@ -2671,10 +2891,10 @@ struct ChainContextFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
- OffsetArrayOf<ChainRuleSet>
+ Array16OfOffset16To<ChainRuleSet>
ruleSet; /* Array of ChainRuleSet tables
* ordered by Coverage Index */
public:
@@ -2693,7 +2913,8 @@ struct ChainContextFormat2
const ClassDef &lookahead_class_def = this+lookaheadClassDef;
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
{&backtrack_class_def,
&input_class_def,
&lookahead_class_def}
@@ -2709,17 +2930,25 @@ struct ChainContextFormat2
| hb_any
;
}
+
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
if (!(this+coverage).intersects (c->glyphs))
return;
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
const ClassDef &backtrack_class_def = this+backtrackClassDef;
const ClassDef &input_class_def = this+inputClassDef;
const ClassDef &lookahead_class_def = this+lookaheadClassDef;
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
{&backtrack_class_def,
&input_class_def,
&lookahead_class_def}
@@ -2728,11 +2957,13 @@ struct ChainContextFormat2
return
+ hb_enumerate (ruleSet)
| hb_filter ([&] (unsigned _)
- { return input_class_def.intersects_class (c->glyphs, _); },
+ { return input_class_def.intersects_class (c->cur_intersected_glyphs, _); },
hb_first)
- | hb_map (hb_second)
- | hb_map (hb_add (this))
- | hb_apply ([&] (const ChainRuleSet &_) { _.closure (c, lookup_context); })
+ | hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<ChainRuleSet>&> _)
+ {
+ const ChainRuleSet& chainrule_set = this+_.second;
+ chainrule_set.closure (c, _.first, lookup_context);
+ })
;
}
@@ -2746,7 +2977,8 @@ struct ChainContextFormat2
const ClassDef &lookahead_class_def = this+lookaheadClassDef;
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_class},
+ {intersects_class, intersected_class_glyphs},
+ ContextFormat::ClassBasedContext,
{&backtrack_class_def,
&input_class_def,
&lookahead_class_def}
@@ -2852,7 +3084,7 @@ struct ChainContextFormat2
bool ret = true;
const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
auto last_non_zero = c->serializer->snapshot ();
- for (const OffsetTo<ChainRuleSet>& _ : + hb_enumerate (ruleSet)
+ for (const Offset16To<ChainRuleSet>& _ : + hb_enumerate (ruleSet)
| hb_filter (input_klass_map, hb_first)
| hb_map (hb_second))
{
@@ -2898,22 +3130,22 @@ struct ChainContextFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- OffsetTo<Coverage>
+ Offset16To<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
backtrackClassDef; /* Offset to glyph ClassDef table
* containing backtrack sequence
* data--from beginning of table */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
inputClassDef; /* Offset to glyph ClassDef
* table containing input sequence
* data--from beginning of table */
- OffsetTo<ClassDef>
+ Offset16To<ClassDef>
lookaheadClassDef; /* Offset to glyph ClassDef table
* containing lookahead sequence
* data--from beginning of table */
- OffsetArrayOf<ChainRuleSet>
+ Array16OfOffset16To<ChainRuleSet>
ruleSet; /* Array of ChainRuleSet tables
* ordered by class */
public:
@@ -2924,14 +3156,15 @@ struct ChainContextFormat3
{
bool intersects (const hb_set_t *glyphs) const
{
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!(this+input[0]).intersects (glyphs))
return false;
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_coverage},
+ {intersects_coverage, intersected_coverage_glyphs},
+ ContextFormat::CoverageBasedContext,
{this, this, this}
};
return chain_context_intersects (glyphs,
@@ -2941,17 +3174,24 @@ struct ChainContextFormat3
lookup_context);
}
+ bool may_have_non_1to1 () const
+ { return true; }
+
void closure (hb_closure_context_t *c) const
{
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!(this+input[0]).intersects (c->glyphs))
return;
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ c->cur_intersected_glyphs->clear ();
+ get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
struct ChainContextClosureLookupContext lookup_context = {
- {intersects_coverage},
+ {intersects_coverage, intersected_coverage_glyphs},
+ ContextFormat::CoverageBasedContext,
{this, this, this}
};
chain_context_closure_lookup (c,
@@ -2959,7 +3199,7 @@ struct ChainContextFormat3
input.len, (const HBUINT16 *) input.arrayZ + 1,
lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
lookup.len, lookup.arrayZ,
- lookup_context);
+ 0, lookup_context);
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -2967,9 +3207,9 @@ struct ChainContextFormat3
if (!intersects (c->glyphs))
return;
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
recurse_lookups (c, lookup.len, lookup.arrayZ);
}
@@ -2977,12 +3217,12 @@ struct ChainContextFormat3
void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
(this+input[0]).collect_coverage (c->input);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
struct ChainContextCollectGlyphsLookupContext lookup_context = {
{collect_coverage},
{this, this, this}
@@ -2997,9 +3237,9 @@ struct ChainContextFormat3
bool would_apply (hb_would_apply_context_t *c) const
{
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
struct ChainContextApplyLookupContext lookup_context = {
{match_coverage},
{this, this, this}
@@ -3013,20 +3253,20 @@ struct ChainContextFormat3
const Coverage &get_coverage () const
{
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
return this+input[0];
}
bool apply (hb_ot_apply_context_t *c) const
{
TRACE_APPLY (this);
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
if (likely (index == NOT_COVERED)) return_trace (false);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
struct ChainContextApplyLookupContext lookup_context = {
{match_coverage},
{this, this, this}
@@ -3043,7 +3283,7 @@ struct ChainContextFormat3
bool serialize_coverage_offsets (hb_subset_context_t *c, Iterator it, const void* base) const
{
TRACE_SERIALIZE (this);
- auto *out = c->serializer->start_embed<OffsetArrayOf<Coverage>> ();
+ auto *out = c->serializer->start_embed<Array16OfOffset16To<Coverage>> ();
if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size)))
return_trace (false);
@@ -3068,22 +3308,30 @@ struct ChainContextFormat3
if (!serialize_coverage_offsets (c, backtrack.iter (), this))
return_trace (false);
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!serialize_coverage_offsets (c, input.iter (), this))
return_trace (false);
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
if (!serialize_coverage_offsets (c, lookahead.iter (), this))
return_trace (false);
- const ArrayOf<LookupRecord> &lookupRecord = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead);
+ const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
+ hb_set_t lookup_indices;
+ for (unsigned i = 0; i < (unsigned) lookupRecord.len; i++)
+ if (lookup_map->has (lookupRecord[i].lookupListIndex))
+ lookup_indices.add (i);
+
HBUINT16 lookupCount;
- lookupCount = lookupRecord.len;
+ lookupCount = lookup_indices.get_population ();
if (!c->serializer->copy (lookupCount)) return_trace (false);
- const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups;
- for (unsigned i = 0; i < (unsigned) lookupCount; i++)
- if (!c->serializer->copy (lookupRecord[i], lookup_map)) return_trace (false);
+ for (unsigned i : lookup_indices.iter ())
+ {
+ if (!c->serializer->copy (lookupRecord[i], lookup_map))
+ return_trace (false);
+ }
return_trace (true);
}
@@ -3092,30 +3340,30 @@ struct ChainContextFormat3
{
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c, this)) return_trace (false);
- const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
+ const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack);
if (!input.sanitize (c, this)) return_trace (false);
if (!input.len) return_trace (false); /* To be consistent with Context. */
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input);
+ const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
if (!lookahead.sanitize (c, this)) return_trace (false);
- const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead);
+ const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
return_trace (lookup.sanitize (c));
}
protected:
HBUINT16 format; /* Format identifier--format = 3 */
- OffsetArrayOf<Coverage>
+ Array16OfOffset16To<Coverage>
backtrack; /* Array of coverage tables
* in backtracking sequence, in glyph
* sequence order */
- OffsetArrayOf<Coverage>
+ Array16OfOffset16To<Coverage>
inputX ; /* Array of coverage
* tables in input sequence, in glyph
* sequence order */
- OffsetArrayOf<Coverage>
+ Array16OfOffset16To<Coverage>
lookaheadX; /* Array of coverage tables
* in lookahead sequence, in glyph
* sequence order */
- ArrayOf<LookupRecord>
+ Array16Of<LookupRecord>
lookupX; /* Array of LookupRecords--in
* design order) */
public:
@@ -3154,7 +3402,7 @@ struct ExtensionFormat1
template <typename X>
const X& get_subtable () const
- { return this + reinterpret_cast<const LOffsetTo<typename T::SubTable> &> (extensionOffset); }
+ { return this + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); }
template <typename context_t, typename ...Ts>
typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
@@ -3186,9 +3434,9 @@ struct ExtensionFormat1
out->extensionLookupType = extensionLookupType;
const auto& src_offset =
- reinterpret_cast<const LOffsetTo<typename T::SubTable> &> (extensionOffset);
+ reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset);
auto& dest_offset =
- reinterpret_cast<LOffsetTo<typename T::SubTable> &> (out->extensionOffset);
+ reinterpret_cast<Offset32To<typename T::SubTable> &> (out->extensionOffset);
return_trace (dest_offset.serialize_subset (c, src_offset, this, get_type ()));
}
@@ -3372,6 +3620,20 @@ struct GSUBGPOS
hb_set_subtract (lookup_indexes, &inactive_lookups);
}
+ void prune_langsys (const hb_map_t *duplicate_feature_map,
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map,
+ hb_set_t *new_feature_indexes /* OUT */) const
+ {
+ hb_prune_langsys_context_t c (this, script_langsys_map, duplicate_feature_map, new_feature_indexes);
+
+ unsigned count = get_script_count ();
+ for (unsigned script_index = 0; script_index < count; script_index++)
+ {
+ const Script& s = get_script (script_index);
+ s.prune_langsys (&c, script_index);
+ }
+ }
+
template <typename TLookup>
bool subset (hb_subset_layout_context_t *c) const
{
@@ -3380,15 +3642,15 @@ struct GSUBGPOS
if (unlikely (!out)) return_trace (false);
typedef LookupOffsetList<TLookup> TLookupList;
- reinterpret_cast<OffsetTo<TLookupList> &> (out->lookupList)
+ reinterpret_cast<Offset16To<TLookupList> &> (out->lookupList)
.serialize_subset (c->subset_context,
- reinterpret_cast<const OffsetTo<TLookupList> &> (lookupList),
+ reinterpret_cast<const Offset16To<TLookupList> &> (lookupList),
this,
c);
- reinterpret_cast<OffsetTo<RecordListOfFeature> &> (out->featureList)
+ reinterpret_cast<Offset16To<RecordListOfFeature> &> (out->featureList)
.serialize_subset (c->subset_context,
- reinterpret_cast<const OffsetTo<RecordListOfFeature> &> (featureList),
+ reinterpret_cast<const Offset16To<RecordListOfFeature> &> (featureList),
this,
c);
@@ -3412,8 +3674,65 @@ struct GSUBGPOS
return_trace (true);
}
+ void find_duplicate_features (const hb_map_t *lookup_indices,
+ const hb_set_t *feature_indices,
+ hb_map_t *duplicate_feature_map /* OUT */) const
+ {
+ //find out duplicate features after subset
+ unsigned prev = 0xFFFFu;
+ for (unsigned i : feature_indices->iter ())
+ {
+ if (prev == 0xFFFFu)
+ {
+ duplicate_feature_map->set (i, i);
+ prev = i;
+ continue;
+ }
+
+ hb_tag_t t = get_feature_tag (i);
+ hb_tag_t prev_t = get_feature_tag (prev);
+ if (t != prev_t)
+ {
+ duplicate_feature_map->set (i, i);
+ prev = i;
+ continue;
+ }
+
+ const Feature& f = get_feature (i);
+ const Feature& prev_f = get_feature (prev);
+
+ auto f_iter =
+ + hb_iter (f.lookupIndex)
+ | hb_filter (lookup_indices)
+ ;
+
+ auto prev_iter =
+ + hb_iter (prev_f.lookupIndex)
+ | hb_filter (lookup_indices)
+ ;
+
+ if (f_iter.len () != prev_iter.len ())
+ {
+ duplicate_feature_map->set (i, i);
+ prev = i;
+ continue;
+ }
+
+ bool is_equal = true;
+ for (auto _ : + hb_zip (f_iter, prev_iter))
+ if (_.first != _.second) { is_equal = false; break; }
+
+ if (is_equal == true) duplicate_feature_map->set (i, prev);
+ else
+ {
+ duplicate_feature_map->set (i, i);
+ prev = i;
+ }
+ }
+ }
+
void prune_features (const hb_map_t *lookup_indices, /* IN */
- hb_set_t *feature_indices /* IN/OUT */) const
+ hb_set_t *feature_indices /* IN/OUT */) const
{
#ifndef HB_NO_VAR
// This is the set of feature indices which have alternate versions defined
@@ -3422,8 +3741,9 @@ struct GSUBGPOS
hb_set_t alternate_feature_indices;
if (version.to_int () >= 0x00010001u)
(this+featureVars).closure_features (lookup_indices, &alternate_feature_indices);
- if (unlikely (alternate_feature_indices.in_error())) {
- feature_indices->successful = false;
+ if (unlikely (alternate_feature_indices.in_error()))
+ {
+ feature_indices->err ();
return;
}
#endif
@@ -3431,6 +3751,13 @@ struct GSUBGPOS
for (unsigned i : feature_indices->iter())
{
const Feature& f = get_feature (i);
+ hb_tag_t tag = get_feature_tag (i);
+ if (tag == HB_TAG ('p', 'r', 'e', 'f'))
+ // Note: Never ever drop feature 'pref', even if it's empty.
+ // HarfBuzz chooses shaper for Khmer based on presence of this
+ // feature. See thread at:
+ // http://lists.freedesktop.org/archives/harfbuzz/2012-November/002660.html
+ continue;
if (f.featureParams.is_null ()
&& !f.intersects_lookup_indexes (lookup_indices)
@@ -3452,12 +3779,12 @@ struct GSUBGPOS
bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- typedef OffsetListOf<TLookup> TLookupList;
+ typedef List16OfOffset16To<TLookup> TLookupList;
if (unlikely (!(version.sanitize (c) &&
likely (version.major == 1) &&
scriptList.sanitize (c, this) &&
featureList.sanitize (c, this) &&
- reinterpret_cast<const OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))))
+ reinterpret_cast<const Offset16To<TLookupList> &> (lookupList).sanitize (c, this))))
return_trace (false);
#ifndef HB_NO_VAR
@@ -3482,7 +3809,7 @@ struct GSUBGPOS
this->lookup_count = table->get_lookup_count ();
- this->accels = (hb_ot_layout_lookup_accelerator_t *) calloc (this->lookup_count, sizeof (hb_ot_layout_lookup_accelerator_t));
+ this->accels = (hb_ot_layout_lookup_accelerator_t *) hb_calloc (this->lookup_count, sizeof (hb_ot_layout_lookup_accelerator_t));
if (unlikely (!this->accels))
{
this->lookup_count = 0;
@@ -3498,7 +3825,7 @@ struct GSUBGPOS
{
for (unsigned int i = 0; i < this->lookup_count; i++)
this->accels[i].fini ();
- free (this->accels);
+ hb_free (this->accels);
this->table.destroy ();
}
@@ -3510,13 +3837,13 @@ struct GSUBGPOS
protected:
FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set
* to 0x00010000u */
- OffsetTo<ScriptList>
+ Offset16To<ScriptList>
scriptList; /* ScriptList table */
- OffsetTo<FeatureList>
+ Offset16To<FeatureList>
featureList; /* FeatureList table */
- OffsetTo<LookupList>
+ Offset16To<LookupList>
lookupList; /* LookupList table */
- LOffsetTo<FeatureVariations>
+ Offset32To<FeatureVariations>
featureVars; /* Offset to Feature Variations
table--from beginning of table
* (may be NULL). Introduced
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
index ffd2bf4574..3b2293dff0 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh
@@ -45,7 +45,7 @@ typedef IndexArray JstfModList;
* JstfMax -- Justification Maximum Table
*/
-typedef OffsetListOf<PosLookup> JstfMax;
+typedef List16OfOffset16To<PosLookup> JstfMax;
/*
@@ -71,43 +71,43 @@ struct JstfPriority
}
protected:
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
shrinkageEnableGSUB; /* Offset to Shrinkage Enable GSUB
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
shrinkageDisableGSUB; /* Offset to Shrinkage Disable GSUB
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
shrinkageEnableGPOS; /* Offset to Shrinkage Enable GPOS
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
shrinkageDisableGPOS; /* Offset to Shrinkage Disable GPOS
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfMax>
+ Offset16To<JstfMax>
shrinkageJstfMax; /* Offset to Shrinkage JstfMax table--
* from beginning of JstfPriority table
* --may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
extensionEnableGSUB; /* Offset to Extension Enable GSUB
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
extensionDisableGSUB; /* Offset to Extension Disable GSUB
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
extensionEnableGPOS; /* Offset to Extension Enable GPOS
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfModList>
+ Offset16To<JstfModList>
extensionDisableGPOS; /* Offset to Extension Disable GPOS
* JstfModList table--from beginning of
* JstfPriority table--may be NULL */
- OffsetTo<JstfMax>
+ Offset16To<JstfMax>
extensionJstfMax; /* Offset to Extension JstfMax table--
* from beginning of JstfPriority table
* --may be NULL */
@@ -121,13 +121,13 @@ struct JstfPriority
* JstfLangSys -- Justification Language System Table
*/
-struct JstfLangSys : OffsetListOf<JstfPriority>
+struct JstfLangSys : List16OfOffset16To<JstfPriority>
{
bool sanitize (hb_sanitize_context_t *c,
const Record_sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
- return_trace (OffsetListOf<JstfPriority>::sanitize (c));
+ return_trace (List16OfOffset16To<JstfPriority>::sanitize (c));
}
};
@@ -136,7 +136,7 @@ struct JstfLangSys : OffsetListOf<JstfPriority>
* ExtenderGlyphs -- Extender Glyph Table
*/
-typedef SortedArrayOf<HBGlyphID> ExtenderGlyphs;
+typedef SortedArray16Of<HBGlyphID> ExtenderGlyphs;
/*
@@ -174,10 +174,10 @@ struct JstfScript
}
protected:
- OffsetTo<ExtenderGlyphs>
+ Offset16To<ExtenderGlyphs>
extenderGlyphs; /* Offset to ExtenderGlyph table--from beginning
* of JstfScript table-may be NULL */
- OffsetTo<JstfLangSys>
+ Offset16To<JstfLangSys>
defaultLangSys; /* Offset to DefaultJstfLangSys table--from
* beginning of JstfScript table--may be Null */
RecordArrayOf<JstfLangSys>
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.cc b/thirdparty/harfbuzz/src/hb-ot-layout.cc
index 89df949b26..0454af2063 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.cc
@@ -131,7 +131,9 @@ hb_ot_layout_kern (const hb_ot_shape_plan_t *plan,
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
+ if (!buffer->message (font, "start table kern")) return;
kern.apply (&c);
+ (void) buffer->message (font, "end table kern");
}
#endif
@@ -144,7 +146,7 @@ bool
OT::GDEF::is_blocklisted (hb_blob_t *blob,
hb_face_t *face) const
{
-#ifdef HB_NO_OT_LAYOUT_BLACKLIST
+#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
return false;
#endif
/* The ugly business of blocklisting individual fonts' tables happen here!
@@ -331,6 +333,8 @@ hb_ot_layout_get_glyphs_in_class (hb_face_t *face,
*
* Useful if the client program wishes to cache the list.
*
+ * Return value: Total number of attachment points for @glyph.
+ *
**/
unsigned int
hb_ot_layout_get_attach_points (hb_face_t *face,
@@ -357,6 +361,8 @@ hb_ot_layout_get_attach_points (hb_face_t *face,
* Fetches a list of the caret positions defined for a ligature glyph in the GDEF
* table of the font. The list returned will begin at the offset provided.
*
+ * Return value: Total number of ligature caret positions for @glyph.
+ *
**/
unsigned int
hb_ot_layout_get_ligature_carets (hb_font_t *font,
@@ -379,7 +385,7 @@ bool
OT::GSUB::is_blocklisted (hb_blob_t *blob HB_UNUSED,
hb_face_t *face) const
{
-#ifdef HB_NO_OT_LAYOUT_BLACKLIST
+#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
return false;
#endif
return false;
@@ -389,7 +395,7 @@ bool
OT::GPOS::is_blocklisted (hb_blob_t *blob HB_UNUSED,
hb_face_t *face HB_UNUSED) const
{
-#ifdef HB_NO_OT_LAYOUT_BLACKLIST
+#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
return false;
#endif
return false;
@@ -419,6 +425,8 @@ get_gsubgpos_table (hb_face_t *face,
* Fetches a list of all scripts enumerated in the specified face's GSUB table
* or GPOS table. The list returned will begin at the offset provided.
*
+ * Return value: Total number of script tags.
+ *
**/
unsigned int
hb_ot_layout_table_get_script_tags (hb_face_t *face,
@@ -585,6 +593,8 @@ hb_ot_layout_table_select_script (hb_face_t *face,
*
* Fetches a list of all feature tags in the given face's GSUB or GPOS table.
*
+ * Return value: Total number of feature tags.
+ *
**/
unsigned int
hb_ot_layout_table_get_feature_tags (hb_face_t *face,
@@ -647,6 +657,8 @@ hb_ot_layout_table_find_feature (hb_face_t *face,
* Fetches a list of language tags in the given face's GSUB or GPOS table, underneath
* the specified script index. The list returned will begin at the offset provided.
*
+ * Return value: Total number of language tags.
+ *
**/
unsigned int
hb_ot_layout_script_get_language_tags (hb_face_t *face,
@@ -818,6 +830,8 @@ hb_ot_layout_language_get_required_feature (hb_face_t *face,
* Fetches a list of all features in the specified face's GSUB table
* or GPOS table, underneath the specified script and language. The list
* returned will begin at the offset provided.
+ *
+ * Return value: Total number of features.
**/
unsigned int
hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
@@ -850,6 +864,7 @@ hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
* or GPOS table, underneath the specified script and language. The list
* returned will begin at the offset provided.
*
+ * Return value: Total number of feature tags.
**/
unsigned int
hb_ot_layout_language_get_feature_tags (hb_face_t *face,
@@ -932,6 +947,8 @@ hb_ot_layout_language_find_feature (hb_face_t *face,
* the specified face's GSUB table or GPOS table. The list returned will
* begin at the offset provided.
*
+ * Return value: Total number of lookups.
+ *
* Since: 0.9.7
**/
unsigned int
@@ -960,6 +977,8 @@ hb_ot_layout_feature_get_lookups (hb_face_t *face,
* Fetches the total number of lookups enumerated in the specified
* face's GSUB table or GPOS table.
*
+ * Return value: Total number of lookups.
+ *
* Since: 0.9.22
**/
unsigned int
@@ -974,10 +993,46 @@ struct hb_collect_features_context_t
{
hb_collect_features_context_t (hb_face_t *face,
hb_tag_t table_tag,
- hb_set_t *feature_indexes_)
+ hb_set_t *feature_indices_,
+ const hb_tag_t *features)
+
: g (get_gsubgpos_table (face, table_tag)),
- feature_indexes (feature_indexes_),
- script_count (0),langsys_count (0), feature_index_count (0) {}
+ feature_indices (feature_indices_),
+ has_feature_filter (false),
+ script_count (0),langsys_count (0), feature_index_count (0)
+ {
+ compute_feature_filter (features);
+ }
+
+ void compute_feature_filter (const hb_tag_t *features)
+ {
+ if (features == nullptr)
+ {
+ has_feature_filter = false;
+ return;
+ }
+
+ has_feature_filter = true;
+ for (; *features; features++)
+ {
+ hb_tag_t tag = *features;
+ unsigned index;
+ g.find_feature_index (tag, &index);
+ if (index == OT::Index::NOT_FOUND_INDEX) continue;
+
+ feature_indices_filter.add(index);
+ for (int i = (int) index - 1; i >= 0; i--)
+ {
+ if (g.get_feature_tag (i) != tag) break;
+ feature_indices_filter.add(i);
+ }
+ for (unsigned i = index + 1; i < g.get_feature_count (); i++)
+ {
+ if (g.get_feature_tag (i) != tag) break;
+ feature_indices_filter.add(i);
+ }
+ }
+ }
bool visited (const OT::Script &s)
{
@@ -1026,7 +1081,9 @@ struct hb_collect_features_context_t
public:
const OT::GSUBGPOS &g;
- hb_set_t *feature_indexes;
+ hb_set_t *feature_indices;
+ hb_set_t feature_indices_filter;
+ bool has_feature_filter;
private:
hb_set_t visited_script;
@@ -1038,37 +1095,31 @@ struct hb_collect_features_context_t
static void
langsys_collect_features (hb_collect_features_context_t *c,
- const OT::LangSys &l,
- const hb_tag_t *features)
+ const OT::LangSys &l)
{
if (c->visited (l)) return;
- if (!features)
+ if (!c->has_feature_filter)
{
/* All features. */
if (l.has_required_feature () && !c->visited_feature_indices (1))
- c->feature_indexes->add (l.get_required_feature_index ());
+ c->feature_indices->add (l.get_required_feature_index ());
+ // TODO(garretrieger): filter out indices >= feature count?
if (!c->visited_feature_indices (l.featureIndex.len))
- l.add_feature_indexes_to (c->feature_indexes);
+ l.add_feature_indexes_to (c->feature_indices);
}
else
{
- /* Ugh. Any faster way? */
- for (; *features; features++)
+ if (c->feature_indices_filter.is_empty()) return;
+ unsigned int num_features = l.get_feature_count ();
+ for (unsigned int i = 0; i < num_features; i++)
{
- hb_tag_t feature_tag = *features;
- unsigned int num_features = l.get_feature_count ();
- for (unsigned int i = 0; i < num_features; i++)
- {
- unsigned int feature_index = l.get_feature_index (i);
+ unsigned int feature_index = l.get_feature_index (i);
+ if (!c->feature_indices_filter.has (feature_index)) continue;
- if (feature_tag == c->g.get_feature_tag (feature_index))
- {
- c->feature_indexes->add (feature_index);
- break;
- }
- }
+ c->feature_indices->add (feature_index);
+ c->feature_indices_filter.del (feature_index);
}
}
}
@@ -1076,8 +1127,7 @@ langsys_collect_features (hb_collect_features_context_t *c,
static void
script_collect_features (hb_collect_features_context_t *c,
const OT::Script &s,
- const hb_tag_t *languages,
- const hb_tag_t *features)
+ const hb_tag_t *languages)
{
if (c->visited (s)) return;
@@ -1086,14 +1136,13 @@ script_collect_features (hb_collect_features_context_t *c,
/* All languages. */
if (s.has_default_lang_sys ())
langsys_collect_features (c,
- s.get_default_lang_sys (),
- features);
+ s.get_default_lang_sys ());
+
unsigned int count = s.get_lang_sys_count ();
for (unsigned int language_index = 0; language_index < count; language_index++)
langsys_collect_features (c,
- s.get_lang_sys (language_index),
- features);
+ s.get_lang_sys (language_index));
}
else
{
@@ -1102,8 +1151,8 @@ script_collect_features (hb_collect_features_context_t *c,
unsigned int language_index;
if (s.find_lang_sys_index (*languages, &language_index))
langsys_collect_features (c,
- s.get_lang_sys (language_index),
- features);
+ s.get_lang_sys (language_index));
+
}
}
}
@@ -1134,7 +1183,7 @@ hb_ot_layout_collect_features (hb_face_t *face,
const hb_tag_t *features,
hb_set_t *feature_indexes /* OUT */)
{
- hb_collect_features_context_t c (face, table_tag, feature_indexes);
+ hb_collect_features_context_t c (face, table_tag, feature_indexes, features);
if (!scripts)
{
/* All scripts. */
@@ -1142,8 +1191,7 @@ hb_ot_layout_collect_features (hb_face_t *face,
for (unsigned int script_index = 0; script_index < count; script_index++)
script_collect_features (&c,
c.g.get_script (script_index),
- languages,
- features);
+ languages);
}
else
{
@@ -1153,8 +1201,7 @@ hb_ot_layout_collect_features (hb_face_t *face,
if (c.g.find_script_index (*scripts, &script_index))
script_collect_features (&c,
c.g.get_script (script_index),
- languages,
- features);
+ languages);
}
}
}
@@ -1262,6 +1309,8 @@ hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
* Fetches a list of feature variations in the specified face's GSUB table
* or GPOS table, at the specified variation coordinates.
*
+ * Return value: %true if feature variations were found, %false otherwise.
+ *
**/
hb_bool_t
hb_ot_layout_table_find_feature_variations (hb_face_t *face,
@@ -1291,6 +1340,8 @@ hb_ot_layout_table_find_feature_variations (hb_face_t *face,
* the specified face's GSUB table or GPOS table, enabled at the specified
* variations index. The list returned will begin at the offset provided.
*
+ * Return value: Total number of lookups.
+ *
**/
unsigned int
hb_ot_layout_feature_with_variations_get_lookups (hb_face_t *face,
@@ -1337,7 +1388,8 @@ hb_ot_layout_has_substitution (hb_face_t *face)
* @lookup_index: The index of the lookup to query
* @glyphs: The sequence of glyphs to query for substitution
* @glyphs_length: The length of the glyph sequence
- * @zero_context: #hb_bool_t indicating whether substitutions should be context-free
+ * @zero_context: #hb_bool_t indicating whether pre-/post-context are disallowed
+ * in substitutions
*
* Tests whether a specified lookup in the specified face would
* trigger a substitution on the given glyph sequence.
@@ -1443,12 +1495,17 @@ hb_ot_layout_lookup_substitute_closure (hb_face_t *face,
unsigned int lookup_index,
hb_set_t *glyphs /* OUT */)
{
- hb_map_t done_lookups;
- OT::hb_closure_context_t c (face, glyphs, &done_lookups);
+ hb_set_t cur_intersected_glyphs;
+ hb_map_t done_lookups_glyph_count;
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> done_lookups_glyph_set;
+ OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
l.closure (&c, lookup_index);
+
+ for (auto _ : done_lookups_glyph_set.iter ())
+ hb_set_destroy (_.second);
}
/**
@@ -1467,8 +1524,10 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
const hb_set_t *lookups,
hb_set_t *glyphs /* OUT */)
{
- hb_map_t done_lookups;
- OT::hb_closure_context_t c (face, glyphs, &done_lookups);
+ hb_set_t cur_intersected_glyphs;
+ hb_map_t done_lookups_glyph_count;
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> done_lookups_glyph_set;
+ OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
const OT::GSUB& gsub = *face->table.GSUB->table;
unsigned int iteration_count = 0;
@@ -1488,6 +1547,9 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
}
} while (iteration_count++ <= HB_CLOSURE_MAX_STAGES &&
glyphs_length != glyphs->get_population ());
+
+ for (auto _ : done_lookups_glyph_set.iter ())
+ hb_set_destroy (_.second);
}
/*
@@ -1824,27 +1886,20 @@ apply_string (OT::hb_ot_apply_context_t *c,
if (likely (!lookup.is_reverse ()))
{
/* in/out forward substitution/positioning */
- if (Proxy::table_index == 0u)
+ if (!Proxy::inplace)
buffer->clear_output ();
+
buffer->idx = 0;
+ apply_forward (c, accel);
- bool ret;
- ret = apply_forward (c, accel);
- if (ret)
- {
- if (!Proxy::inplace)
- buffer->swap_buffers ();
- else
- assert (!buffer->has_separate_output ());
- }
+ if (!Proxy::inplace)
+ buffer->swap_buffers ();
}
else
{
/* in-place backward substitution/positioning */
- if (Proxy::table_index == 0u)
- buffer->remove_output ();
+ assert (!buffer->have_output);
buffer->idx = buffer->len - 1;
-
apply_backward (c, accel);
}
}
@@ -1860,7 +1915,8 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
OT::hb_ot_apply_context_t c (table_index, font, buffer);
c.set_recurse_func (Proxy::Lookup::apply_recurse_func);
- for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++) {
+ for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++)
+ {
const stage_map_t *stage = &stages[table_index][stage_index];
for (; i < stage->last_lookup; i++)
{
@@ -1870,11 +1926,8 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
c.set_lookup_mask (lookups[table_index][i].mask);
c.set_auto_zwj (lookups[table_index][i].auto_zwj);
c.set_auto_zwnj (lookups[table_index][i].auto_zwnj);
- if (lookups[table_index][i].random)
- {
- c.set_random (true);
- buffer->unsafe_to_break_all ();
- }
+ c.set_random (lookups[table_index][i].random);
+
apply_string<Proxy> (&c,
proxy.table.get_lookup (lookup_index),
proxy.accels[lookup_index]);
@@ -1882,10 +1935,7 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
}
if (stage->pause_func)
- {
- buffer->clear_output ();
stage->pause_func (plan, font, buffer);
- }
}
}
@@ -1925,7 +1975,7 @@ hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c,
*
* Fetches a baseline value from the face.
*
- * Return value: if found baseline value in the font.
+ * Return value: %true if found baseline value in the font.
*
* Since: 2.6.0
**/
@@ -1984,7 +2034,7 @@ struct hb_get_glyph_alternates_dispatch_t :
*
* Fetches alternates of a glyph from a given GSUB lookup index.
*
- * Return value: total number of alternates found in the specific lookup index for the given glyph id.
+ * Return value: Total number of alternates found in the specific lookup index for the given glyph id.
*
* Since: 2.6.8
**/
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.hh b/thirdparty/harfbuzz/src/hb-ot-layout.hh
index ac61bc70de..bcc014ee98 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.hh
@@ -314,7 +314,6 @@ _hb_glyph_info_get_unicode_space_fallback_type (const hb_glyph_info_t *info)
hb_unicode_funcs_t::NOT_SPACE;
}
-static inline bool _hb_glyph_info_ligated (const hb_glyph_info_t *info);
static inline bool _hb_glyph_info_substituted (const hb_glyph_info_t *info);
static inline bool
@@ -328,7 +327,7 @@ _hb_glyph_info_is_default_ignorable_and_not_hidden (const hb_glyph_info_t *info)
{
return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_HIDDEN))
== UPROPS_MASK_IGNORABLE) &&
- !_hb_glyph_info_ligated (info);
+ !_hb_glyph_info_substituted (info);
}
static inline void
_hb_glyph_info_unhide (hb_glyph_info_t *info)
diff --git a/thirdparty/harfbuzz/src/hb-ot-map.cc b/thirdparty/harfbuzz/src/hb-ot-map.cc
index e4bb4b6366..12ceea5785 100644
--- a/thirdparty/harfbuzz/src/hb-ot-map.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-map.cc
@@ -54,7 +54,6 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
face = face_;
props = *props_;
-
/* Fetch script/language indices for GSUB/GPOS. We need these later to skip
* features not available in either table and not waste precious bits for them. */
@@ -63,12 +62,28 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_,
hb_tag_t script_tags[HB_OT_MAX_TAGS_PER_SCRIPT];
hb_tag_t language_tags[HB_OT_MAX_TAGS_PER_LANGUAGE];
- hb_ot_tags_from_script_and_language (props.script, props.language, &script_count, script_tags, &language_count, language_tags);
+ hb_ot_tags_from_script_and_language (props.script,
+ props.language,
+ &script_count,
+ script_tags,
+ &language_count,
+ language_tags);
- for (unsigned int table_index = 0; table_index < 2; table_index++) {
+ for (unsigned int table_index = 0; table_index < 2; table_index++)
+ {
hb_tag_t table_tag = table_tags[table_index];
- found_script[table_index] = (bool) hb_ot_layout_table_select_script (face, table_tag, script_count, script_tags, &script_index[table_index], &chosen_script[table_index]);
- hb_ot_layout_script_select_language (face, table_tag, script_index[table_index], language_count, language_tags, &language_index[table_index]);
+ found_script[table_index] = (bool) hb_ot_layout_table_select_script (face,
+ table_tag,
+ script_count,
+ script_tags,
+ &script_index[table_index],
+ &chosen_script[table_index]);
+ hb_ot_layout_script_select_language (face,
+ table_tag,
+ script_index[table_index],
+ language_count,
+ language_tags,
+ &language_index[table_index]);
}
}
@@ -150,9 +165,8 @@ void
hb_ot_map_builder_t::compile (hb_ot_map_t &m,
const hb_ot_shape_plan_key_t &key)
{
- static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), "");
- unsigned int global_bit_mask = HB_GLYPH_FLAG_DEFINED + 1;
- unsigned int global_bit_shift = hb_popcount (HB_GLYPH_FLAG_DEFINED);
+ unsigned int global_bit_shift = 8 * sizeof (hb_mask_t) - 1;
+ unsigned int global_bit_mask = 1u << global_bit_shift;
m.global_mask = global_bit_mask;
@@ -205,7 +219,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
/* Allocate bits now */
- unsigned int next_bit = global_bit_shift + 1;
+ static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), "");
+ unsigned int next_bit = hb_popcount (HB_GLYPH_FLAG_DEFINED) + 1;
for (unsigned int i = 0; i < feature_infos.length; i++)
{
@@ -220,7 +235,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
/* Limit bits per feature. */
bits_needed = hb_min (HB_OT_MAP_MAX_BITS, hb_bit_storage (info->max_value));
- if (!info->max_value || next_bit + bits_needed > 8 * sizeof (hb_mask_t))
+ if (!info->max_value || next_bit + bits_needed >= global_bit_shift)
continue; /* Feature disabled, or not enough bits. */
@@ -274,7 +289,6 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
}
map->_1_mask = (1u << map->shift) & map->mask;
map->needs_fallback = !found;
-
}
feature_infos.shrink (0); /* Done with these */
diff --git a/thirdparty/harfbuzz/src/hb-ot-math-table.hh b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
index 26aa080603..5916ad29f2 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
@@ -49,7 +49,7 @@ struct MathValueRecord
protected:
HBINT16 value; /* The X or Y value in design units */
- OffsetTo<Device> deviceTable; /* Offset to the device table - from the
+ Offset16To<Device> deviceTable; /* Offset to the device table - from the
* beginning of parent table. May be NULL.
* Suggested format for device table is 1. */
@@ -181,11 +181,11 @@ struct MathItalicsCorrectionInfo
}
protected:
- OffsetTo<Coverage> coverage; /* Offset to Coverage table -
+ Offset16To<Coverage> coverage; /* Offset to Coverage table -
* from the beginning of
* MathItalicsCorrectionInfo
* table. */
- ArrayOf<MathValueRecord> italicsCorrection; /* Array of MathValueRecords
+ Array16Of<MathValueRecord> italicsCorrection; /* Array of MathValueRecords
* defining italics correction
* values for each
* covered glyph. */
@@ -214,11 +214,11 @@ struct MathTopAccentAttachment
}
protected:
- OffsetTo<Coverage> topAccentCoverage; /* Offset to Coverage table -
+ Offset16To<Coverage> topAccentCoverage; /* Offset to Coverage table -
* from the beginning of
* MathTopAccentAttachment
* table. */
- ArrayOf<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords
+ Array16Of<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords
* defining top accent
* attachment points for each
* covered glyph. */
@@ -320,7 +320,7 @@ struct MathKernInfoRecord
protected:
/* Offset to MathKern table for each corner -
* from the beginning of MathKernInfo table. May be NULL. */
- OffsetTo<MathKern> mathKern[4];
+ Offset16To<MathKern> mathKern[4];
public:
DEFINE_SIZE_STATIC (8);
@@ -346,12 +346,12 @@ struct MathKernInfo
}
protected:
- OffsetTo<Coverage>
+ Offset16To<Coverage>
mathKernCoverage;
/* Offset to Coverage table -
* from the beginning of the
* MathKernInfo table. */
- ArrayOf<MathKernInfoRecord>
+ Array16Of<MathKernInfoRecord>
mathKernInfoRecords;
/* Array of MathKernInfoRecords,
* per-glyph information for
@@ -395,22 +395,22 @@ struct MathGlyphInfo
protected:
/* Offset to MathItalicsCorrectionInfo table -
* from the beginning of MathGlyphInfo table. */
- OffsetTo<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo;
+ Offset16To<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo;
/* Offset to MathTopAccentAttachment table -
* from the beginning of MathGlyphInfo table. */
- OffsetTo<MathTopAccentAttachment> mathTopAccentAttachment;
+ Offset16To<MathTopAccentAttachment> mathTopAccentAttachment;
/* Offset to coverage table for Extended Shape glyphs -
* from the beginning of MathGlyphInfo table. When the left or right glyph of
* a box is an extended shape variant, the (ink) box (and not the default
* position defined by values in MathConstants table) should be used for
* vertical positioning purposes. May be NULL.. */
- OffsetTo<Coverage> extendedShapeCoverage;
+ Offset16To<Coverage> extendedShapeCoverage;
/* Offset to MathKernInfo table -
* from the beginning of MathGlyphInfo table. */
- OffsetTo<MathKernInfo> mathKernInfo;
+ Offset16To<MathKernInfo> mathKernInfo;
public:
DEFINE_SIZE_STATIC (8);
@@ -532,7 +532,7 @@ struct MathGlyphAssembly
/* Italics correction of this
* MathGlyphAssembly. Should not
* depend on the assembly size. */
- ArrayOf<MathGlyphPartRecord>
+ Array16Of<MathGlyphPartRecord>
partRecords; /* Array of part records, from
* left to right and bottom to
* top. */
@@ -572,10 +572,10 @@ struct MathGlyphConstruction
protected:
/* Offset to MathGlyphAssembly table for this shape - from the beginning of
MathGlyphConstruction table. May be NULL. */
- OffsetTo<MathGlyphAssembly> glyphAssembly;
+ Offset16To<MathGlyphAssembly> glyphAssembly;
/* MathGlyphVariantRecords for alternative variants of the glyphs. */
- ArrayOf<MathGlyphVariantRecord> mathGlyphVariantRecord;
+ Array16Of<MathGlyphVariantRecord> mathGlyphVariantRecord;
public:
DEFINE_SIZE_ARRAY (4, mathGlyphVariantRecord);
@@ -636,7 +636,7 @@ struct MathVariants
{
bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
unsigned int count = vertical ? vertGlyphCount : horizGlyphCount;
- const OffsetTo<Coverage> &coverage = vertical ? vertGlyphCoverage
+ const Offset16To<Coverage> &coverage = vertical ? vertGlyphCoverage
: horizGlyphCoverage;
unsigned int index = (this+coverage).get_coverage (glyph);
@@ -653,11 +653,11 @@ struct MathVariants
/* Minimum overlap of connecting
* glyphs during glyph construction,
* in design units. */
- OffsetTo<Coverage> vertGlyphCoverage;
+ Offset16To<Coverage> vertGlyphCoverage;
/* Offset to Coverage table -
* from the beginning of MathVariants
* table. */
- OffsetTo<Coverage> horizGlyphCoverage;
+ Offset16To<Coverage> horizGlyphCoverage;
/* Offset to Coverage table -
* from the beginning of MathVariants
* table. */
@@ -671,7 +671,7 @@ struct MathVariants
/* Array of offsets to MathGlyphConstruction tables - from the beginning of
the MathVariants table, for shapes growing in vertical/horizontal
direction. */
- UnsizedArrayOf<OffsetTo<MathGlyphConstruction>>
+ UnsizedArrayOf<Offset16To<MathGlyphConstruction>>
glyphConstruction;
public:
@@ -711,11 +711,11 @@ struct MATH
protected:
FixedVersion<>version; /* Version of the MATH table
* initially set to 0x00010000u */
- OffsetTo<MathConstants>
+ Offset16To<MathConstants>
mathConstants; /* MathConstants table */
- OffsetTo<MathGlyphInfo>
+ Offset16To<MathGlyphInfo>
mathGlyphInfo; /* MathGlyphInfo table */
- OffsetTo<MathVariants>
+ Offset16To<MathVariants>
mathVariants; /* MathVariants table */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh b/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh
index 929956d12b..3a019ef782 100644
--- a/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh
@@ -107,7 +107,7 @@ struct maxp
maxpV1Tail *dest_v1 = c->serializer->embed<maxpV1Tail> (src_v1);
if (unlikely (!dest_v1)) return_trace (false);
- if (c->plan->drop_hints)
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
drop_hint_fields (dest_v1);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
index 1225e26ce1..e31447f8fc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
@@ -56,7 +56,7 @@ struct DataMap
protected:
Tag tag; /* A tag indicating the type of metadata. */
- LNNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset32To<UnsizedArrayOf<HBUINT8>>
dataZ; /* Offset in bytes from the beginning of the
* metadata table to the data for this tag. */
HBUINT32 dataLength; /* Length of the data. The data is not required to
@@ -113,7 +113,7 @@ struct meta
* Offset from the beginning of the table to the data.
* Per OT specification:
* Reserved. Not used; should be set to 0. */
- LArrayOf<DataMap>
+ Array32Of<DataMap>
dataMaps;/* Array of data map records. */
public:
DEFINE_SIZE_ARRAY (16, dataMaps);
diff --git a/thirdparty/harfbuzz/src/hb-ot-name-table.hh b/thirdparty/harfbuzz/src/hb-ot-name-table.hh
index ece3c28466..c17bb4abb8 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-name-table.hh
@@ -149,7 +149,7 @@ struct NameRecord
HBUINT16 languageID; /* Language ID. */
HBUINT16 nameID; /* Name ID. */
HBUINT16 length; /* String length (in bytes). */
- NNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset16To<UnsizedArrayOf<HBUINT8>>
offset; /* String offset from start of storage area (in bytes). */
public:
DEFINE_SIZE_STATIC (12);
@@ -214,7 +214,7 @@ struct name
this->format = 0;
this->count = it.len ();
- NameRecord *name_records = (NameRecord *) calloc (it.len (), NameRecord::static_size);
+ NameRecord *name_records = (NameRecord *) hb_calloc (it.len (), NameRecord::static_size);
if (unlikely (!name_records)) return_trace (false);
hb_array_t<NameRecord> records (name_records, it.len ());
@@ -228,9 +228,10 @@ struct name
records.qsort ();
c->copy_all (records, src_string_pool);
- free (records.arrayZ);
+ hb_free (records.arrayZ);
- if (unlikely (c->ran_out_of_room)) return_trace (false);
+
+ if (unlikely (c->ran_out_of_room ())) return_trace (false);
this->stringOffset = c->length ();
@@ -248,7 +249,11 @@ struct name
+ nameRecordZ.as_array (count)
| hb_filter (c->plan->name_ids, &NameRecord::nameID)
| hb_filter (c->plan->name_languages, &NameRecord::languageID)
- | hb_filter ([&] (const NameRecord& namerecord) { return c->plan->name_legacy || namerecord.isUnicode (); })
+ | hb_filter ([&] (const NameRecord& namerecord) {
+ return
+ (c->plan->flags & HB_SUBSET_FLAGS_NAME_LEGACY)
+ || namerecord.isUnicode ();
+ })
;
name_prime->serialize (c->serializer, it, hb_addressof (this + stringOffset));
@@ -357,7 +362,7 @@ struct name
/* We only implement format 0 for now. */
HBUINT16 format; /* Format selector (=0/1). */
HBUINT16 count; /* Number of name records. */
- NNOffsetTo<UnsizedArrayOf<HBUINT8>>
+ NNOffset16To<UnsizedArrayOf<HBUINT8>>
stringOffset; /* Offset to start of string storage (from start of table). */
UnsizedArrayOf<NameRecord>
nameRecordZ; /* The name records where count is the number of records. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-name.cc b/thirdparty/harfbuzz/src/hb-ot-name.cc
index 4588226e6e..eff46ef227 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-name.cc
@@ -156,7 +156,8 @@ hb_ot_name_get_utf (hb_face_t *face,
*
* Fetches a font name from the OpenType 'name' table.
* If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
- * Returns string in UTF-8 encoding.
+ * Returns string in UTF-8 encoding. A NUL terminator is always written
+ * for convenience, and isn't included in the output @text_size.
*
* Returns: full length of the requested string, or 0 if not found.
* Since: 2.1.0
@@ -183,7 +184,8 @@ hb_ot_name_get_utf8 (hb_face_t *face,
*
* Fetches a font name from the OpenType 'name' table.
* If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
- * Returns string in UTF-16 encoding.
+ * Returns string in UTF-16 encoding. A NUL terminator is always written
+ * for convenience, and isn't included in the output @text_size.
*
* Returns: full length of the requested string, or 0 if not found.
* Since: 2.1.0
@@ -209,7 +211,8 @@ hb_ot_name_get_utf16 (hb_face_t *face,
*
* Fetches a font name from the OpenType 'name' table.
* If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed.
- * Returns string in UTF-32 encoding.
+ * Returns string in UTF-32 encoding. A NUL terminator is always written
+ * for convenience, and isn't included in the output @text_size.
*
* Returns: full length of the requested string, or 0 if not found.
* Since: 2.1.0
diff --git a/thirdparty/harfbuzz/src/hb-ot-os2-table.hh b/thirdparty/harfbuzz/src/hb-ot-os2-table.hh
index 8e98f87f4e..f0035e2f04 100644
--- a/thirdparty/harfbuzz/src/hb-ot-os2-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-os2-table.hh
@@ -30,7 +30,6 @@
#include "hb-open-type.hh"
#include "hb-ot-os2-unicode-ranges.hh"
-#include "hb-ot-cmap-table.hh"
#include "hb-set.hh"
@@ -172,33 +171,17 @@ struct OS2
TRACE_SUBSET (this);
OS2 *os2_prime = c->serializer->embed (this);
if (unlikely (!os2_prime)) return_trace (false);
+ if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
+ return_trace (true);
- hb_set_t unicodes;
- if (!c->plan->glyphs_requested->is_empty ())
- {
- hb_map_t unicode_glyphid_map;
-
- OT::cmap::accelerator_t cmap;
- cmap.init (c->plan->source);
- cmap.collect_mapping (&unicodes, &unicode_glyphid_map);
- cmap.fini ();
-
- hb_set_set (&unicodes, c->plan->unicodes);
-
- + unicode_glyphid_map.iter ()
- | hb_filter (c->plan->glyphs_requested, hb_second)
- | hb_map (hb_first)
- | hb_sink (unicodes)
- ;
- }
/* when --gids option is not used, no need to do collect_mapping that is
* iterating all codepoints in each subtable, which is not efficient */
uint16_t min_cp, max_cp;
- find_min_and_max_codepoint (unicodes.is_empty () ? c->plan->unicodes : &unicodes, &min_cp, &max_cp);
+ find_min_and_max_codepoint (c->plan->unicodes, &min_cp, &max_cp);
os2_prime->usFirstCharIndex = min_cp;
os2_prime->usLastCharIndex = max_cp;
- _update_unicode_ranges (unicodes.is_empty () ? c->plan->unicodes : &unicodes, os2_prime->ulUnicodeRange);
+ _update_unicode_ranges (c->plan->unicodes, os2_prime->ulUnicodeRange);
return_trace (true);
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh
new file mode 100644
index 0000000000..94450eb53a
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh
@@ -0,0 +1,130 @@
+/*
+ * Copyright © 2021 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_OT_POST_TABLE_V2SUBSET_HH
+#define HB_OT_POST_TABLE_V2SUBSET_HH
+
+#include "hb-open-type.hh"
+#include "hb-ot-post-table.hh"
+
+/*
+ * post -- PostScript
+ * https://docs.microsoft.com/en-us/typography/opentype/spec/post
+ */
+
+namespace OT {
+template<typename Iterator>
+HB_INTERNAL bool postV2Tail::serialize (hb_serialize_context_t *c,
+ Iterator it,
+ const void* _post) const
+{
+ TRACE_SERIALIZE (this);
+ auto *out = c->start_embed (this);
+ if (unlikely (!c->check_success (out))) return_trace (false);
+ if (!out->glyphNameIndex.serialize (c, + it
+ | hb_map (hb_second)))
+ return_trace (false);
+
+ hb_set_t copied_indices;
+ for (const auto& _ : + it )
+ {
+ unsigned glyph_id = _.first;
+ unsigned new_index = _.second;
+
+ if (new_index < 258) continue;
+ if (copied_indices.has (new_index)) continue;
+ copied_indices.add (new_index);
+
+ hb_bytes_t s = reinterpret_cast<const post::accelerator_t*> (_post)->find_glyph_name (glyph_id);
+ HBUINT8 *o = c->allocate_size<HBUINT8> (HBUINT8::static_size * (s.length + 1));
+ if (unlikely (!o)) return_trace (false);
+ if (!c->check_assign (o[0], s.length, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false);
+ memcpy (o+1, s.arrayZ, HBUINT8::static_size * s.length);
+ }
+
+ return_trace (true);
+}
+
+HB_INTERNAL bool postV2Tail::subset (hb_subset_context_t *c) const
+{
+ TRACE_SUBSET (this);
+
+ const hb_map_t &reverse_glyph_map = *c->plan->reverse_glyph_map;
+ unsigned num_glyphs = c->plan->num_output_glyphs ();
+ hb_map_t old_new_index_map, old_gid_new_index_map;
+ unsigned i = 0;
+
+ post::accelerator_t _post;
+ _post.init (c->plan->source);
+
+ for (hb_codepoint_t new_gid = 0; new_gid < num_glyphs; new_gid++)
+ {
+ hb_codepoint_t old_gid = reverse_glyph_map.get (new_gid);
+ unsigned old_index = glyphNameIndex[old_gid];
+
+ unsigned new_index;
+ if (old_index <= 257) new_index = old_index;
+ else if (old_new_index_map.has (old_index)) new_index = old_new_index_map.get (old_index);
+ else
+ {
+ hb_bytes_t s = _post.find_glyph_name (old_gid);
+ int standard_glyph_index = -1;
+ for (unsigned i = 0; i < format1_names_length; i++)
+ {
+ if (s == format1_names (i))
+ {
+ standard_glyph_index = i;
+ break;
+ }
+ }
+ if (standard_glyph_index == -1)
+ {
+ new_index = 258 + i;
+ i++;
+ }
+ else
+ { new_index = standard_glyph_index; }
+ old_new_index_map.set (old_index, new_index);
+ }
+ old_gid_new_index_map.set (old_gid, new_index);
+ }
+
+ auto index_iter =
+ + hb_range (num_glyphs)
+ | hb_map (reverse_glyph_map)
+ | hb_map_retains_sorting ([&](hb_codepoint_t old_gid)
+ {
+ unsigned new_index = old_gid_new_index_map.get (old_gid);
+ return hb_pair_t<unsigned, unsigned> (old_gid, new_index);
+ })
+ ;
+
+ bool ret = serialize (c->serializer, index_iter, &_post);
+ _post.fini ();
+ return_trace (ret);
+}
+
+} /* namespace OT */
+#endif /* HB_OT_POST_TABLE_V2SUBSET_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table.hh b/thirdparty/harfbuzz/src/hb-ot-post-table.hh
index f22d6e244d..39de671707 100644
--- a/thirdparty/harfbuzz/src/hb-ot-post-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-post-table.hh
@@ -55,8 +55,15 @@ struct postV2Tail
return_trace (glyphNameIndex.sanitize (c));
}
+ template<typename Iterator>
+ bool serialize (hb_serialize_context_t *c,
+ Iterator it,
+ const void* _post) const;
+
+ bool subset (hb_subset_context_t *c) const;
+
protected:
- ArrayOf<HBUINT16> glyphNameIndex; /* This is not an offset, but is the
+ Array16Of<HBUINT16> glyphNameIndex; /* This is not an offset, but is the
* ordinal number of the glyph in 'post'
* string tables. */
/*UnsizedArrayOf<HBUINT8>
@@ -71,13 +78,18 @@ struct post
{
static constexpr hb_tag_t tableTag = HB_OT_TAG_post;
- void serialize (hb_serialize_context_t *c) const
+ bool serialize (hb_serialize_context_t *c, bool glyph_names) const
{
+ TRACE_SERIALIZE (this);
post *post_prime = c->allocate_min<post> ();
- if (unlikely (!post_prime)) return;
+ if (unlikely (!post_prime)) return_trace (false);
memcpy (post_prime, this, post::min_size);
- post_prime->version.major = 3; // Version 3 does not have any glyph names.
+ if (!glyph_names)
+ return_trace (c->check_assign (post_prime->version.major, 3,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW)); // Version 3 does not have any glyph names.
+
+ return_trace (true);
}
bool subset (hb_subset_context_t *c) const
@@ -86,13 +98,19 @@ struct post
post *post_prime = c->serializer->start_embed<post> ();
if (unlikely (!post_prime)) return_trace (false);
- serialize (c->serializer);
+ bool glyph_names = c->plan->flags & HB_SUBSET_FLAGS_GLYPH_NAMES;
+ if (!serialize (c->serializer, glyph_names))
+ return_trace (false);
+
+ if (glyph_names && version.major == 2)
+ return_trace (v2X.subset (c));
return_trace (true);
}
struct accelerator_t
{
+ friend struct postV2Tail;
void init (hb_face_t *face)
{
index_to_offset.init ();
@@ -117,7 +135,7 @@ struct post
void fini ()
{
index_to_offset.fini ();
- free (gids_sorted_by_name.get ());
+ hb_free (gids_sorted_by_name.get ());
table.destroy ();
}
@@ -148,7 +166,7 @@ struct post
if (unlikely (!gids))
{
- gids = (uint16_t *) malloc (count * sizeof (gids[0]));
+ gids = (uint16_t *) hb_malloc (count * sizeof (gids[0]));
if (unlikely (!gids))
return false; /* Anything better?! */
@@ -158,7 +176,7 @@ struct post
if (unlikely (!gids_sorted_by_name.cmpexch (nullptr, gids)))
{
- free (gids);
+ hb_free (gids);
goto retry;
}
}
@@ -236,7 +254,7 @@ struct post
private:
uint32_t version;
- const ArrayOf<HBUINT16> *glyphNameIndex;
+ const Array16Of<HBUINT16> *glyphNameIndex;
hb_vector_t<uint32_t> index_to_offset;
const uint8_t *pool;
hb_atomic_ptr_t<uint16_t *> gids_sorted_by_name;
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
index 244e967b12..2b3b134ae3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -208,11 +208,11 @@ struct ManifestLookup
{
public:
OT::Tag tag;
- OT::OffsetTo<OT::SubstLookup> lookupOffset;
+ OT::Offset16To<OT::SubstLookup> lookupOffset;
public:
DEFINE_SIZE_STATIC (6);
};
-typedef OT::ArrayOf<ManifestLookup> Manifest;
+typedef OT::Array16Of<ManifestLookup> Manifest;
static bool
arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan HB_UNUSED,
@@ -290,7 +290,7 @@ static arabic_fallback_plan_t *
arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
hb_font_t *font)
{
- arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1, sizeof (arabic_fallback_plan_t));
+ arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) hb_calloc (1, sizeof (arabic_fallback_plan_t));
if (unlikely (!fallback_plan))
return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t));
@@ -308,7 +308,7 @@ arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan,
return fallback_plan;
assert (fallback_plan->num_lookups == 0);
- free (fallback_plan);
+ hb_free (fallback_plan);
return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t));
}
@@ -323,10 +323,10 @@ arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan)
{
fallback_plan->accel_array[i].fini ();
if (fallback_plan->free_lookups)
- free (fallback_plan->lookup_array[i]);
+ hb_free (fallback_plan->lookup_array[i]);
}
- free (fallback_plan);
+ hb_free (fallback_plan);
}
static void
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh
index c022d4bb06..e6339ee72b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh
@@ -6,10 +6,10 @@
*
* on files with these headers:
*
- * # ArabicShaping-13.0.0.txt
- * # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
- * # Scripts-13.0.0.txt
- * # Date: 2020-01-22, 00:07:43 GMT
+ * # ArabicShaping-14.0.0.txt
+ * # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
+ * # Scripts-14.0.0.txt
+ * # Date: 2021-07-10, 00:35:31 GMT
*/
#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH
@@ -29,6 +29,7 @@ has_arabic_joining (hb_script_t script)
case HB_SCRIPT_MANICHAEAN:
case HB_SCRIPT_MONGOLIAN:
case HB_SCRIPT_NKO:
+ case HB_SCRIPT_OLD_UYGHUR:
case HB_SCRIPT_PHAGS_PA:
case HB_SCRIPT_PSALTER_PAHLAVI:
case HB_SCRIPT_SOGDIAN:
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh
index 70ffe623c0..c158964f2c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh
@@ -6,10 +6,10 @@
*
* on files with these headers:
*
- * # ArabicShaping-13.0.0.txt
- * # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
- * # Blocks-13.0.0.txt
- * # Date: 2019-07-10, 19:06:00 GMT [KW]
+ * # ArabicShaping-14.0.0.txt
+ * # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
+ * # Blocks-14.0.0.txt
+ * # Date: 2021-01-22, 23:29:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
@@ -75,13 +75,17 @@ static const uint8_t joining_table[] =
/* Syriac Supplement */
- /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
- /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,
+
+ /* Arabic Extended-B */
+
+ /* 0860 */ R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,
+ /* 0880 */ R,R,R,C,C,C,D,U,U,D,D,D,D,D,R,X,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Arabic Extended-A */
- /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,D,D,
- /* 08C0 */ D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,D,D,D,D,R,D,D,D,D,D,D,
+ /* 08C0 */ D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 08E0 */ X,X,U,
#define joining_offset_0x1806u 739
@@ -137,23 +141,28 @@ static const uint8_t joining_table[] =
/* Sogdian */
/* 10F20 */ D,D,D,R,D,D,D,D,D,D,D,D,D,D,D,D,
- /* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,
+ /* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,X,X,X,X,X,X,X,X,X,X,X,
+ /* 10F60 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+ /* Old Uyghur */
-#define joining_offset_0x10fb0u 1219
+ /* 10F60 */ D,D,D,D,R,R,D,D,D,D,D,D,D,D,D,D,
+ /* 10F80 */ D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+ /* 10FA0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Chorasmian */
/* 10FA0 */ D,U,D,D,R,R,R,U,D,R,R,D,D,R,D,D,
/* 10FC0 */ U,D,R,R,D,U,U,U,U,R,D,L,
-#define joining_offset_0x110bdu 1247
+#define joining_offset_0x110bdu 1338
/* Kaithi */
/* 110A0 */ U,X,X,
/* 110C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,U,
-#define joining_offset_0x1e900u 1264
+#define joining_offset_0x1e900u 1355
/* Adlam */
@@ -161,7 +170,7 @@ static const uint8_t joining_table[] =
/* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
/* 1E940 */ D,D,D,D,X,X,X,X,X,X,X,T,
-}; /* Table items: 1340; occupancy: 57% */
+}; /* Table items: 1431; occupancy: 57% */
static unsigned int
@@ -189,8 +198,7 @@ joining_type (hb_codepoint_t u)
if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F54u)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x10FCBu)) return joining_table[u - 0x10FB0u + joining_offset_0x10fb0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10FCBu)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
break;
case 0x11u:
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
index 1f244f940c..1f8c1410fc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
@@ -259,7 +259,7 @@ struct arabic_shape_plan_t
void *
data_create_arabic (const hb_ot_shape_plan_t *plan)
{
- arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) calloc (1, sizeof (arabic_shape_plan_t));
+ arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) hb_calloc (1, sizeof (arabic_shape_plan_t));
if (unlikely (!arabic_plan))
return nullptr;
@@ -282,7 +282,7 @@ data_destroy_arabic (void *data)
arabic_fallback_plan_destroy (arabic_plan->fallback_plan);
- free (data);
+ hb_free (data);
}
static void
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
index dbedd6af0c..0d84a76b85 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
@@ -80,7 +80,7 @@ struct hangul_shape_plan_t
static void *
data_create_hangul (const hb_ot_shape_plan_t *plan)
{
- hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) calloc (1, sizeof (hangul_shape_plan_t));
+ hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) hb_calloc (1, sizeof (hangul_shape_plan_t));
if (unlikely (!hangul_plan))
return nullptr;
@@ -93,7 +93,7 @@ data_create_hangul (const hb_ot_shape_plan_t *plan)
static void
data_destroy_hangul (void *data)
{
- free (data);
+ hb_free (data);
}
/* Constants for algorithmic hangul syllable [de]composition. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc
index dd204b23c1..326aa9f96e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc
@@ -6,12 +6,12 @@
*
* on files with these headers:
*
- * # IndicSyllabicCategory-13.0.0.txt
- * # Date: 2019-07-22, 19:55:00 GMT [KW, RP]
- * # IndicPositionalCategory-13.0.0.txt
- * # Date: 2019-07-23, 00:01:00 GMT [KW, RP]
- * # Blocks-13.0.0.txt
- * # Date: 2019-07-10, 19:06:00 GMT [KW]
+ * # IndicSyllabicCategory-14.0.0.txt
+ * # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
+ * # IndicPositionalCategory-14.0.0.txt
+ * # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
+ * # Blocks-14.0.0.txt
+ * # Date: 2021-01-22, 23:29:00 GMT [KW]
*/
#include "hb.hh"
@@ -27,9 +27,9 @@
#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 91 chars; Bindu */
#define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */
#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 59 chars; Cantillation_Mark */
-#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2195 chars; Consonant */
-#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 12 chars; Consonant_Dead */
-#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 67 chars; Consonant_Final */
+#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2206 chars; Consonant */
+#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 14 chars; Consonant_Dead */
+#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 70 chars; Consonant_Final */
#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */
#define ISC_CIP INDIC_SYLLABIC_CATEGORY_CONSONANT_INITIAL_POSTFIXED /* 1 chars; Consonant_Initial_Postfixed */
#define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER /* 2 chars; Consonant_Killer */
@@ -38,18 +38,18 @@
#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 3 chars; Consonant_Preceding_Repha */
#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 10 chars; Consonant_Prefixed */
#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 94 chars; Consonant_Subjoined */
-#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */
+#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 1 chars; Consonant_Succeeding_Repha */
#define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER /* 8 chars; Consonant_With_Stacker */
#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 3 chars; Gemination_Mark */
#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 12 chars; Invisible_Stacker */
#define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */
#define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */
#define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */
-#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 31 chars; Nukta */
+#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 32 chars; Nukta */
#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 491 chars; Number */
#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */
#define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */
-#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 23 chars; Pure_Killer */
+#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 25 chars; Pure_Killer */
#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 2 chars; Register_Shifter */
#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER /* 25 chars; Syllable_Modifier */
#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */
@@ -57,18 +57,18 @@
#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 27 chars; Virama */
#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 35 chars; Visarga */
#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */
-#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 683 chars; Vowel_Dependent */
-#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 484 chars; Vowel_Independent */
+#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 686 chars; Vowel_Dependent */
+#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 486 chars; Vowel_Independent */
-#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 351 chars; Bottom */
+#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 352 chars; Bottom */
#define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT /* 1 chars; Bottom_And_Left */
#define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 4 chars; Bottom_And_Right */
#define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 64 chars; Left */
#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 22 chars; Left_And_Right */
#define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */
#define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 10 chars; Overstruck */
-#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 288 chars; Right */
-#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 415 chars; Top */
+#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 290 chars; Right */
+#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 418 chars; Top */
#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */
#define IMC_TBL INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_LEFT /* 2 chars; Top_And_Bottom_And_Left */
#define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */
@@ -231,11 +231,11 @@ static const uint16_t indic_table[] = {
/* 0C20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C28 */ _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0C30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(A,x), _(M,T), _(M,T),
+ /* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(N,B), _(A,x), _(M,T), _(M,T),
/* 0C40 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,T),
/* 0C48 */ _(M,TB), _(x,x), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0C50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,B), _(x,x),
- /* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(CD,x), _(x,x), _(x,x),
/* 0C60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 0C68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0C70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -254,7 +254,7 @@ static const uint16_t indic_table[] = {
/* 0CC0 */ _(M,TR), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,TR),
/* 0CC8 */ _(M,TR), _(x,x), _(M,TR), _(M,TR), _(M,T), _(V,T), _(x,x), _(x,x),
/* 0CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R), _(M,R), _(x,x),
- /* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(x,x),
+ /* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CD,x), _(C,x), _(x,x),
/* 0CE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0CF0 */ _(x,x),_(CWS,x),_(CWS,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
@@ -402,7 +402,7 @@ static const uint16_t indic_table[] = {
/* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(CP,x), _(CP,x), _(CP,x), _(x,x),
/* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,R), _(TM,T), _(TM,R), _(C,x), _(C,x),
-}; /* Table items: 1792; occupancy: 70% */
+}; /* Table items: 1792; occupancy: 71% */
uint16_t
hb_indic_get_categories (hb_codepoint_t u)
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
index a4f2d9a847..0983a32848 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc
@@ -106,7 +106,8 @@ indic_features[] =
{
/*
* Basic features.
- * These features are applied in order, one at a time, after initial_reordering.
+ * These features are applied in order, one at a time, after initial_reordering,
+ * constrained to the syllable.
*/
{HB_TAG('n','u','k','t'), F_GLOBAL_MANUAL_JOINERS},
{HB_TAG('a','k','h','n'), F_GLOBAL_MANUAL_JOINERS},
@@ -121,8 +122,8 @@ indic_features[] =
{HB_TAG('c','j','c','t'), F_GLOBAL_MANUAL_JOINERS},
/*
* Other features.
- * These features are applied all at once, after final_reordering
- * but before clearing syllables.
+ * These features are applied all at once, after final_reordering, constrained
+ * to the syllable.
* Default Bengali font in Windows for example has intermixed
* lookups for init,pres,abvs,blws features.
*/
@@ -257,7 +258,7 @@ struct indic_shape_plan_t
static void *
data_create_indic (const hb_ot_shape_plan_t *plan)
{
- indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) calloc (1, sizeof (indic_shape_plan_t));
+ indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) hb_calloc (1, sizeof (indic_shape_plan_t));
if (unlikely (!indic_plan))
return nullptr;
@@ -300,7 +301,7 @@ data_create_indic (const hb_ot_shape_plan_t *plan)
static void
data_destroy_indic (void *data)
{
- free (data);
+ hb_free (data);
}
static indic_position_t
@@ -960,7 +961,8 @@ initial_reordering_indic (const hb_ot_shape_plan_t *plan,
hb_syllabic_insert_dotted_circles (font, buffer,
indic_broken_cluster,
OT_DOTTEDCIRCLE,
- OT_Repha);
+ OT_Repha,
+ POS_END);
foreach_syllable (buffer, start, end)
initial_reordering_syllable_indic (plan, font->face, buffer, start, end);
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh
index 82ab186a41..c52f72f394 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh
@@ -1,29 +1,30 @@
+
#line 1 "hb-ot-shape-complex-khmer-machine.rl"
/*
-* Copyright © 2011,2012 Google, Inc.
-*
-* This is part of HarfBuzz, a text shaping library.
-*
-* Permission is hereby granted, without written agreement and without
-* license or royalty fees, to use, copy, modify, and distribute this
-* software and its documentation for any purpose, provided that the
-* above copyright notice and the following two paragraphs appear in
-* all copies of this software.
-*
-* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
-* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
-* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-* DAMAGE.
-*
-* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
-* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-*
-* Google Author(s): Behdad Esfahbod
-*/
+ * Copyright © 2011,2012 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
#ifndef HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
#define HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH
@@ -31,13 +32,13 @@
#include "hb.hh"
enum khmer_syllable_type_t {
- khmer_consonant_syllable,
- khmer_broken_cluster,
- khmer_non_khmer_cluster,
+ khmer_consonant_syllable,
+ khmer_broken_cluster,
+ khmer_non_khmer_cluster,
};
-#line 41 "hb-ot-shape-complex-khmer-machine.hh"
+#line 42 "hb-ot-shape-complex-khmer-machine.hh"
#define khmer_syllable_machine_ex_C 1u
#define khmer_syllable_machine_ex_Coeng 14u
#define khmer_syllable_machine_ex_DOTTEDCIRCLE 12u
@@ -55,125 +56,180 @@ enum khmer_syllable_type_t {
#define khmer_syllable_machine_ex_ZWNJ 5u
-#line 59 "hb-ot-shape-complex-khmer-machine.hh"
+#line 60 "hb-ot-shape-complex-khmer-machine.hh"
static const unsigned char _khmer_syllable_machine_trans_keys[] = {
- 2u, 8u, 2u, 6u, 2u, 8u, 2u, 6u,
- 0u, 0u, 2u, 6u, 2u, 8u, 2u, 6u,
- 2u, 8u, 2u, 6u, 2u, 6u, 2u, 8u,
- 2u, 6u, 0u, 0u, 2u, 6u, 2u, 8u,
- 2u, 6u, 2u, 8u, 2u, 6u, 2u, 8u,
- 0u, 11u, 2u, 11u, 2u, 11u, 2u, 11u,
- 7u, 7u, 2u, 7u, 2u, 11u, 2u, 11u,
- 2u, 11u, 0u, 0u, 2u, 8u, 2u, 11u,
- 2u, 11u, 7u, 7u, 2u, 7u, 2u, 11u,
- 2u, 11u, 0u, 0u, 2u, 11u, 2u, 11u,
- 0u
+ 5u, 26u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u, 5u, 21u,
+ 5u, 26u, 5u, 21u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u,
+ 5u, 21u, 5u, 26u, 5u, 21u, 5u, 26u, 1u, 29u, 5u, 29u, 5u, 29u, 5u, 29u,
+ 22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 26u, 5u, 29u,
+ 5u, 29u, 22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 29u, 5u, 29u,
+ 0
};
-static const signed char _khmer_syllable_machine_char_class[] = {
- 0, 0, 1, 1, 2, 2, 1, 1,
- 1, 1, 3, 3, 1, 4, 1, 0,
- 1, 1, 1, 5, 6, 7, 1, 1,
- 1, 8, 9, 10, 11, 0
+static const char _khmer_syllable_machine_key_spans[] = {
+ 22, 17, 22, 17, 16, 17, 22, 17,
+ 22, 17, 17, 22, 17, 16, 17, 22,
+ 17, 22, 17, 22, 29, 25, 25, 25,
+ 1, 18, 25, 25, 25, 16, 22, 25,
+ 25, 1, 18, 25, 25, 16, 25, 25
};
static const short _khmer_syllable_machine_index_offsets[] = {
- 0, 7, 12, 19, 24, 25, 30, 37,
- 42, 49, 54, 59, 66, 71, 72, 77,
- 84, 89, 96, 101, 108, 120, 130, 140,
- 150, 151, 157, 167, 177, 187, 188, 195,
- 205, 215, 216, 222, 232, 242, 243, 253,
- 0
-};
-
-static const signed char _khmer_syllable_machine_indicies[] = {
- 1, 0, 0, 2, 3, 0, 4, 1,
- 0, 0, 0, 3, 1, 0, 0, 0,
- 3, 0, 4, 5, 0, 0, 0, 4,
- 6, 7, 0, 0, 0, 8, 9, 0,
- 0, 0, 10, 0, 4, 9, 0, 0,
- 0, 10, 11, 0, 0, 0, 12, 0,
- 4, 11, 0, 0, 0, 12, 14, 13,
- 13, 13, 15, 14, 16, 16, 16, 15,
- 16, 17, 18, 16, 16, 16, 17, 19,
- 20, 16, 16, 16, 21, 22, 16, 16,
- 16, 23, 16, 17, 22, 16, 16, 16,
- 23, 24, 16, 16, 16, 25, 16, 17,
- 24, 16, 16, 16, 25, 14, 16, 16,
- 26, 15, 16, 17, 29, 28, 30, 2,
- 31, 28, 15, 19, 17, 23, 25, 21,
- 33, 32, 34, 2, 3, 6, 4, 10,
- 12, 8, 35, 32, 36, 32, 3, 6,
- 4, 10, 12, 8, 5, 32, 36, 32,
- 4, 6, 32, 32, 32, 8, 6, 7,
- 32, 36, 32, 8, 6, 37, 32, 36,
- 32, 10, 6, 4, 32, 32, 8, 38,
- 32, 36, 32, 12, 6, 4, 10, 32,
- 8, 35, 32, 34, 32, 3, 6, 4,
- 10, 12, 8, 29, 14, 39, 39, 39,
- 15, 39, 17, 41, 40, 42, 40, 15,
- 19, 17, 23, 25, 21, 18, 40, 42,
- 40, 17, 19, 40, 40, 40, 21, 19,
- 20, 40, 42, 40, 21, 19, 43, 40,
- 42, 40, 23, 19, 17, 40, 40, 21,
- 44, 40, 42, 40, 25, 19, 17, 23,
- 40, 21, 45, 46, 40, 31, 26, 15,
- 19, 17, 23, 25, 21, 41, 40, 31,
- 40, 15, 19, 17, 23, 25, 21, 0
+ 0, 23, 41, 64, 82, 99, 117, 140,
+ 158, 181, 199, 217, 240, 258, 275, 293,
+ 316, 334, 357, 375, 398, 428, 454, 480,
+ 506, 508, 527, 553, 579, 605, 622, 645,
+ 671, 697, 699, 718, 744, 770, 787, 813
};
-static const signed char _khmer_syllable_machine_index_defaults[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 13, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 28, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 39, 40,
- 40, 40, 40, 40, 40, 40, 40, 40,
- 0
+static const char _khmer_syllable_machine_indicies[] = {
+ 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2,
+ 3, 0, 0, 0, 0, 4, 0, 1,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 1, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 4, 0,
+ 5, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 0, 6, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 0, 7, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 0, 9, 9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 10, 0, 0,
+ 0, 0, 4, 0, 9, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 10, 0, 11, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0,
+ 0, 0, 0, 4, 0, 11, 11, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 0, 14,
+ 14, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15,
+ 13, 14, 14, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 15, 16, 16, 16, 16, 17, 16,
+ 18, 18, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 16, 19, 19, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 19, 16, 20, 20, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 21, 16, 22, 22, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 23, 16, 16,
+ 16, 16, 17, 16, 22, 22, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 23, 16, 24, 24,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 25, 16,
+ 16, 16, 16, 17, 16, 24, 24, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 25, 16, 14,
+ 14, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 26, 15,
+ 16, 16, 16, 16, 17, 16, 28, 28,
+ 27, 27, 29, 29, 27, 27, 27, 27,
+ 2, 2, 27, 30, 27, 28, 27, 27,
+ 27, 27, 15, 19, 27, 27, 27, 17,
+ 23, 25, 21, 27, 32, 32, 31, 31,
+ 31, 31, 31, 31, 31, 33, 31, 31,
+ 31, 31, 31, 2, 3, 6, 31, 31,
+ 31, 4, 10, 12, 8, 31, 34, 34,
+ 31, 31, 31, 31, 31, 31, 31, 35,
+ 31, 31, 31, 31, 31, 31, 3, 6,
+ 31, 31, 31, 4, 10, 12, 8, 31,
+ 5, 5, 31, 31, 31, 31, 31, 31,
+ 31, 35, 31, 31, 31, 31, 31, 31,
+ 4, 6, 31, 31, 31, 31, 31, 31,
+ 8, 31, 6, 31, 7, 7, 31, 31,
+ 31, 31, 31, 31, 31, 35, 31, 31,
+ 31, 31, 31, 31, 8, 6, 31, 36,
+ 36, 31, 31, 31, 31, 31, 31, 31,
+ 35, 31, 31, 31, 31, 31, 31, 10,
+ 6, 31, 31, 31, 4, 31, 31, 8,
+ 31, 37, 37, 31, 31, 31, 31, 31,
+ 31, 31, 35, 31, 31, 31, 31, 31,
+ 31, 12, 6, 31, 31, 31, 4, 10,
+ 31, 8, 31, 34, 34, 31, 31, 31,
+ 31, 31, 31, 31, 33, 31, 31, 31,
+ 31, 31, 31, 3, 6, 31, 31, 31,
+ 4, 10, 12, 8, 31, 28, 28, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 28, 31, 14, 14,
+ 38, 38, 38, 38, 38, 38, 38, 38,
+ 38, 38, 38, 38, 38, 38, 15, 38,
+ 38, 38, 38, 17, 38, 40, 40, 39,
+ 39, 39, 39, 39, 39, 39, 41, 39,
+ 39, 39, 39, 39, 39, 15, 19, 39,
+ 39, 39, 17, 23, 25, 21, 39, 18,
+ 18, 39, 39, 39, 39, 39, 39, 39,
+ 41, 39, 39, 39, 39, 39, 39, 17,
+ 19, 39, 39, 39, 39, 39, 39, 21,
+ 39, 19, 39, 20, 20, 39, 39, 39,
+ 39, 39, 39, 39, 41, 39, 39, 39,
+ 39, 39, 39, 21, 19, 39, 42, 42,
+ 39, 39, 39, 39, 39, 39, 39, 41,
+ 39, 39, 39, 39, 39, 39, 23, 19,
+ 39, 39, 39, 17, 39, 39, 21, 39,
+ 43, 43, 39, 39, 39, 39, 39, 39,
+ 39, 41, 39, 39, 39, 39, 39, 39,
+ 25, 19, 39, 39, 39, 17, 23, 39,
+ 21, 39, 44, 44, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 44, 39, 45, 45, 39, 39, 39,
+ 39, 39, 39, 39, 30, 39, 39, 39,
+ 39, 39, 26, 15, 19, 39, 39, 39,
+ 17, 23, 25, 21, 39, 40, 40, 39,
+ 39, 39, 39, 39, 39, 39, 30, 39,
+ 39, 39, 39, 39, 39, 15, 19, 39,
+ 39, 39, 17, 23, 25, 21, 39, 0
};
-static const signed char _khmer_syllable_machine_cond_targs[] = {
- 20, 1, 28, 22, 23, 3, 24, 5,
- 25, 7, 26, 9, 27, 20, 10, 31,
- 20, 32, 12, 33, 14, 34, 16, 35,
- 18, 36, 39, 20, 20, 21, 30, 37,
- 20, 0, 29, 2, 4, 6, 8, 20,
- 20, 11, 13, 15, 17, 38, 19, 0
+static const char _khmer_syllable_machine_trans_targs[] = {
+ 20, 1, 28, 22, 23, 3, 24, 5,
+ 25, 7, 26, 9, 27, 20, 10, 31,
+ 20, 32, 12, 33, 14, 34, 16, 35,
+ 18, 36, 39, 20, 21, 30, 37, 20,
+ 0, 29, 2, 4, 6, 8, 20, 20,
+ 11, 13, 15, 17, 38, 19
};
-static const signed char _khmer_syllable_machine_cond_actions[] = {
- 1, 0, 2, 2, 2, 0, 0, 0,
- 2, 0, 2, 0, 2, 3, 0, 4,
- 5, 2, 0, 0, 0, 2, 0, 2,
- 0, 2, 4, 0, 8, 2, 9, 0,
- 10, 0, 0, 0, 0, 0, 0, 11,
- 12, 0, 0, 0, 0, 4, 0, 0
+static const char _khmer_syllable_machine_trans_actions[] = {
+ 1, 0, 2, 2, 2, 0, 0, 0,
+ 2, 0, 2, 0, 2, 3, 0, 4,
+ 5, 2, 0, 0, 0, 2, 0, 2,
+ 0, 2, 4, 8, 2, 9, 0, 10,
+ 0, 0, 0, 0, 0, 0, 11, 12,
+ 0, 0, 0, 0, 4, 0
};
-static const signed char _khmer_syllable_machine_to_state_actions[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
+static const char _khmer_syllable_machine_to_state_actions[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
};
-static const signed char _khmer_syllable_machine_from_state_actions[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0
+static const char _khmer_syllable_machine_from_state_actions[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0
};
-static const signed char _khmer_syllable_machine_eof_trans[] = {
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 14, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 28, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 40, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 0
+static const unsigned char _khmer_syllable_machine_eof_trans[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 14, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 0, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 39, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40
};
static const int khmer_syllable_machine_start = 20;
@@ -191,263 +247,148 @@ static const int khmer_syllable_machine_en_main = 20;
#define found_syllable(syllable_type) \
-HB_STMT_START { \
- if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
- for (unsigned int i = ts; i < te; i++) \
- info[i].syllable() = (syllable_serial << 4) | syllable_type; \
- syllable_serial++; \
- if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
- } HB_STMT_END
+ HB_STMT_START { \
+ if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \
+ for (unsigned int i = ts; i < te; i++) \
+ info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+ syllable_serial++; \
+ if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+ } HB_STMT_END
static void
find_syllables_khmer (hb_buffer_t *buffer)
{
- unsigned int p, pe, eof, ts, te, act HB_UNUSED;
- int cs;
- hb_glyph_info_t *info = buffer->info;
-
-#line 210 "hb-ot-shape-complex-khmer-machine.hh"
+ unsigned int p, pe, eof, ts, te, act HB_UNUSED;
+ int cs;
+ hb_glyph_info_t *info = buffer->info;
+
+#line 266 "hb-ot-shape-complex-khmer-machine.hh"
{
- cs = (int)khmer_syllable_machine_start;
- ts = 0;
- te = 0;
- act = 0;
+ cs = khmer_syllable_machine_start;
+ ts = 0;
+ te = 0;
+ act = 0;
}
-
+
#line 106 "hb-ot-shape-complex-khmer-machine.rl"
-
-
- p = 0;
- pe = eof = buffer->len;
-
- unsigned int syllable_serial = 1;
-
-#line 226 "hb-ot-shape-complex-khmer-machine.hh"
+
+
+ p = 0;
+ pe = eof = buffer->len;
+
+ unsigned int syllable_serial = 1;
+
+#line 282 "hb-ot-shape-complex-khmer-machine.hh"
{
- unsigned int _trans = 0;
- const unsigned char * _keys;
- const signed char * _inds;
- int _ic;
- _resume: {}
- if ( p == pe && p != eof )
- goto _out;
- switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
- case 7: {
- {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+_resume:
+ switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
+ case 7:
#line 1 "NONE"
- {ts = p;}}
-
-#line 241 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- }
-
- if ( p == eof ) {
- if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
- _trans = (unsigned int)_khmer_syllable_machine_eof_trans[cs] - 1;
- }
- }
- else {
- _keys = ( _khmer_syllable_machine_trans_keys + ((cs<<1)));
- _inds = ( _khmer_syllable_machine_indicies + (_khmer_syllable_machine_index_offsets[cs]));
-
- if ( (info[p].khmer_category()) <= 29 && (info[p].khmer_category()) >= 1 ) {
- _ic = (int)_khmer_syllable_machine_char_class[(int)(info[p].khmer_category()) - 1];
- if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
- _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
- else
- _trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs];
- }
- else {
- _trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs];
- }
-
- }
- cs = (int)_khmer_syllable_machine_cond_targs[_trans];
-
- if ( _khmer_syllable_machine_cond_actions[_trans] != 0 ) {
-
- switch ( _khmer_syllable_machine_cond_actions[_trans] ) {
- case 2: {
- {
+ {ts = p;}
+ break;
+#line 296 "hb-ot-shape-complex-khmer-machine.hh"
+ }
+
+ _keys = _khmer_syllable_machine_trans_keys + (cs<<1);
+ _inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
+
+ _slen = _khmer_syllable_machine_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
+ ( info[p].khmer_category()) <= _keys[1] ?
+ ( info[p].khmer_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+ cs = _khmer_syllable_machine_trans_targs[_trans];
+
+ if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
+ case 2:
#line 1 "NONE"
- {te = p+1;}}
-
-#line 279 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 8: {
- {
-#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- {te = p+1;{
+ {te = p+1;}
+ break;
+ case 8:
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_non_khmer_cluster); }
- }}
-
-#line 292 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 10: {
- {
+ {te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
+ break;
+ case 10:
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
- {te = p;p = p - 1;{
-#line 80 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_consonant_syllable); }
- }}
-
-#line 305 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 12: {
- {
-#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
+ break;
+ case 12:
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_broken_cluster); }
- }}
-
-#line 318 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 11: {
- {
-#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (khmer_broken_cluster); }}
+ break;
+ case 11:
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_non_khmer_cluster); }
- }}
-
-#line 331 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 1: {
- {
+ {te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
+ break;
+ case 1:
#line 80 "hb-ot-shape-complex-khmer-machine.rl"
- {p = ((te))-1;
- {
-#line 80 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_consonant_syllable); }
- }}
-
-#line 345 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 5: {
- {
-#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- {p = ((te))-1;
- {
+ {{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
+ break;
+ case 5:
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_broken_cluster); }
- }}
-
-#line 359 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 3: {
- {
+ {{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); }}
+ break;
+ case 3:
#line 1 "NONE"
- {switch( act ) {
- case 2: {
- p = ((te))-1;
- {
-#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_broken_cluster); }
- break;
- }
- case 3: {
- p = ((te))-1;
- {
-#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- found_syllable (khmer_non_khmer_cluster); }
- break;
- }
- }}
- }
-
-#line 385 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 4: {
- {
+ { switch( act ) {
+ case 2:
+ {{p = ((te))-1;} found_syllable (khmer_broken_cluster); }
+ break;
+ case 3:
+ {{p = ((te))-1;} found_syllable (khmer_non_khmer_cluster); }
+ break;
+ }
+ }
+ break;
+ case 4:
#line 1 "NONE"
- {te = p+1;}}
-
-#line 395 "hb-ot-shape-complex-khmer-machine.hh"
-
- {
+ {te = p+1;}
#line 81 "hb-ot-shape-complex-khmer-machine.rl"
- {act = 2;}}
-
-#line 401 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- case 9: {
- {
+ {act = 2;}
+ break;
+ case 9:
#line 1 "NONE"
- {te = p+1;}}
-
-#line 411 "hb-ot-shape-complex-khmer-machine.hh"
-
- {
+ {te = p+1;}
#line 82 "hb-ot-shape-complex-khmer-machine.rl"
- {act = 3;}}
-
-#line 417 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- }
-
- }
-
- if ( p == eof ) {
- if ( cs >= 20 )
- goto _out;
- }
- else {
- switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
- case 6: {
- {
+ {act = 3;}
+ break;
+#line 366 "hb-ot-shape-complex-khmer-machine.hh"
+ }
+
+_again:
+ switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
+ case 6:
#line 1 "NONE"
- {ts = 0;}}
-
-#line 437 "hb-ot-shape-complex-khmer-machine.hh"
-
-
- break;
- }
- }
-
- p += 1;
- goto _resume;
- }
- _out: {}
+ {ts = 0;}
+ break;
+#line 375 "hb-ot-shape-complex-khmer-machine.hh"
+ }
+
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ if ( p == eof )
+ {
+ if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
+ _trans = _khmer_syllable_machine_eof_trans[cs] - 1;
+ goto _eof_trans;
+ }
}
-
+
+ }
+
#line 114 "hb-ot-shape-complex-khmer-machine.rl"
-
+
}
#undef found_syllable
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc
index dddba142a3..7787886857 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc
@@ -42,7 +42,8 @@ khmer_features[] =
{
/*
* Basic features.
- * These features are applied in order, one at a time, after reordering.
+ * These features are applied all at once, before reordering, constrained
+ * to the syllable.
*/
{HB_TAG('p','r','e','f'), F_MANUAL_JOINERS},
{HB_TAG('b','l','w','f'), F_MANUAL_JOINERS},
@@ -147,7 +148,7 @@ struct khmer_shape_plan_t
static void *
data_create_khmer (const hb_ot_shape_plan_t *plan)
{
- khmer_shape_plan_t *khmer_plan = (khmer_shape_plan_t *) calloc (1, sizeof (khmer_shape_plan_t));
+ khmer_shape_plan_t *khmer_plan = (khmer_shape_plan_t *) hb_calloc (1, sizeof (khmer_shape_plan_t));
if (unlikely (!khmer_plan))
return nullptr;
@@ -161,7 +162,7 @@ data_create_khmer (const hb_ot_shape_plan_t *plan)
static void
data_destroy_khmer (void *data)
{
- free (data);
+ hb_free (data);
}
static void
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
index bc5dcb904c..6e92a9b0ae 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc
@@ -41,7 +41,8 @@ myanmar_basic_features[] =
{
/*
* Basic features.
- * These features are applied in order, one at a time, after reordering.
+ * These features are applied in order, one at a time, after reordering,
+ * constrained to the syllable.
*/
HB_TAG('r','p','h','f'),
HB_TAG('p','r','e','f'),
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
index 46509abee2..5a08f878dc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
@@ -34,7 +34,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int broken_syllable_type,
unsigned int dottedcircle_category,
- int repha_category)
+ int repha_category,
+ int dottedcircle_position)
{
if (unlikely (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE))
return;
@@ -61,6 +62,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font,
hb_glyph_info_t dottedcircle = {0};
dottedcircle.codepoint = 0x25CCu;
dottedcircle.complex_var_u8_category() = dottedcircle_category;
+ if (dottedcircle_position != -1)
+ dottedcircle.complex_var_u8_auxiliary() = dottedcircle_position;
dottedcircle.codepoint = dottedcircle_glyph;
buffer->clear_output ();
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh
index c80b8fee1d..b901a660d3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh
@@ -35,7 +35,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font,
hb_buffer_t *buffer,
unsigned int broken_syllable_type,
unsigned int dottedcircle_category,
- int repha_category = -1);
+ int repha_category = -1,
+ int dottedcircle_position = -1);
#endif /* HB_OT_SHAPE_COMPLEX_SYLLABIC_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
index b4b2b75100..bb046a72ec 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
@@ -1,31 +1,32 @@
+
#line 1 "hb-ot-shape-complex-use-machine.rl"
/*
-* Copyright © 2015 Mozilla Foundation.
-* Copyright © 2015 Google, Inc.
-*
-* This is part of HarfBuzz, a text shaping library.
-*
-* Permission is hereby granted, without written agreement and without
-* license or royalty fees, to use, copy, modify, and distribute this
-* software and its documentation for any purpose, provided that the
-* above copyright notice and the following two paragraphs appear in
-* all copies of this software.
-*
-* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
-* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
-* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-* DAMAGE.
-*
-* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
-* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
-* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-*
-* Mozilla Author(s): Jonathan Kew
-* Google Author(s): Behdad Esfahbod
-*/
+ * Copyright © 2015 Mozilla Foundation.
+ * Copyright © 2015 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Mozilla Author(s): Jonathan Kew
+ * Google Author(s): Behdad Esfahbod
+ */
#ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
@@ -40,20 +41,20 @@
#define USE(Cat) use_syllable_machine_ex_##Cat
enum use_syllable_type_t {
- use_independent_cluster,
- use_virama_terminated_cluster,
- use_sakot_terminated_cluster,
- use_standard_cluster,
- use_number_joiner_terminated_cluster,
- use_numeral_cluster,
- use_symbol_cluster,
- use_hieroglyph_cluster,
- use_broken_cluster,
- use_non_cluster,
+ use_independent_cluster,
+ use_virama_terminated_cluster,
+ use_sakot_terminated_cluster,
+ use_standard_cluster,
+ use_number_joiner_terminated_cluster,
+ use_numeral_cluster,
+ use_symbol_cluster,
+ use_hieroglyph_cluster,
+ use_broken_cluster,
+ use_non_cluster,
};
-#line 57 "hb-ot-shape-complex-use-machine.hh"
+#line 58 "hb-ot-shape-complex-use-machine.hh"
#define use_syllable_machine_ex_B 1u
#define use_syllable_machine_ex_CMAbv 31u
#define use_syllable_machine_ex_CMBlw 32u
@@ -95,254 +96,266 @@ enum use_syllable_type_t {
#define use_syllable_machine_ex_ZWNJ 14u
-#line 99 "hb-ot-shape-complex-use-machine.hh"
+#line 100 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = {
- 1u, 1u, 1u, 1u, 0u, 37u, 5u, 34u,
- 5u, 34u, 1u, 1u, 10u, 34u, 11u, 34u,
- 12u, 33u, 13u, 33u, 14u, 33u, 31u, 32u,
- 32u, 32u, 12u, 34u, 12u, 34u, 12u, 34u,
- 1u, 1u, 12u, 34u, 11u, 34u, 11u, 34u,
- 11u, 34u, 10u, 34u, 10u, 34u, 10u, 34u,
- 5u, 34u, 1u, 34u, 7u, 7u, 3u, 3u,
- 5u, 34u, 27u, 28u, 28u, 28u, 5u, 34u,
- 10u, 34u, 11u, 34u, 12u, 33u, 13u, 33u,
- 14u, 33u, 31u, 32u, 32u, 32u, 12u, 34u,
- 12u, 34u, 12u, 34u, 12u, 34u, 11u, 34u,
- 11u, 34u, 11u, 34u, 10u, 34u, 10u, 34u,
- 10u, 34u, 5u, 34u, 1u, 34u, 1u, 1u,
- 3u, 3u, 7u, 7u, 1u, 34u, 5u, 34u,
- 27u, 28u, 28u, 28u, 1u, 4u, 36u, 38u,
- 35u, 38u, 35u, 37u, 0u
+ 1u, 1u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u,
+ 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u,
+ 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u,
+ 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 41u, 42u, 42u, 42u, 11u, 48u,
+ 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u,
+ 24u, 48u, 24u, 48u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u,
+ 22u, 48u, 11u, 48u, 1u, 48u, 1u, 1u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u,
+ 41u, 42u, 42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
};
-static const signed char _use_syllable_machine_char_class[] = {
- 0, 1, 2, 2, 3, 4, 2, 2,
- 2, 2, 2, 5, 6, 7, 2, 2,
- 2, 2, 8, 9, 2, 2, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 2, 24, 25, 26,
- 2, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 0
+static const char _use_syllable_machine_key_spans[] = {
+ 1, 1, 52, 38, 38, 1, 27, 26,
+ 24, 23, 22, 2, 1, 25, 25, 25,
+ 1, 25, 26, 26, 26, 27, 27, 27,
+ 38, 48, 1, 1, 38, 2, 1, 38,
+ 27, 26, 24, 23, 22, 2, 1, 25,
+ 25, 25, 25, 26, 26, 26, 27, 27,
+ 27, 38, 48, 1, 1, 1, 48, 38,
+ 2, 1, 5, 3, 4, 3
};
static const short _use_syllable_machine_index_offsets[] = {
- 0, 1, 2, 40, 70, 100, 101, 126,
- 150, 172, 193, 213, 215, 216, 239, 262,
- 285, 286, 309, 333, 357, 381, 406, 431,
- 456, 486, 520, 521, 522, 552, 554, 555,
- 585, 610, 634, 656, 677, 697, 699, 700,
- 723, 746, 769, 792, 816, 840, 864, 889,
- 914, 939, 969, 1003, 1004, 1005, 1006, 1040,
- 1070, 1072, 1073, 1077, 1080, 1084, 0
-};
-
-static const signed char _use_syllable_machine_indicies[] = {
- 1, 2, 4, 5, 6, 7, 8, 1,
- 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 13, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 9, 36, 6, 37,
- 39, 40, 38, 38, 38, 41, 42, 43,
- 44, 45, 46, 47, 41, 48, 5, 49,
- 50, 51, 52, 53, 54, 55, 38, 38,
- 38, 56, 57, 58, 59, 40, 39, 40,
- 38, 38, 38, 41, 42, 43, 44, 45,
- 46, 47, 41, 48, 49, 49, 50, 51,
- 52, 53, 54, 55, 38, 38, 38, 56,
- 57, 58, 59, 40, 39, 41, 42, 43,
- 44, 45, 38, 38, 38, 38, 38, 38,
- 50, 51, 52, 53, 54, 55, 38, 38,
- 38, 42, 57, 58, 59, 61, 42, 43,
- 44, 45, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 53, 54, 55, 38, 38,
- 38, 38, 57, 58, 59, 61, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 57, 58, 59, 44, 45, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 57, 58,
- 59, 45, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 57, 58, 59, 57, 58, 58,
- 43, 44, 45, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 53, 54, 55, 38,
- 38, 38, 38, 57, 58, 59, 61, 43,
- 44, 45, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 54, 55, 38, 38,
- 38, 38, 57, 58, 59, 61, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 55, 38, 38, 38,
- 38, 57, 58, 59, 61, 63, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 57, 58, 59, 61, 42, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 50,
- 51, 52, 53, 54, 55, 38, 38, 38,
- 42, 57, 58, 59, 61, 42, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 38,
- 51, 52, 53, 54, 55, 38, 38, 38,
- 42, 57, 58, 59, 61, 42, 43, 44,
- 45, 38, 38, 38, 38, 38, 38, 38,
- 38, 52, 53, 54, 55, 38, 38, 38,
- 42, 57, 58, 59, 61, 41, 42, 43,
- 44, 45, 38, 47, 41, 38, 38, 38,
- 50, 51, 52, 53, 54, 55, 38, 38,
- 38, 42, 57, 58, 59, 61, 41, 42,
- 43, 44, 45, 38, 38, 41, 38, 38,
- 38, 50, 51, 52, 53, 54, 55, 38,
- 38, 38, 42, 57, 58, 59, 61, 41,
- 42, 43, 44, 45, 46, 47, 41, 38,
- 38, 38, 50, 51, 52, 53, 54, 55,
- 38, 38, 38, 42, 57, 58, 59, 61,
- 39, 40, 38, 38, 38, 41, 42, 43,
- 44, 45, 46, 47, 41, 48, 38, 49,
- 50, 51, 52, 53, 54, 55, 38, 38,
- 38, 56, 57, 58, 59, 40, 39, 60,
- 60, 60, 60, 60, 60, 60, 60, 60,
- 42, 43, 44, 45, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 53, 54, 55,
- 60, 60, 60, 60, 57, 58, 59, 61,
- 65, 7, 39, 40, 38, 38, 38, 41,
- 42, 43, 44, 45, 46, 47, 41, 48,
- 5, 49, 50, 51, 52, 53, 54, 55,
- 12, 67, 38, 56, 57, 58, 59, 40,
- 12, 67, 67, 1, 70, 69, 69, 69,
- 13, 14, 15, 16, 17, 18, 19, 13,
- 20, 22, 22, 23, 24, 25, 26, 27,
- 28, 69, 69, 69, 32, 33, 34, 35,
- 70, 13, 14, 15, 16, 17, 69, 69,
- 69, 69, 69, 69, 23, 24, 25, 26,
- 27, 28, 69, 69, 69, 14, 33, 34,
- 35, 71, 14, 15, 16, 17, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 26,
- 27, 28, 69, 69, 69, 69, 33, 34,
- 35, 71, 15, 16, 17, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 33, 34, 35,
- 16, 17, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 33, 34, 35, 17, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 33, 34,
- 35, 33, 34, 34, 15, 16, 17, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 26, 27, 28, 69, 69, 69, 69, 33,
- 34, 35, 71, 15, 16, 17, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 27, 28, 69, 69, 69, 69, 33, 34,
- 35, 71, 15, 16, 17, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 28, 69, 69, 69, 69, 33, 34, 35,
- 71, 15, 16, 17, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 33, 34, 35, 71,
- 14, 15, 16, 17, 69, 69, 69, 69,
- 69, 69, 23, 24, 25, 26, 27, 28,
- 69, 69, 69, 14, 33, 34, 35, 71,
- 14, 15, 16, 17, 69, 69, 69, 69,
- 69, 69, 69, 24, 25, 26, 27, 28,
- 69, 69, 69, 14, 33, 34, 35, 71,
- 14, 15, 16, 17, 69, 69, 69, 69,
- 69, 69, 69, 69, 25, 26, 27, 28,
- 69, 69, 69, 14, 33, 34, 35, 71,
- 13, 14, 15, 16, 17, 69, 19, 13,
- 69, 69, 69, 23, 24, 25, 26, 27,
- 28, 69, 69, 69, 14, 33, 34, 35,
- 71, 13, 14, 15, 16, 17, 69, 69,
- 13, 69, 69, 69, 23, 24, 25, 26,
- 27, 28, 69, 69, 69, 14, 33, 34,
- 35, 71, 13, 14, 15, 16, 17, 18,
- 19, 13, 69, 69, 69, 23, 24, 25,
- 26, 27, 28, 69, 69, 69, 14, 33,
- 34, 35, 71, 1, 70, 69, 69, 69,
- 13, 14, 15, 16, 17, 18, 19, 13,
- 20, 69, 22, 23, 24, 25, 26, 27,
- 28, 69, 69, 69, 32, 33, 34, 35,
- 70, 1, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 14, 15, 16, 17, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 26, 27, 28, 69, 69, 69, 69, 33,
- 34, 35, 71, 1, 73, 10, 5, 69,
- 69, 5, 1, 70, 10, 69, 69, 13,
- 14, 15, 16, 17, 18, 19, 13, 20,
- 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 69, 32, 33, 34, 35, 70,
- 1, 70, 69, 69, 69, 13, 14, 15,
- 16, 17, 18, 19, 13, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 69, 69,
- 69, 32, 33, 34, 35, 70, 29, 30,
- 30, 5, 72, 72, 5, 75, 74, 36,
- 36, 75, 74, 75, 36, 74, 37, 0
+ 0, 2, 4, 57, 96, 135, 137, 165,
+ 192, 217, 241, 264, 267, 269, 295, 321,
+ 347, 349, 375, 402, 429, 456, 484, 512,
+ 540, 579, 628, 630, 632, 671, 674, 676,
+ 715, 743, 770, 795, 819, 842, 845, 847,
+ 873, 899, 925, 951, 978, 1005, 1032, 1060,
+ 1088, 1116, 1155, 1204, 1206, 1208, 1210, 1259,
+ 1298, 1301, 1303, 1309, 1313, 1318
};
-static const signed char _use_syllable_machine_index_defaults[] = {
- 0, 0, 6, 38, 38, 60, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 62, 38, 38, 38, 38, 38, 38, 38,
- 38, 60, 64, 66, 38, 68, 68, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 72, 69, 69, 69, 69,
- 69, 69, 72, 74, 74, 74, 0
+static const char _use_syllable_machine_indicies[] = {
+ 1, 0, 2, 0, 3, 4, 5, 5,
+ 6, 7, 5, 5, 5, 5, 5, 1,
+ 8, 9, 5, 5, 5, 5, 10, 11,
+ 5, 5, 12, 13, 14, 15, 16, 17,
+ 18, 12, 19, 20, 21, 22, 23, 24,
+ 5, 25, 26, 27, 5, 28, 29, 30,
+ 31, 32, 33, 34, 8, 35, 5, 36,
+ 5, 38, 39, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 40, 41, 42, 43,
+ 44, 45, 46, 40, 47, 4, 48, 49,
+ 50, 51, 37, 52, 53, 54, 37, 37,
+ 37, 37, 55, 56, 57, 58, 39, 37,
+ 38, 39, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 40, 41, 42, 43, 44,
+ 45, 46, 40, 47, 48, 48, 49, 50,
+ 51, 37, 52, 53, 54, 37, 37, 37,
+ 37, 55, 56, 57, 58, 39, 37, 38,
+ 59, 40, 41, 42, 43, 44, 37, 37,
+ 37, 37, 37, 37, 49, 50, 51, 37,
+ 52, 53, 54, 37, 37, 37, 37, 41,
+ 56, 57, 58, 60, 37, 41, 42, 43,
+ 44, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 52, 53, 54, 37, 37,
+ 37, 37, 37, 56, 57, 58, 60, 37,
+ 42, 43, 44, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 56, 57, 58,
+ 37, 43, 44, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 56, 57, 58,
+ 37, 44, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 56, 57, 58, 37,
+ 56, 57, 37, 57, 37, 42, 43, 44,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 52, 53, 54, 37, 37, 37,
+ 37, 37, 56, 57, 58, 60, 37, 42,
+ 43, 44, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 53, 54, 37,
+ 37, 37, 37, 37, 56, 57, 58, 60,
+ 37, 42, 43, 44, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 54, 37, 37, 37, 37, 37, 56, 57,
+ 58, 60, 37, 62, 61, 42, 43, 44,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 56, 57, 58, 60, 37, 41,
+ 42, 43, 44, 37, 37, 37, 37, 37,
+ 37, 49, 50, 51, 37, 52, 53, 54,
+ 37, 37, 37, 37, 41, 56, 57, 58,
+ 60, 37, 41, 42, 43, 44, 37, 37,
+ 37, 37, 37, 37, 37, 50, 51, 37,
+ 52, 53, 54, 37, 37, 37, 37, 41,
+ 56, 57, 58, 60, 37, 41, 42, 43,
+ 44, 37, 37, 37, 37, 37, 37, 37,
+ 37, 51, 37, 52, 53, 54, 37, 37,
+ 37, 37, 41, 56, 57, 58, 60, 37,
+ 40, 41, 42, 43, 44, 37, 46, 40,
+ 37, 37, 37, 49, 50, 51, 37, 52,
+ 53, 54, 37, 37, 37, 37, 41, 56,
+ 57, 58, 60, 37, 40, 41, 42, 43,
+ 44, 37, 37, 40, 37, 37, 37, 49,
+ 50, 51, 37, 52, 53, 54, 37, 37,
+ 37, 37, 41, 56, 57, 58, 60, 37,
+ 40, 41, 42, 43, 44, 45, 46, 40,
+ 37, 37, 37, 49, 50, 51, 37, 52,
+ 53, 54, 37, 37, 37, 37, 41, 56,
+ 57, 58, 60, 37, 38, 39, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 40,
+ 41, 42, 43, 44, 45, 46, 40, 47,
+ 37, 48, 49, 50, 51, 37, 52, 53,
+ 54, 37, 37, 37, 37, 55, 56, 57,
+ 58, 39, 37, 38, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 41, 42, 43, 44, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 59, 52,
+ 53, 54, 59, 59, 59, 59, 59, 56,
+ 57, 58, 60, 59, 64, 63, 6, 65,
+ 38, 39, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 40, 41, 42, 43, 44,
+ 45, 46, 40, 47, 4, 48, 49, 50,
+ 51, 37, 52, 53, 54, 37, 11, 66,
+ 37, 55, 56, 57, 58, 39, 37, 11,
+ 66, 67, 66, 67, 1, 69, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 12,
+ 13, 14, 15, 16, 17, 18, 12, 19,
+ 21, 21, 22, 23, 24, 68, 25, 26,
+ 27, 68, 68, 68, 68, 31, 32, 33,
+ 34, 69, 68, 12, 13, 14, 15, 16,
+ 68, 68, 68, 68, 68, 68, 22, 23,
+ 24, 68, 25, 26, 27, 68, 68, 68,
+ 68, 13, 32, 33, 34, 70, 68, 13,
+ 14, 15, 16, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 25, 26, 27,
+ 68, 68, 68, 68, 68, 32, 33, 34,
+ 70, 68, 14, 15, 16, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 32,
+ 33, 34, 68, 15, 16, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 32,
+ 33, 34, 68, 16, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 32, 33,
+ 34, 68, 32, 33, 68, 33, 68, 14,
+ 15, 16, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 25, 26, 27, 68,
+ 68, 68, 68, 68, 32, 33, 34, 70,
+ 68, 14, 15, 16, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 26,
+ 27, 68, 68, 68, 68, 68, 32, 33,
+ 34, 70, 68, 14, 15, 16, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 27, 68, 68, 68, 68, 68,
+ 32, 33, 34, 70, 68, 14, 15, 16,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 32, 33, 34, 70, 68, 13,
+ 14, 15, 16, 68, 68, 68, 68, 68,
+ 68, 22, 23, 24, 68, 25, 26, 27,
+ 68, 68, 68, 68, 13, 32, 33, 34,
+ 70, 68, 13, 14, 15, 16, 68, 68,
+ 68, 68, 68, 68, 68, 23, 24, 68,
+ 25, 26, 27, 68, 68, 68, 68, 13,
+ 32, 33, 34, 70, 68, 13, 14, 15,
+ 16, 68, 68, 68, 68, 68, 68, 68,
+ 68, 24, 68, 25, 26, 27, 68, 68,
+ 68, 68, 13, 32, 33, 34, 70, 68,
+ 12, 13, 14, 15, 16, 68, 18, 12,
+ 68, 68, 68, 22, 23, 24, 68, 25,
+ 26, 27, 68, 68, 68, 68, 13, 32,
+ 33, 34, 70, 68, 12, 13, 14, 15,
+ 16, 68, 68, 12, 68, 68, 68, 22,
+ 23, 24, 68, 25, 26, 27, 68, 68,
+ 68, 68, 13, 32, 33, 34, 70, 68,
+ 12, 13, 14, 15, 16, 17, 18, 12,
+ 68, 68, 68, 22, 23, 24, 68, 25,
+ 26, 27, 68, 68, 68, 68, 13, 32,
+ 33, 34, 70, 68, 1, 69, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 12,
+ 13, 14, 15, 16, 17, 18, 12, 19,
+ 68, 21, 22, 23, 24, 68, 25, 26,
+ 27, 68, 68, 68, 68, 31, 32, 33,
+ 34, 69, 68, 1, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68,
+ 68, 13, 14, 15, 16, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 25,
+ 26, 27, 68, 68, 68, 68, 68, 32,
+ 33, 34, 70, 68, 1, 71, 72, 68,
+ 9, 68, 4, 68, 68, 68, 4, 68,
+ 68, 68, 68, 68, 1, 69, 9, 68,
+ 68, 68, 68, 68, 68, 68, 68, 12,
+ 13, 14, 15, 16, 17, 18, 12, 19,
+ 20, 21, 22, 23, 24, 68, 25, 26,
+ 27, 68, 28, 29, 68, 31, 32, 33,
+ 34, 69, 68, 1, 69, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 12, 13,
+ 14, 15, 16, 17, 18, 12, 19, 20,
+ 21, 22, 23, 24, 68, 25, 26, 27,
+ 68, 68, 68, 68, 31, 32, 33, 34,
+ 69, 68, 28, 29, 68, 29, 68, 4,
+ 71, 71, 71, 4, 71, 74, 73, 35,
+ 73, 35, 74, 73, 74, 73, 35, 73,
+ 36, 73, 0
};
-static const signed char _use_syllable_machine_cond_targs[] = {
- 2, 31, 42, 2, 2, 3, 2, 26,
- 28, 51, 52, 54, 29, 32, 33, 34,
- 35, 36, 46, 47, 48, 55, 49, 43,
- 44, 45, 39, 40, 41, 56, 57, 58,
- 50, 37, 38, 2, 59, 61, 2, 4,
- 5, 6, 7, 8, 9, 10, 21, 22,
- 23, 24, 18, 19, 20, 13, 14, 15,
- 25, 11, 12, 2, 2, 16, 2, 17,
- 2, 27, 2, 30, 2, 2, 0, 1,
- 2, 53, 2, 60, 0
+static const char _use_syllable_machine_trans_targs[] = {
+ 2, 31, 42, 2, 3, 2, 26, 28,
+ 51, 52, 54, 29, 32, 33, 34, 35,
+ 36, 46, 47, 48, 55, 49, 43, 44,
+ 45, 39, 40, 41, 56, 57, 58, 50,
+ 37, 38, 2, 59, 61, 2, 4, 5,
+ 6, 7, 8, 9, 10, 21, 22, 23,
+ 24, 18, 19, 20, 13, 14, 15, 25,
+ 11, 12, 2, 2, 16, 2, 17, 2,
+ 27, 2, 30, 2, 2, 0, 1, 2,
+ 53, 2, 60
};
-static const signed char _use_syllable_machine_cond_actions[] = {
- 1, 2, 2, 0, 5, 0, 6, 0,
- 0, 0, 0, 2, 0, 2, 2, 0,
- 0, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 0, 0, 0,
- 2, 0, 0, 7, 0, 0, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 9, 10, 0, 11, 0,
- 12, 0, 13, 0, 14, 15, 0, 0,
- 16, 0, 17, 0, 0
+static const char _use_syllable_machine_trans_actions[] = {
+ 1, 2, 2, 5, 0, 6, 0, 0,
+ 0, 0, 2, 0, 2, 2, 0, 0,
+ 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 0, 0, 0, 2,
+ 0, 0, 7, 0, 0, 8, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 10, 0, 11, 0, 12,
+ 0, 13, 0, 14, 15, 0, 0, 16,
+ 0, 17, 0
};
-static const signed char _use_syllable_machine_to_state_actions[] = {
- 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0
+static const char _use_syllable_machine_to_state_actions[] = {
+ 0, 0, 3, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
};
-static const signed char _use_syllable_machine_from_state_actions[] = {
- 0, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0
+static const char _use_syllable_machine_from_state_actions[] = {
+ 0, 0, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
};
-static const signed char _use_syllable_machine_eof_trans[] = {
- 1, 1, 4, 39, 39, 61, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 63, 39, 39, 39, 39, 39, 39, 39,
- 39, 61, 65, 67, 39, 69, 69, 70,
- 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 73, 70, 70, 70, 70,
- 70, 70, 73, 75, 75, 75, 0
+static const short _use_syllable_machine_eof_trans[] = {
+ 1, 1, 0, 38, 38, 60, 38, 38,
+ 38, 38, 38, 38, 38, 38, 38, 38,
+ 62, 38, 38, 38, 38, 38, 38, 38,
+ 38, 60, 64, 66, 38, 68, 68, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 72, 69, 69, 69, 69,
+ 69, 69, 72, 74, 74, 74
};
static const int use_syllable_machine_start = 2;
@@ -360,49 +373,49 @@ static const int use_syllable_machine_en_main = 2;
#define found_syllable(syllable_type) \
-HB_STMT_START { \
- if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
- for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
- info[i].syllable() = (syllable_serial << 4) | syllable_type; \
- syllable_serial++; \
- if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
- } HB_STMT_END
+ HB_STMT_START { \
+ if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
+ for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
+ info[i].syllable() = (syllable_serial << 4) | syllable_type; \
+ syllable_serial++; \
+ if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
+ } HB_STMT_END
template <typename Iter>
struct machine_index_t :
-hb_iter_with_fallback_t<machine_index_t<Iter>,
-typename Iter::item_t>
+ hb_iter_with_fallback_t<machine_index_t<Iter>,
+ typename Iter::item_t>
{
- machine_index_t (const Iter& it) : it (it) {}
- machine_index_t (const machine_index_t& o) : it (o.it) {}
-
- static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
- static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
-
- typename Iter::item_t __item__ () const { return *it; }
- typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
- unsigned __len__ () const { return it.len (); }
- void __next__ () { ++it; }
- void __forward__ (unsigned n) { it += n; }
- void __prev__ () { --it; }
- void __rewind__ (unsigned n) { it -= n; }
- void operator = (unsigned n)
- { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; }
- void operator = (const machine_index_t& o) { *this = (*o.it).first; }
- bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; }
- bool operator != (const machine_index_t& o) const { return !(*this == o); }
-
- private:
- Iter it;
+ machine_index_t (const Iter& it) : it (it) {}
+ machine_index_t (const machine_index_t& o) : it (o.it) {}
+
+ static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
+ static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
+
+ typename Iter::item_t __item__ () const { return *it; }
+ typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; }
+ unsigned __len__ () const { return it.len (); }
+ void __next__ () { ++it; }
+ void __forward__ (unsigned n) { it += n; }
+ void __prev__ () { --it; }
+ void __rewind__ (unsigned n) { it -= n; }
+ void operator = (unsigned n)
+ { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; }
+ void operator = (const machine_index_t& o) { *this = (*o.it).first; }
+ bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; }
+ bool operator != (const machine_index_t& o) const { return !(*this == o); }
+
+ private:
+ Iter it;
};
struct
{
- template <typename Iter,
- hb_requires (hb_is_iterable (Iter))>
- machine_index_t<hb_iter_type<Iter>>
- operator () (Iter&& it) const
- { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
+ template <typename Iter,
+ hb_requires (hb_is_iterable (Iter))>
+ machine_index_t<hb_iter_type<Iter>>
+ operator () (Iter&& it) const
+ { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
}
HB_FUNCOBJ (machine_index);
@@ -415,313 +428,162 @@ not_standard_default_ignorable (const hb_glyph_info_t &i)
static inline void
find_syllables_use (hb_buffer_t *buffer)
{
- hb_glyph_info_t *info = buffer->info;
- auto p =
- + hb_iter (info, buffer->len)
- | hb_enumerate
- | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); },
- hb_second)
- | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
+ hb_glyph_info_t *info = buffer->info;
+ auto p =
+ + hb_iter (info, buffer->len)
+ | hb_enumerate
+ | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); },
+ hb_second)
+ | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
+ {
+ if (p.second.use_category() == USE(ZWNJ))
+ for (unsigned i = p.first + 1; i < buffer->len; ++i)
+ if (not_standard_default_ignorable (info[i]))
+ return !_hb_glyph_info_is_unicode_mark (&info[i]);
+ return true;
+ })
+ | hb_enumerate
+ | machine_index
+ ;
+ auto pe = p + p.len ();
+ auto eof = +pe;
+ auto ts = +p;
+ auto te = +p;
+ unsigned int act HB_UNUSED;
+ int cs;
+
+#line 456 "hb-ot-shape-complex-use-machine.hh"
{
- if (p.second.use_category() == USE(ZWNJ))
- for (unsigned i = p.first + 1; i < buffer->len; ++i)
- if (not_standard_default_ignorable (info[i]))
- return !_hb_glyph_info_is_unicode_mark (&info[i]);
- return true;
- })
- | hb_enumerate
- | machine_index
- ;
- auto pe = p + p.len ();
- auto eof = +pe;
- auto ts = +p;
- auto te = +p;
- unsigned int act HB_UNUSED;
- int cs;
-
-#line 443 "hb-ot-shape-complex-use-machine.hh"
- {
- cs = (int)use_syllable_machine_start;
- ts = 0;
- te = 0;
+ cs = use_syllable_machine_start;
+ ts = 0;
+ te = 0;
+ act = 0;
}
-
+
#line 260 "hb-ot-shape-complex-use-machine.rl"
-
-
- unsigned int syllable_serial = 1;
-
-#line 455 "hb-ot-shape-complex-use-machine.hh"
+
+
+ unsigned int syllable_serial = 1;
+
+#line 469 "hb-ot-shape-complex-use-machine.hh"
{
- unsigned int _trans = 0;
- const unsigned char * _keys;
- const signed char * _inds;
- int _ic;
- _resume: {}
- if ( p == pe && p != eof )
- goto _out;
- switch ( _use_syllable_machine_from_state_actions[cs] ) {
- case 4: {
- {
+ int _slen;
+ int _trans;
+ const unsigned char *_keys;
+ const char *_inds;
+ if ( p == pe )
+ goto _test_eof;
+_resume:
+ switch ( _use_syllable_machine_from_state_actions[cs] ) {
+ case 4:
#line 1 "NONE"
- {ts = p;}}
-
-#line 470 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- }
-
- if ( p == eof ) {
- if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
- _trans = (unsigned int)_use_syllable_machine_eof_trans[cs] - 1;
- }
- }
- else {
- _keys = ( _use_syllable_machine_trans_keys + ((cs<<1)));
- _inds = ( _use_syllable_machine_indicies + (_use_syllable_machine_index_offsets[cs]));
-
- if ( ((*p).second.second.use_category()) <= 52 ) {
- _ic = (int)_use_syllable_machine_char_class[(int)((*p).second.second.use_category()) - 0];
- if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) )
- _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) ));
- else
- _trans = (unsigned int)_use_syllable_machine_index_defaults[cs];
- }
- else {
- _trans = (unsigned int)_use_syllable_machine_index_defaults[cs];
- }
-
- }
- cs = (int)_use_syllable_machine_cond_targs[_trans];
-
- if ( _use_syllable_machine_cond_actions[_trans] != 0 ) {
-
- switch ( _use_syllable_machine_cond_actions[_trans] ) {
- case 2: {
- {
+ {ts = p;}
+ break;
+#line 483 "hb-ot-shape-complex-use-machine.hh"
+ }
+
+ _keys = _use_syllable_machine_trans_keys + (cs<<1);
+ _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
+
+ _slen = _use_syllable_machine_key_spans[cs];
+ _trans = _inds[ _slen > 0 && _keys[0] <=( (*p).second.second.use_category()) &&
+ ( (*p).second.second.use_category()) <= _keys[1] ?
+ ( (*p).second.second.use_category()) - _keys[0] : _slen ];
+
+_eof_trans:
+ cs = _use_syllable_machine_trans_targs[_trans];
+
+ if ( _use_syllable_machine_trans_actions[_trans] == 0 )
+ goto _again;
+
+ switch ( _use_syllable_machine_trans_actions[_trans] ) {
+ case 2:
#line 1 "NONE"
- {te = p+1;}}
-
-#line 508 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 5: {
- {
+ {te = p+1;}
+ break;
+ case 5:
#line 163 "hb-ot-shape-complex-use-machine.rl"
- {te = p+1;{
-#line 163 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_independent_cluster); }
- }}
-
-#line 521 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 9: {
- {
-#line 166 "hb-ot-shape-complex-use-machine.rl"
- {te = p+1;{
+ {te = p+1;{ found_syllable (use_independent_cluster); }}
+ break;
+ case 9:
#line 166 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_standard_cluster); }
- }}
-
-#line 534 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 7: {
- {
+ {te = p+1;{ found_syllable (use_standard_cluster); }}
+ break;
+ case 7:
#line 171 "hb-ot-shape-complex-use-machine.rl"
- {te = p+1;{
-#line 171 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_broken_cluster); }
- }}
-
-#line 547 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 6: {
- {
-#line 172 "hb-ot-shape-complex-use-machine.rl"
- {te = p+1;{
+ {te = p+1;{ found_syllable (use_broken_cluster); }}
+ break;
+ case 6:
#line 172 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_non_cluster); }
- }}
-
-#line 560 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 10: {
- {
+ {te = p+1;{ found_syllable (use_non_cluster); }}
+ break;
+ case 10:
#line 164 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
-#line 164 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_virama_terminated_cluster); }
- }}
-
-#line 573 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 11: {
- {
-#line 165 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
+ break;
+ case 11:
#line 165 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_sakot_terminated_cluster); }
- }}
-
-#line 586 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 8: {
- {
+ {te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
+ break;
+ case 8:
#line 166 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
-#line 166 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_standard_cluster); }
- }}
-
-#line 599 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 13: {
- {
-#line 167 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (use_standard_cluster); }}
+ break;
+ case 13:
#line 167 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_number_joiner_terminated_cluster); }
- }}
-
-#line 612 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 12: {
- {
-#line 168 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
+ break;
+ case 12:
#line 168 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_numeral_cluster); }
- }}
-
-#line 625 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 14: {
- {
+ {te = p;p--;{ found_syllable (use_numeral_cluster); }}
+ break;
+ case 14:
#line 169 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
-#line 169 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_symbol_cluster); }
- }}
-
-#line 638 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 17: {
- {
-#line 170 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (use_symbol_cluster); }}
+ break;
+ case 17:
#line 170 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_hieroglyph_cluster); }
- }}
-
-#line 651 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 15: {
- {
+ {te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
+ break;
+ case 15:
#line 171 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
-#line 171 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_broken_cluster); }
- }}
-
-#line 664 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 16: {
- {
-#line 172 "hb-ot-shape-complex-use-machine.rl"
- {te = p;p = p - 1;{
+ {te = p;p--;{ found_syllable (use_broken_cluster); }}
+ break;
+ case 16:
#line 172 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_non_cluster); }
- }}
-
-#line 677 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- case 1: {
- {
+ {te = p;p--;{ found_syllable (use_non_cluster); }}
+ break;
+ case 1:
#line 171 "hb-ot-shape-complex-use-machine.rl"
- {p = ((te))-1;
- {
-#line 171 "hb-ot-shape-complex-use-machine.rl"
- found_syllable (use_broken_cluster); }
- }}
-
-#line 691 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- }
-
- }
-
- if ( p == eof ) {
- if ( cs >= 2 )
- goto _out;
- }
- else {
- switch ( _use_syllable_machine_to_state_actions[cs] ) {
- case 3: {
- {
+ {{p = ((te))-1;}{ found_syllable (use_broken_cluster); }}
+ break;
+#line 561 "hb-ot-shape-complex-use-machine.hh"
+ }
+
+_again:
+ switch ( _use_syllable_machine_to_state_actions[cs] ) {
+ case 3:
#line 1 "NONE"
- {ts = 0;}}
-
-#line 711 "hb-ot-shape-complex-use-machine.hh"
-
-
- break;
- }
- }
-
- p += 1;
- goto _resume;
- }
- _out: {}
+ {ts = 0;}
+ break;
+#line 570 "hb-ot-shape-complex-use-machine.hh"
+ }
+
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
+ if ( p == eof )
+ {
+ if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
+ _trans = _use_syllable_machine_eof_trans[cs] - 1;
+ goto _eof_trans;
+ }
}
-
+
+ }
+
#line 265 "hb-ot-shape-complex-use-machine.rl"
-
+
}
#undef found_syllable
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
index a35894ce81..7903a0ef89 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh
@@ -6,14 +6,14 @@
*
* on files with these headers:
*
- * # IndicSyllabicCategory-13.0.0.txt
- * # Date: 2019-07-22, 19:55:00 GMT [KW, RP]
- * # IndicPositionalCategory-13.0.0.txt
- * # Date: 2019-07-23, 00:01:00 GMT [KW, RP]
- * # ArabicShaping-13.0.0.txt
- * # Date: 2020-01-31, 23:55:00 GMT [KW, RP]
- * # Blocks-13.0.0.txt
- * # Date: 2019-07-10, 19:06:00 GMT [KW]
+ * # IndicSyllabicCategory-14.0.0.txt
+ * # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
+ * # IndicPositionalCategory-14.0.0.txt
+ * # Date: 2021-05-22, 01:01:00 GMT [KW, RP]
+ * # ArabicShaping-14.0.0.txt
+ * # Date: 2021-05-21, 01:54:00 GMT [KW, RP]
+ * # Blocks-14.0.0.txt
+ * # Date: 2021-01-22, 23:29:00 GMT [KW]
* # Override values For Indic_Syllabic_Category
* # Not derivable
* # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17
@@ -199,7 +199,7 @@ static const uint8_t use_table[] = {
/* 0C00 */ VMAbv, VMPst, VMPst, VMPst, VMAbv, B, B, B, B, B, B, B, B, O, B, B,
/* 0C10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0C20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B,
- /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, VAbv, VAbv,
+ /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, CMBlw, B, VAbv, VAbv,
/* 0C40 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O,
/* 0C50 */ O, O, O, O, O, VAbv, VBlw, O, B, B, B, O, O, O, O, O,
/* 0C60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
@@ -278,13 +278,13 @@ static const uint8_t use_table[] = {
/* Tagalog */
- /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B,
- /* 1710 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O,
+ /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 1710 */ B, B, VAbv, VBlw, VBlw, VPst, O, O, O, O, O, O, O, O, O, B,
/* Hanunoo */
/* 1720 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* 1730 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O,
+ /* 1730 */ B, B, VAbv, VBlw, VPst, O, O, O, O, O, O, O, O, O, O, O,
/* Buhid */
@@ -374,7 +374,7 @@ static const uint8_t use_table[] = {
/* 1B10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1B30 */ B, B, B, B, CMAbv, VPst, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VPre,
- /* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, O, O, O, O,
+ /* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, B, O, O, O,
/* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB,
/* 1B60 */ O, S, GB, S, S, S, S, S, GB, S, S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv,
/* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv, O, O, O, O, O, O, O, O, O, O, O, O,
@@ -630,7 +630,7 @@ static const uint8_t use_table[] = {
/* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, HVM, O, O, O, O, O, O, O, O, O,
/* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N,
/* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B,
- /* 11070 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, HN,
+ /* 11070 */ VAbv, B, B, VAbv, VAbv, B, O, O, O, O, O, O, O, O, O, HN,
/* Kaithi */
@@ -638,8 +638,9 @@ static const uint8_t use_table[] = {
/* 11090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O,
+ /* 110C0 */ O, O, VBlw, O, O, O, O, O,
-#define use_offset_0x11100u 4608
+#define use_offset_0x11100u 4616
/* Chakma */
@@ -677,7 +678,7 @@ static const uint8_t use_table[] = {
/* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw,
/* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O,
-#define use_offset_0x11280u 4928
+#define use_offset_0x11280u 4936
/* Multani */
@@ -705,7 +706,7 @@ static const uint8_t use_table[] = {
/* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
/* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
-#define use_offset_0x11400u 5176
+#define use_offset_0x11400u 5184
/* Newa */
@@ -728,7 +729,7 @@ static const uint8_t use_table[] = {
/* 114C0 */ VMAbv, VMAbv, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O,
/* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x11580u 5400
+#define use_offset_0x11580u 5408
/* Siddham */
@@ -770,8 +771,9 @@ static const uint8_t use_table[] = {
/* 11710 */ B, B, B, B, B, B, B, B, B, B, B, O, O, MBlw, MPre, MAbv,
/* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O,
/* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O,
+ /* 11740 */ B, B, B, B, B, B, B, O,
-#define use_offset_0x11800u 5848
+#define use_offset_0x11800u 5864
/* Dogra */
@@ -781,7 +783,7 @@ static const uint8_t use_table[] = {
/* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPre, VPst, VBlw,
/* 11830 */ VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VMAbv, VMPst, H, CMBlw, O, O, O, O, O,
-#define use_offset_0x11900u 5912
+#define use_offset_0x11900u 5928
/* Dives Akuru */
@@ -793,7 +795,7 @@ static const uint8_t use_table[] = {
/* 11940 */ MPst, R, MPst, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O,
/* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x119a0u 6008
+#define use_offset_0x119a0u 6024
/* Nandinagari */
@@ -821,7 +823,7 @@ static const uint8_t use_table[] = {
/* 11A80 */ B, B, B, B, R, R, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw,
/* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, B, O, O,
-#define use_offset_0x11c00u 6264
+#define use_offset_0x11c00u 6280
/* Bhaiksuki */
@@ -842,7 +844,7 @@ static const uint8_t use_table[] = {
/* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O,
-#define use_offset_0x11d00u 6448
+#define use_offset_0x11d00u 6464
/* Masaram Gondi */
@@ -862,7 +864,7 @@ static const uint8_t use_table[] = {
/* 11D90 */ VAbv, VAbv, O, VPst, VPst, VMAbv, VMPst, H, O, O, O, O, O, O, O, O,
/* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x11ee0u 6624
+#define use_offset_0x11ee0u 6640
/* Makasar */
@@ -870,7 +872,7 @@ static const uint8_t use_table[] = {
/* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O,
-#define use_offset_0x13000u 6648
+#define use_offset_0x13000u 6664
/* Egyptian Hieroglyphs */
@@ -947,7 +949,7 @@ static const uint8_t use_table[] = {
/* 13430 */ J, J, J, J, J, J, J, SB, SE, O, O, O, O, O, O, O,
-#define use_offset_0x16b00u 7736
+#define use_offset_0x16b00u 7752
/* Pahawh Hmong */
@@ -957,7 +959,7 @@ static const uint8_t use_table[] = {
/* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O,
-#define use_offset_0x16f00u 7792
+#define use_offset_0x16f00u 7808
/* Miao */
@@ -973,14 +975,14 @@ static const uint8_t use_table[] = {
/* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw,
/* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O,
-#define use_offset_0x16fe0u 7944
+#define use_offset_0x16fe0u 7960
/* Ideographic Symbols and Punctuation */
/* 16FE0 */ O, O, O, O, B, O, O, O,
-#define use_offset_0x18b00u 7952
+#define use_offset_0x18b00u 7968
/* Khitan Small Script */
@@ -1016,7 +1018,7 @@ static const uint8_t use_table[] = {
/* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 18CD0 */ B, B, B, B, B, B, O, O,
-#define use_offset_0x1bc00u 8424
+#define use_offset_0x1bc00u 8440
/* Duployan */
@@ -1032,7 +1034,7 @@ static const uint8_t use_table[] = {
/* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O,
/* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O,
-#define use_offset_0x1e100u 8584
+#define use_offset_0x1e100u 8600
/* Nyiakeng Puachue Hmong */
@@ -1043,7 +1045,7 @@ static const uint8_t use_table[] = {
/* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O,
/* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B,
-#define use_offset_0x1e2c0u 8664
+#define use_offset_0x1e2c0u 8680
/* Wancho */
@@ -1053,7 +1055,7 @@ static const uint8_t use_table[] = {
/* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv,
/* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x1e900u 8728
+#define use_offset_0x1e900u 8744
/* Adlam */
@@ -1065,7 +1067,7 @@ static const uint8_t use_table[] = {
/* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O,
/* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-}; /* Table items: 8824; occupancy: 79% */
+}; /* Table items: 8840; occupancy: 79% */
static inline uint8_t
hb_use_get_category (hb_codepoint_t u)
@@ -1111,15 +1113,15 @@ hb_use_get_category (hb_codepoint_t u)
if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D3Fu)) return use_table[u - 0x10D00u + use_offset_0x10d00u];
if (hb_in_range<hb_codepoint_t> (u, 0x10E80u, 0x10EB7u)) return use_table[u - 0x10E80u + use_offset_0x10e80u];
if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F57u)) return use_table[u - 0x10F30u + use_offset_0x10f30u];
- if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
break;
case 0x11u:
- if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u];
if (hb_in_range<hb_codepoint_t> (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
- if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x11747u)) return use_table[u - 0x11580u + use_offset_0x11580u];
if (hb_in_range<hb_codepoint_t> (u, 0x11800u, 0x1183Fu)) return use_table[u - 0x11800u + use_offset_0x11800u];
if (hb_in_range<hb_codepoint_t> (u, 0x11900u, 0x1195Fu)) return use_table[u - 0x11900u + use_offset_0x11900u];
if (hb_in_range<hb_codepoint_t> (u, 0x119A0u, 0x11A9Fu)) return use_table[u - 0x119A0u + use_offset_0x119a0u];
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
index 0d0b7e771e..1e4804c4a2 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc
@@ -47,7 +47,8 @@ use_basic_features[] =
{
/*
* Basic features.
- * These features are applied all at once, before reordering.
+ * These features are applied all at once, before reordering, constrained
+ * to the syllable.
*/
HB_TAG('r','k','r','f'),
HB_TAG('a','b','v','f'),
@@ -154,7 +155,7 @@ struct use_shape_plan_t
static void *
data_create_use (const hb_ot_shape_plan_t *plan)
{
- use_shape_plan_t *use_plan = (use_shape_plan_t *) calloc (1, sizeof (use_shape_plan_t));
+ use_shape_plan_t *use_plan = (use_shape_plan_t *) hb_calloc (1, sizeof (use_shape_plan_t));
if (unlikely (!use_plan))
return nullptr;
@@ -165,7 +166,7 @@ data_create_use (const hb_ot_shape_plan_t *plan)
use_plan->arabic_plan = (arabic_shape_plan_t *) data_create_arabic (plan);
if (unlikely (!use_plan->arabic_plan))
{
- free (use_plan);
+ hb_free (use_plan);
return nullptr;
}
}
@@ -181,7 +182,7 @@ data_destroy_use (void *data)
if (use_plan->arabic_plan)
data_destroy_arabic (use_plan->arabic_plan);
- free (data);
+ hb_free (data);
}
static void
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
index 1037626998..045731dfb4 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
@@ -10,8 +10,8 @@
* # Date: 2015-03-12, 21:17:00 GMT [AG]
* # Date: 2019-11-08, 23:22:00 GMT [AG]
*
- * # Scripts-13.0.0.txt
- * # Date: 2020-01-22, 00:07:43 GMT
+ * # Scripts-14.0.0.txt
+ * # Date: 2021-07-10, 00:35:31 GMT
*/
#include "hb.hh"
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh
index 19e24b9f30..8012a9ae94 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh
@@ -373,6 +373,15 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
/* Unicode-13.0 additions */
case HB_SCRIPT_CHORASMIAN:
case HB_SCRIPT_DIVES_AKURU:
+ case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
+ case HB_SCRIPT_YEZIDI:
+
+ /* Unicode-14.0 additions */
+ case HB_SCRIPT_CYPRO_MINOAN:
+ case HB_SCRIPT_OLD_UYGHUR:
+ case HB_SCRIPT_TANGSA:
+ case HB_SCRIPT_TOTO:
+ case HB_SCRIPT_VITHKUQI:
/* If the designer designed the font for the 'DFLT' script,
* (or we ended up arbitrarily pick 'latn'), use the default shaper.
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
index 7d00a35ab9..eb1bc79768 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
@@ -92,7 +92,7 @@ recategorize_combining_class (hb_codepoint_t u,
case HB_MODIFIED_COMBINING_CLASS_CCC15: /* tsere */
case HB_MODIFIED_COMBINING_CLASS_CCC16: /* segol */
case HB_MODIFIED_COMBINING_CLASS_CCC17: /* patah */
- case HB_MODIFIED_COMBINING_CLASS_CCC18: /* qamats */
+ case HB_MODIFIED_COMBINING_CLASS_CCC18: /* qamats & qamats qatan */
case HB_MODIFIED_COMBINING_CLASS_CCC20: /* qubuts */
case HB_MODIFIED_COMBINING_CLASS_CCC22: /* meteg */
return HB_UNICODE_COMBINING_CLASS_BELOW;
@@ -104,7 +104,7 @@ recategorize_combining_class (hb_codepoint_t u,
return HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
case HB_MODIFIED_COMBINING_CLASS_CCC25: /* sin dot */
- case HB_MODIFIED_COMBINING_CLASS_CCC19: /* holam */
+ case HB_MODIFIED_COMBINING_CLASS_CCC19: /* holam & holam haser for vav */
return HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT;
case HB_MODIFIED_COMBINING_CLASS_CCC26: /* point varika */
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.cc b/thirdparty/harfbuzz/src/hb-ot-shape.cc
index 86ab0b4268..0e215c24f7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape.cc
@@ -149,13 +149,17 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
* Decide who does positioning. GPOS, kerx, kern, or fallback.
*/
- if (0)
+#ifndef HB_NO_AAT_SHAPE
+ bool has_gsub = hb_ot_layout_has_substitution (face);
+#endif
+ bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
+ if (false)
;
#ifndef HB_NO_AAT_SHAPE
- else if (hb_aat_layout_has_positioning (face))
+ else if (hb_aat_layout_has_positioning (face) && !(has_gsub && has_gpos))
plan.apply_kerx = true;
#endif
- else if (!apply_morx && !disable_gpos && hb_ot_layout_has_positioning (face))
+ else if (!apply_morx && has_gpos)
plan.apply_gpos = true;
if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos))
@@ -172,6 +176,8 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
#endif
}
+ plan.apply_fallback_kern = !(plan.apply_gpos || plan.apply_kerx || plan.apply_kern);
+
plan.zero_marks = script_zero_marks &&
!plan.apply_kerx &&
(!plan.apply_kern
@@ -193,6 +199,12 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
script_fallback_mark_positioning;
#ifndef HB_NO_AAT_SHAPE
+ /* If we're using morx shaping, we cancel mark position adjustment because
+ Apple Color Emoji assumes this will NOT be done when forming emoji sequences;
+ https://github.com/harfbuzz/harfbuzz/issues/2967. */
+ if (plan.apply_morx)
+ plan.adjust_mark_positioning_when_zeroing = false;
+
/* Currently we always apply trak. */
plan.apply_trak = plan.requested_tracking && hb_aat_layout_has_tracking (face);
#endif
@@ -266,11 +278,12 @@ hb_ot_shape_plan_t::position (hb_font_t *font,
else if (this->apply_kerx)
hb_aat_layout_position (this, font, buffer);
#endif
+
#ifndef HB_NO_OT_KERN
- else if (this->apply_kern)
+ if (this->apply_kern)
hb_ot_layout_kern (this, font, buffer);
#endif
- else
+ else if (this->apply_fallback_kern)
_hb_ot_shape_fallback_kern (this, font, buffer);
#ifndef HB_NO_AAT_SHAPE
@@ -306,16 +319,17 @@ horizontal_features[] =
};
static void
-hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
- const hb_feature_t *user_features,
- unsigned int num_user_features)
+hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
+ const hb_feature_t *user_features,
+ unsigned int num_user_features)
{
hb_ot_map_builder_t *map = &planner->map;
map->enable_feature (HB_TAG('r','v','r','n'));
map->add_gsub_pause (nullptr);
- switch (planner->props.direction) {
+ switch (planner->props.direction)
+ {
case HB_DIRECTION_LTR:
map->enable_feature (HB_TAG ('l','t','r','a'));
map->enable_feature (HB_TAG ('l','t','r','m'));
@@ -348,12 +362,14 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
map->enable_feature (HB_TAG ('t','r','a','k'), F_HAS_FALLBACK);
#endif
- map->enable_feature (HB_TAG ('H','A','R','F'));
+ map->enable_feature (HB_TAG ('H','a','r','f')); /* Considered required. */
+ map->enable_feature (HB_TAG ('H','A','R','F')); /* Considered discretionary. */
if (planner->shaper->collect_features)
planner->shaper->collect_features (planner);
- map->enable_feature (HB_TAG ('B','U','Z','Z'));
+ map->enable_feature (HB_TAG ('B','u','z','z')); /* Considered required. */
+ map->enable_feature (HB_TAG ('B','U','Z','Z')); /* Considered discretionary. */
for (unsigned int i = 0; i < ARRAY_LENGTH (common_features); i++)
map->add_feature (common_features[i]);
@@ -363,6 +379,10 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
map->add_feature (horizontal_features[i]);
else
{
+ /* We only apply `vert` feature. See:
+ * https://github.com/harfbuzz/harfbuzz/commit/d71c0df2d17f4590d5611239577a6cb532c26528
+ * https://lists.freedesktop.org/archives/harfbuzz/2013-August/003490.html */
+
/* We really want to find a 'vert' feature if there's any in the font, no
* matter which script/langsys it is listed (or not) under.
* See various bugs referenced from:
@@ -478,6 +498,14 @@ hb_set_unicode_props (hb_buffer_t *buffer)
if (unlikely (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL &&
hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x1F3FBu, 0x1F3FFu)))
{
+ _hb_glyph_info_set_continuation (&info[i]);
+ }
+ /* Regional_Indicators are hairy as hell...
+ * https://github.com/harfbuzz/harfbuzz/issues/2265 */
+ else if (unlikely (i && hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x1F1E6u, 0x1F1FFu)))
+ {
+ if (hb_in_range<hb_codepoint_t> (info[i - 1].codepoint, 0x1F1E6u, 0x1F1FFu) &&
+ !_hb_glyph_info_is_continuation (&info[i - 1]))
_hb_glyph_info_set_continuation (&info[i]);
}
#ifndef HB_NO_EMOJI_SEQUENCES
@@ -535,6 +563,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
info.cluster = buffer->cur().cluster;
info.mask = buffer->cur().mask;
(void) buffer->output_info (info);
+
buffer->swap_buffers ();
}
@@ -558,6 +587,36 @@ hb_ensure_native_direction (hb_buffer_t *buffer)
hb_direction_t direction = buffer->props.direction;
hb_direction_t horiz_dir = hb_script_get_horizontal_direction (buffer->props.script);
+ /* Numeric runs in natively-RTL scripts are actually native-LTR, so we reset
+ * the horiz_dir if the run contains at least one decimal-number char, and no
+ * letter chars (ideally we should be checking for chars with strong
+ * directionality but hb-unicode currently lacks bidi categories).
+ *
+ * This allows digit sequences in Arabic etc to be shaped in "native"
+ * direction, so that features like ligatures will work as intended.
+ *
+ * https://github.com/harfbuzz/harfbuzz/issues/501
+ */
+ if (unlikely (horiz_dir == HB_DIRECTION_RTL && direction == HB_DIRECTION_LTR))
+ {
+ bool found_number = false, found_letter = false;
+ const auto* info = buffer->info;
+ const auto count = buffer->len;
+ for (unsigned i = 0; i < count; i++)
+ {
+ auto gc = _hb_glyph_info_get_general_category (&info[i]);
+ if (gc == HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
+ found_number = true;
+ else if (HB_UNICODE_GENERAL_CATEGORY_IS_LETTER (gc))
+ {
+ found_letter = true;
+ break;
+ }
+ }
+ if (found_number && !found_letter)
+ horiz_dir = HB_DIRECTION_LTR;
+ }
+
/* TODO vertical:
* The only BTT vertical script is Ogham, but it's not clear to me whether OpenType
* Ogham fonts are supposed to be implemented BTT or not. Need to research that
@@ -1111,8 +1170,6 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
_hb_buffer_allocate_unicode_vars (c->buffer);
- c->buffer->clear_output ();
-
hb_ot_shape_initialize_masks (c);
hb_set_unicode_props (c->buffer);
hb_insert_dotted_circle (c->buffer, c->font);
@@ -1122,7 +1179,8 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
hb_ensure_native_direction (c->buffer);
if (c->plan->shaper->preprocess_text &&
- c->buffer->message(c->font, "start preprocess-text")) {
+ c->buffer->message(c->font, "start preprocess-text"))
+ {
c->plan->shaper->preprocess_text (c->plan, c->buffer, c->font);
(void) c->buffer->message(c->font, "end preprocess-text");
}
@@ -1164,7 +1222,7 @@ _hb_ot_shape (hb_shape_plan_t *shape_plan,
* @lookup_indexes: (out): The #hb_set_t set of lookups returned
*
* Computes the complete set of GSUB or GPOS lookups that are applicable
- * under a given @shape_plan.
+ * under a given @shape_plan.
*
* Since: 0.9.7
**/
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.hh b/thirdparty/harfbuzz/src/hb-ot-shape.hh
index acc98772a9..e8c81015c7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape.hh
@@ -112,6 +112,7 @@ struct hb_ot_shape_plan_t
#else
static constexpr bool apply_kern = false;
#endif
+ bool apply_fallback_kern : 1;
#ifndef HB_NO_AAT_SHAPE
bool apply_kerx : 1;
bool apply_morx : 1;
diff --git a/thirdparty/harfbuzz/src/hb-ot-stat-table.hh b/thirdparty/harfbuzz/src/hb-ot-stat-table.hh
index 6aa4fa4492..41d1734b39 100644
--- a/thirdparty/harfbuzz/src/hb-ot-stat-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-stat-table.hh
@@ -297,7 +297,7 @@ struct STAT
unsigned int axis_index;
if (!get_design_axes ().lfind (tag, &axis_index)) return false;
- hb_array_t<const OffsetTo<AxisValue>> axis_values = get_axis_value_offsets ();
+ hb_array_t<const Offset16To<AxisValue>> axis_values = get_axis_value_offsets ();
for (unsigned int i = 0; i < axis_values.length; i++)
{
const AxisValue& axis_value = this+axis_values[i];
@@ -359,7 +359,7 @@ struct STAT
hb_array_t<const StatAxisRecord> const get_design_axes () const
{ return (this+designAxesOffset).as_array (designAxisCount); }
- hb_array_t<const OffsetTo<AxisValue>> const get_axis_value_offsets () const
+ hb_array_t<const Offset16To<AxisValue>> const get_axis_value_offsets () const
{ return (this+offsetToAxisValueOffsets).as_array (axisValueCount); }
@@ -373,7 +373,7 @@ struct STAT
* in the 'fvar' table. In all fonts, must
* be greater than zero if axisValueCount
* is greater than zero. */
- LNNOffsetTo<UnsizedArrayOf<StatAxisRecord>>
+ NNOffset32To<UnsizedArrayOf<StatAxisRecord>>
designAxesOffset;
/* Offset in bytes from the beginning of
* the STAT table to the start of the design
@@ -381,7 +381,7 @@ struct STAT
* set to zero; if designAxisCount is greater
* than zero, must be greater than zero. */
HBUINT16 axisValueCount; /* The number of axis value tables. */
- LNNOffsetTo<UnsizedArrayOf<OffsetTo<AxisValue>>>
+ NNOffset32To<UnsizedArrayOf<Offset16To<AxisValue>>>
offsetToAxisValueOffsets;
/* Offset in bytes from the beginning of
* the STAT table to the start of the design
diff --git a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
index 87830b5462..fc9bffc23f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
@@ -6,8 +6,8 @@
*
* on files with these headers:
*
- * <meta name="updated_at" content="2021-02-12 04:08 PM" />
- * File-Date: 2021-03-05
+ * <meta name="updated_at" content="2021-09-02 09:40 PM" />
+ * File-Date: 2021-08-06
*/
#ifndef HB_OT_TAG_TABLE_HH
@@ -93,6 +93,7 @@ static const LangTag ot_languages[] = {
{"auz", HB_TAG('A','R','A',' ')}, /* Uzbeki Arabic -> Arabic */
{"av", HB_TAG('A','V','R',' ')}, /* Avaric -> Avar */
{"avl", HB_TAG('A','R','A',' ')}, /* Eastern Egyptian Bedawi Arabic -> Arabic */
+/*{"avn", HB_TAG('A','V','N',' ')},*/ /* Avatime */
/*{"awa", HB_TAG('A','W','A',' ')},*/ /* Awadhi */
{"ay", HB_TAG('A','Y','M',' ')}, /* Aymara [macrolanguage] */
{"ayc", HB_TAG('A','Y','M',' ')}, /* Southern Aymara -> Aymara */
@@ -345,6 +346,7 @@ static const LangTag ot_languages[] = {
{"cth", HB_TAG('Q','I','N',' ')}, /* Thaiphum Chin -> Chin */
{"ctl", HB_TAG('C','C','H','N')}, /* Tlacoatzintepec Chinantec -> Chinantec */
{"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol -> Bikol */
+/*{"ctt", HB_TAG('C','T','T',' ')},*/ /* Wayanad Chetti */
{"ctu", HB_TAG('M','Y','N',' ')}, /* Chol -> Mayan */
{"cu", HB_TAG('C','S','L',' ')}, /* Church Slavonic */
{"cuc", HB_TAG('C','C','H','N')}, /* Usila Chinantec -> Chinantec */
@@ -537,23 +539,27 @@ static const LangTag ot_languages[] = {
{"ha", HB_TAG('H','A','U',' ')}, /* Hausa */
{"haa", HB_TAG('A','T','H',' ')}, /* Han -> Athapaskan */
{"hae", HB_TAG('O','R','O',' ')}, /* Eastern Oromo -> Oromo */
- {"hai", HB_TAG_NONE }, /* Haida [macrolanguage] != Haitian (Haitian Creole) */
+ {"hai", HB_TAG('H','A','I','0')}, /* Haida [macrolanguage] */
{"hak", HB_TAG('Z','H','S',' ')}, /* Hakka Chinese -> Chinese, Simplified */
{"hal", HB_TAG_NONE }, /* Halang != Halam (Falam Chin) */
{"har", HB_TAG('H','R','I',' ')}, /* Harari */
/*{"haw", HB_TAG('H','A','W',' ')},*/ /* Hawaiian */
+ {"hax", HB_TAG('H','A','I','0')}, /* Southern Haida -> Haida */
/*{"hay", HB_TAG('H','A','Y',' ')},*/ /* Haya */
/*{"haz", HB_TAG('H','A','Z',' ')},*/ /* Hazaragi */
{"hbn", HB_TAG_NONE }, /* Heiban != Hammer-Banna */
{"hca", HB_TAG('C','P','P',' ')}, /* Andaman Creole Hindi -> Creoles */
+ {"hdn", HB_TAG('H','A','I','0')}, /* Northern Haida -> Haida */
{"he", HB_TAG('I','W','R',' ')}, /* Hebrew */
{"hea", HB_TAG('H','M','N',' ')}, /* Northern Qiandong Miao -> Hmong */
+/*{"hei", HB_TAG('H','E','I',' ')},*/ /* Heiltsuk */
{"hi", HB_TAG('H','I','N',' ')}, /* Hindi */
/*{"hil", HB_TAG('H','I','L',' ')},*/ /* Hiligaynon */
{"hji", HB_TAG('M','L','Y',' ')}, /* Haji -> Malay */
{"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin -> Chin */
{"hma", HB_TAG('H','M','N',' ')}, /* Southern Mashan Hmong -> Hmong */
{"hmc", HB_TAG('H','M','N',' ')}, /* Central Huishui Hmong -> Hmong */
+ {"hmd", HB_TAG('H','M','D',' ')}, /* Large Flowery Miao -> A-Hmao */
{"hmd", HB_TAG('H','M','N',' ')}, /* Large Flowery Miao -> Hmong */
{"hme", HB_TAG('H','M','N',' ')}, /* Eastern Huishui Hmong -> Hmong */
{"hmg", HB_TAG('H','M','N',' ')}, /* Southwestern Guiyang Hmong -> Hmong */
@@ -569,6 +575,7 @@ static const LangTag ot_languages[] = {
{"hms", HB_TAG('H','M','N',' ')}, /* Southern Qiandong Miao -> Hmong */
{"hmw", HB_TAG('H','M','N',' ')}, /* Western Mashan Hmong -> Hmong */
{"hmy", HB_TAG('H','M','N',' ')}, /* Southern Guiyang Hmong -> Hmong */
+ {"hmz", HB_TAG('H','M','Z',' ')}, /* Hmong Shua -> Hmong Shuat */
{"hmz", HB_TAG('H','M','N',' ')}, /* Hmong Shua -> Hmong */
/*{"hnd", HB_TAG('H','N','D',' ')},*/ /* Southern Hindko -> Hindko */
{"hne", HB_TAG('C','H','H',' ')}, /* Chhattisgarhi -> Chattisgarhi */
@@ -625,6 +632,7 @@ static const LangTag ot_languages[] = {
{"inh", HB_TAG('I','N','G',' ')}, /* Ingush */
{"io", HB_TAG('I','D','O',' ')}, /* Ido */
{"iri", HB_TAG_NONE }, /* Rigwe != Irish */
+/*{"iru", HB_TAG('I','R','U',' ')},*/ /* Irula */
{"is", HB_TAG('I','S','L',' ')}, /* Icelandic */
{"ism", HB_TAG_NONE }, /* Masimasi != Inari Sami */
{"it", HB_TAG('I','T','A',' ')}, /* Italian */
@@ -660,6 +668,7 @@ static const LangTag ot_languages[] = {
{"kac", HB_TAG_NONE }, /* Kachin != Kachchi */
{"kam", HB_TAG('K','M','B',' ')}, /* Kamba (Kenya) */
{"kar", HB_TAG('K','R','N',' ')}, /* Karen [family] */
+/*{"kaw", HB_TAG('K','A','W',' ')},*/ /* Kawi (Old Javanese) */
{"kbd", HB_TAG('K','A','B',' ')}, /* Kabardian */
{"kby", HB_TAG('K','N','R',' ')}, /* Manga Kanuri -> Kanuri */
{"kca", HB_TAG('K','H','K',' ')}, /* Khanty -> Khanty-Kazim */
@@ -779,6 +788,7 @@ static const LangTag ot_languages[] = {
{"kvu", HB_TAG('K','R','N',' ')}, /* Yinbaw Karen -> Karen */
{"kvy", HB_TAG('K','R','N',' ')}, /* Yintale Karen -> Karen */
{"kw", HB_TAG('C','O','R',' ')}, /* Cornish */
+/*{"kwk", HB_TAG('K','W','K',' ')},*/ /* Kwakiutl -> Kwakʼwala */
{"kww", HB_TAG('C','P','P',' ')}, /* Kwinti -> Creoles */
{"kwy", HB_TAG('K','O','N','0')}, /* San Salvador Kongo -> Kongo */
{"kxc", HB_TAG('K','M','S',' ')}, /* Konso -> Komso */
@@ -806,6 +816,7 @@ static const LangTag ot_languages[] = {
{"lcf", HB_TAG('M','L','Y',' ')}, /* Lubu -> Malay */
{"ldi", HB_TAG('K','O','N','0')}, /* Laari -> Kongo */
{"ldk", HB_TAG_NONE }, /* Leelau != Ladakhi */
+/*{"lef", HB_TAG('L','E','F',' ')},*/ /* Lelemi */
/*{"lez", HB_TAG('L','E','Z',' ')},*/ /* Lezghian -> Lezgi */
{"lg", HB_TAG('L','U','G',' ')}, /* Ganda */
{"li", HB_TAG('L','I','M',' ')}, /* Limburgish */
@@ -832,6 +843,7 @@ static const LangTag ot_languages[] = {
{"lo", HB_TAG('L','A','O',' ')}, /* Lao */
/*{"lom", HB_TAG('L','O','M',' ')},*/ /* Loma (Liberia) */
{"lou", HB_TAG('C','P','P',' ')}, /* Louisiana Creole -> Creoles */
+/*{"lpo", HB_TAG('L','P','O',' ')},*/ /* Lipo */
/*{"lrc", HB_TAG('L','R','C',' ')},*/ /* Northern Luri -> Luri */
{"lri", HB_TAG('L','U','H',' ')}, /* Marachi -> Luyia */
{"lrm", HB_TAG('L','U','H',' ')}, /* Marama -> Luyia */
@@ -1231,6 +1243,7 @@ static const LangTag ot_languages[] = {
{"rbl", HB_TAG('B','I','K',' ')}, /* Miraya Bikol -> Bikol */
{"rcf", HB_TAG('C','P','P',' ')}, /* Réunion Creole French -> Creoles */
/*{"rej", HB_TAG('R','E','J',' ')},*/ /* Rejang */
+/*{"rhg", HB_TAG('R','H','G',' ')},*/ /* Rohingya */
/*{"ria", HB_TAG('R','I','A',' ')},*/ /* Riang (India) */
{"rif", HB_TAG('R','I','F',' ')}, /* Tarifit */
{"rif", HB_TAG('B','B','R',' ')}, /* Tarifit -> Berber */
@@ -1286,6 +1299,7 @@ static const LangTag ot_languages[] = {
{"sek", HB_TAG('A','T','H',' ')}, /* Sekani -> Athapaskan */
/*{"sel", HB_TAG('S','E','L',' ')},*/ /* Selkup */
{"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin -> Chin */
+ {"sfm", HB_TAG('S','F','M',' ')}, /* Small Flowery Miao */
{"sfm", HB_TAG('H','M','N',' ')}, /* Small Flowery Miao -> Hmong */
{"sg", HB_TAG('S','G','O',' ')}, /* Sango */
/*{"sga", HB_TAG('S','G','A',' ')},*/ /* Old Irish (to 900) */
@@ -1413,6 +1427,7 @@ static const LangTag ot_languages[] = {
{"tkg", HB_TAG('M','L','G',' ')}, /* Tesaka Malagasy -> Malagasy */
{"tkm", HB_TAG_NONE }, /* Takelma != Turkmen */
{"tl", HB_TAG('T','G','L',' ')}, /* Tagalog */
+/*{"tli", HB_TAG('T','L','I',' ')},*/ /* Tlingit */
{"tmg", HB_TAG('C','P','P',' ')}, /* Ternateño -> Creoles */
{"tmh", HB_TAG('T','M','H',' ')}, /* Tamashek [macrolanguage] */
{"tmh", HB_TAG('B','B','R',' ')}, /* Tamashek [macrolanguage] -> Berber */
@@ -1499,6 +1514,7 @@ static const LangTag ot_languages[] = {
{"wbm", HB_TAG('W','A',' ',' ')}, /* Wa */
{"wbr", HB_TAG('W','A','G',' ')}, /* Wagdi */
{"wbr", HB_TAG('R','A','J',' ')}, /* Wagdi -> Rajasthani */
+/*{"wci", HB_TAG('W','C','I',' ')},*/ /* Waci Gbe */
{"wea", HB_TAG('K','R','N',' ')}, /* Wewaw -> Karen */
{"wes", HB_TAG('C','P','P',' ')}, /* Cameroon Pidgin -> Creoles */
{"weu", HB_TAG('Q','I','N',' ')}, /* Rawngtu Chin -> Chin */
@@ -1533,6 +1549,8 @@ static const LangTag ot_languages[] = {
{"xsl", HB_TAG('S','L','A',' ')}, /* South Slavey -> Slavey */
{"xsl", HB_TAG('A','T','H',' ')}, /* South Slavey -> Athapaskan */
{"xst", HB_TAG('S','I','G',' ')}, /* Silt'e (retired code) -> Silte Gurage */
+/*{"xub", HB_TAG('X','U','B',' ')},*/ /* Betta Kurumba -> Bette Kuruma */
+/*{"xuj", HB_TAG('X','U','J',' ')},*/ /* Jennu Kurumba -> Jennu Kuruma */
{"xup", HB_TAG('A','T','H',' ')}, /* Upper Umpqua -> Athapaskan */
{"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat -> Todo */
{"yaj", HB_TAG('B','A','D','0')}, /* Banda-Yangere -> Banda */
@@ -1543,13 +1561,16 @@ static const LangTag ot_languages[] = {
{"ybb", HB_TAG('B','M','L',' ')}, /* Yemba -> Bamileke */
{"ybd", HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */
{"ydd", HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */
+/*{"ygp", HB_TAG('Y','G','P',' ')},*/ /* Gepo */
{"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */
{"yih", HB_TAG('J','I','I',' ')}, /* Western Yiddish -> Yiddish */
{"yim", HB_TAG_NONE }, /* Yimchungru Naga != Yi Modern */
+/*{"yna", HB_TAG('Y','N','A',' ')},*/ /* Aluo */
{"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */
{"yos", HB_TAG('Q','I','N',' ')}, /* Yos (retired code) -> Chin */
{"yua", HB_TAG('M','Y','N',' ')}, /* Yucateco -> Mayan */
{"yue", HB_TAG('Z','H','H',' ')}, /* Yue Chinese -> Chinese, Traditional, Hong Kong SAR */
+/*{"ywq", HB_TAG('Y','W','Q',' ')},*/ /* Wuding-Luquan Yi */
{"za", HB_TAG('Z','H','A',' ')}, /* Zhuang [macrolanguage] */
{"zch", HB_TAG('Z','H','A',' ')}, /* Central Hongshuihe Zhuang -> Zhuang */
{"zdj", HB_TAG('C','M','R',' ')}, /* Ngazidja Comorian -> Comorian */
diff --git a/thirdparty/harfbuzz/src/hb-ot-tag.cc b/thirdparty/harfbuzz/src/hb-ot-tag.cc
index fc145a41f7..1837063af8 100644
--- a/thirdparty/harfbuzz/src/hb-ot-tag.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-tag.cc
@@ -522,7 +522,7 @@ hb_ot_tags_to_script_and_language (hb_tag_t script_tag,
unsigned char *buf;
const char *lang_str = hb_language_to_string (*language);
size_t len = strlen (lang_str);
- buf = (unsigned char *) malloc (len + 16);
+ buf = (unsigned char *) hb_malloc (len + 16);
if (unlikely (!buf))
{
*language = nullptr;
@@ -544,7 +544,7 @@ hb_ot_tags_to_script_and_language (hb_tag_t script_tag,
for (shift = 28; shift >= 0; shift -= 4)
buf[len++] = TOHEX (script_tag >> shift);
*language = hb_language_from_string ((char *) buf, len);
- free (buf);
+ hb_free (buf);
}
}
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh
index 29219adb0a..65f26c1d22 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh
@@ -58,7 +58,7 @@ struct AxisValueMap
DEFINE_SIZE_STATIC (4);
};
-struct SegmentMaps : ArrayOf<AxisValueMap>
+struct SegmentMaps : Array16Of<AxisValueMap>
{
int map (int value, unsigned int from_offset = 0, unsigned int to_offset = 1) const
{
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
index f9e933fb2b..05f289db26 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
@@ -142,11 +142,13 @@ struct AxisRecord
max = hb_max (default_, maxValue / 65536.f);
}
- protected:
+ public:
Tag axisTag; /* Tag identifying the design variation for the axis. */
+ protected:
HBFixed minValue; /* The minimum coordinate value for the axis. */
HBFixed defaultValue; /* The default coordinate value for the axis. */
HBFixed maxValue; /* The maximum coordinate value for the axis. */
+ public:
HBUINT16 flags; /* Axis flags. */
NameID axisNameID; /* The name ID for entries in the 'name' table that
* provide a display name for this axis. */
@@ -214,7 +216,6 @@ struct fvar
return axes.lfind (tag, axis_index) && (axes[*axis_index].get_axis_deprecated (info), true);
}
#endif
-
bool
find_axis_info (hb_tag_t tag, hb_ot_var_axis_info_t *info) const
{
@@ -289,7 +290,7 @@ struct fvar
;
}
- protected:
+ public:
hb_array_t<const AxisRecord> get_axes () const
{ return hb_array (&(this+firstAxis), axisCount); }
@@ -303,7 +304,7 @@ struct fvar
protected:
FixedVersion<>version; /* Version of the fvar table
* initially set to 0x00010000u */
- OffsetTo<AxisRecord>
+ Offset16To<AxisRecord>
firstAxis; /* Offset in bytes from the beginning of the table
* to the start of the AxisRecord array. */
HBUINT16 reserved; /* This field is permanently reserved. Set to 2. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
index 7e4eaaad95..49b5532d40 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
@@ -374,7 +374,7 @@ struct GlyphVariationData
* low 12 bits are the number of tuple variation tables
* for this glyph. The number of tuple variation tables
* can be any number between 1 and 4095. */
- OffsetTo<HBUINT8>
+ Offset16To<HBUINT8>
data; /* Offset from the start of the GlyphVariationData table
* to the serialized data. */
/* TupleVariationHeader tupleVariationHeaders[] *//* Array of tuple variation headers. */
@@ -419,7 +419,9 @@ struct gvar
out->glyphCount = num_glyphs;
unsigned int subset_data_size = 0;
- for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++)
+ for (hb_codepoint_t gid = (c->plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE) ? 0 : 1;
+ gid < num_glyphs;
+ gid++)
{
hb_codepoint_t old_gid;
if (!c->plan->old_gid_for_new_gid (gid, &old_gid)) continue;
@@ -449,7 +451,9 @@ struct gvar
out->dataZ = subset_data - (char *) out;
unsigned int glyph_offset = 0;
- for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++)
+ for (hb_codepoint_t gid = (c->plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE) ? 0 : 1;
+ gid < num_glyphs;
+ gid++)
{
hb_codepoint_t old_gid;
hb_bytes_t var_data_bytes = c->plan->old_gid_for_new_gid (gid, &old_gid)
@@ -676,7 +680,7 @@ no_more_gaps:
* can be referenced within glyph variation data tables for
* multiple glyphs, as opposed to other tuple records stored
* directly within a glyph variation data table. */
- LNNOffsetTo<UnsizedArrayOf<F2DOT14>>
+ NNOffset32To<UnsizedArrayOf<F2DOT14>>
sharedTuples; /* Offset from the start of this table to the shared tuple records.
* Array of tuple records shared across all glyph variation data tables. */
HBUINT16 glyphCount; /* The number of glyphs in this font. This must match the number of
@@ -684,7 +688,7 @@ no_more_gaps:
HBUINT16 flags; /* Bit-field that gives the format of the offset array that follows.
* If bit 0 is clear, the offsets are uint16; if bit 0 is set, the
* offsets are uint32. */
- LOffsetTo<GlyphVariationData>
+ Offset32To<GlyphVariationData>
dataZ; /* Offset from the start of this table to the array of
* GlyphVariationData tables. */
UnsizedArrayOf<HBUINT8>
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
index fdcc88d674..72217e7f29 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
@@ -49,12 +49,12 @@ struct DeltaSetIndexMap
{
unsigned int width = plan.get_width ();
unsigned int inner_bit_count = plan.get_inner_bit_count ();
- const hb_array_t<const unsigned int> output_map = plan.get_output_map ();
+ const hb_array_t<const uint32_t> output_map = plan.get_output_map ();
TRACE_SERIALIZE (this);
if (unlikely (output_map.length && ((((inner_bit_count-1)&~0xF)!=0) || (((width-1)&~0x3)!=0))))
return_trace (false);
- if (unlikely (!c->extend_min (*this))) return_trace (false);
+ if (unlikely (!c->extend_min (this))) return_trace (false);
format = ((width-1)<<4)|(inner_bit_count-1);
mapCount = output_map.length;
@@ -76,7 +76,7 @@ struct DeltaSetIndexMap
return_trace (true);
}
- unsigned int map (unsigned int v) const /* Returns 16.16 outer.inner. */
+ uint32_t map (unsigned int v) const /* Returns 16.16 outer.inner. */
{
/* If count is zero, pass value unchanged. This takes
* care of direct mapping for advance map. */
@@ -217,7 +217,7 @@ struct index_map_subset_plan_t
hb_codepoint_t old_gid;
if (plan->old_gid_for_new_gid (gid, &old_gid))
{
- unsigned int v = input_map->map (old_gid);
+ uint32_t v = input_map->map (old_gid);
unsigned int outer = v >> 16;
output_map[gid] = (outer_map[outer] << 16) | (inner_maps[outer][v & 0xFFFF]);
}
@@ -234,14 +234,14 @@ struct index_map_subset_plan_t
{ return (map_count? (DeltaSetIndexMap::min_size + get_width () * map_count): 0); }
bool is_identity () const { return get_output_map ().length == 0; }
- hb_array_t<const unsigned int> get_output_map () const { return output_map.as_array (); }
+ hb_array_t<const uint32_t> get_output_map () const { return output_map.as_array (); }
protected:
unsigned int map_count;
hb_vector_t<unsigned int> max_inners;
unsigned int outer_bit_count;
unsigned int inner_bit_count;
- hb_vector_t<unsigned int> output_map;
+ hb_vector_t<uint32_t> output_map;
};
struct hvarvvar_subset_plan_t
@@ -272,7 +272,7 @@ struct hvarvvar_subset_plan_t
index_map_plans[0].init (*index_maps[0], outer_map, inner_sets, plan);
if (index_maps[0] == &Null (DeltaSetIndexMap))
{
- retain_adv_map = plan->retain_gids;
+ retain_adv_map = plan->flags & HB_SUBSET_FLAGS_RETAIN_GIDS;
outer_map.add (0);
for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++)
{
@@ -367,15 +367,15 @@ struct HVARVVAR
TRACE_SERIALIZE (this);
if (im_plans[index_map_subset_plan_t::ADV_INDEX].is_identity ())
advMap = 0;
- else if (unlikely (!advMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::ADV_INDEX])))
+ else if (unlikely (!advMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::ADV_INDEX])))
return_trace (false);
if (im_plans[index_map_subset_plan_t::LSB_INDEX].is_identity ())
lsbMap = 0;
- else if (unlikely (!lsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::LSB_INDEX])))
+ else if (unlikely (!lsbMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::LSB_INDEX])))
return_trace (false);
if (im_plans[index_map_subset_plan_t::RSB_INDEX].is_identity ())
rsbMap = 0;
- else if (unlikely (!rsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::RSB_INDEX])))
+ else if (unlikely (!rsbMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::RSB_INDEX])))
return_trace (false);
return_trace (true);
@@ -398,8 +398,10 @@ struct HVARVVAR
out->version.major = 1;
out->version.minor = 0;
- if (unlikely (!out->varStore.serialize (c->serializer, out)
- .serialize (c->serializer, hvar_plan.var_store, hvar_plan.inner_maps.as_array ())))
+ if (unlikely (!out->varStore
+ .serialize_serialize (c->serializer,
+ hvar_plan.var_store,
+ hvar_plan.inner_maps.as_array ())))
return_trace (false);
return_trace (out->T::serialize_index_maps (c->serializer,
@@ -408,7 +410,7 @@ struct HVARVVAR
float get_advance_var (hb_codepoint_t glyph, hb_font_t *font) const
{
- unsigned int varidx = (this+advMap).map (glyph);
+ uint32_t varidx = (this+advMap).map (glyph);
return (this+varStore).get_delta (varidx, font->coords, font->num_coords);
}
@@ -416,7 +418,7 @@ struct HVARVVAR
const int *coords, unsigned int coord_count) const
{
if (!has_side_bearing_deltas ()) return 0.f;
- unsigned int varidx = (this+lsbMap).map (glyph);
+ uint32_t varidx = (this+lsbMap).map (glyph);
return (this+varStore).get_delta (varidx, coords, coord_count);
}
@@ -425,13 +427,13 @@ struct HVARVVAR
protected:
FixedVersion<>version; /* Version of the metrics variation table
* initially set to 0x00010000u */
- LOffsetTo<VariationStore>
+ Offset32To<VariationStore>
varStore; /* Offset to item variation store table. */
- LOffsetTo<DeltaSetIndexMap>
+ Offset32To<DeltaSetIndexMap>
advMap; /* Offset to advance var-idx mapping. */
- LOffsetTo<DeltaSetIndexMap>
+ Offset32To<DeltaSetIndexMap>
lsbMap; /* Offset to lsb/tsb var-idx mapping. */
- LOffsetTo<DeltaSetIndexMap>
+ Offset32To<DeltaSetIndexMap>
rsbMap; /* Offset to rsb/bsb var-idx mapping. */
public:
@@ -466,7 +468,7 @@ struct VVAR : HVARVVAR {
return_trace (false);
if (!im_plans[index_map_subset_plan_t::VORG_INDEX].get_map_count ())
vorgMap = 0;
- else if (unlikely (!vorgMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::VORG_INDEX])))
+ else if (unlikely (!vorgMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::VORG_INDEX])))
return_trace (false);
return_trace (true);
@@ -475,7 +477,7 @@ struct VVAR : HVARVVAR {
bool subset (hb_subset_context_t *c) const { return HVARVVAR::_subset<VVAR> (c); }
protected:
- LOffsetTo<DeltaSetIndexMap>
+ Offset32To<DeltaSetIndexMap>
vorgMap; /* Offset to vertical-origin var-idx mapping. */
public:
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh
index 1b7fad9cec..208db46741 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh
@@ -103,7 +103,7 @@ protected:
HBUINT16 valueRecordSize;/* The size in bytes of each value record —
* must be greater than zero. */
HBUINT16 valueRecordCount;/* The number of value records — may be zero. */
- OffsetTo<VariationStore>
+ Offset16To<VariationStore>
varStore; /* Offset to item variation store table. */
UnsizedArrayOf<HBUINT8>
valuesZ; /* Array of value records. The records must be
diff --git a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
index c6803200f9..efa7737d6f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh
@@ -125,7 +125,7 @@ struct VORG
FixedVersion<>version; /* Version of VORG table. Set to 0x00010000u. */
FWORD defaultVertOriginY;
/* The default vertical origin. */
- SortedArrayOf<VertOriginMetric>
+ SortedArray16Of<VertOriginMetric>
vertYOrigins; /* The array of vertical origins. */
public:
diff --git a/thirdparty/harfbuzz/src/hb-pool.hh b/thirdparty/harfbuzz/src/hb-pool.hh
index dcf0faf2a9..dcf8f6627d 100644
--- a/thirdparty/harfbuzz/src/hb-pool.hh
+++ b/thirdparty/harfbuzz/src/hb-pool.hh
@@ -41,7 +41,7 @@ struct hb_pool_t
{
next = nullptr;
- for (chunk_t *_ : chunks) ::free (_);
+ for (chunk_t *_ : chunks) hb_free (_);
chunks.fini ();
}
@@ -51,7 +51,7 @@ struct hb_pool_t
if (unlikely (!next))
{
if (unlikely (!chunks.alloc (chunks.length + 1))) return nullptr;
- chunk_t *chunk = (chunk_t *) calloc (1, sizeof (chunk_t));
+ chunk_t *chunk = (chunk_t *) hb_calloc (1, sizeof (chunk_t));
if (unlikely (!chunk)) return nullptr;
chunks.push (chunk);
next = chunk->thread ();
@@ -65,7 +65,7 @@ struct hb_pool_t
return obj;
}
- void free (T* obj)
+ void release (T* obj)
{
* (T**) obj = next;
next = obj;
diff --git a/thirdparty/harfbuzz/src/hb-priority-queue.hh b/thirdparty/harfbuzz/src/hb-priority-queue.hh
new file mode 100644
index 0000000000..7d799ae906
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-priority-queue.hh
@@ -0,0 +1,151 @@
+/*
+ * Copyright © 2020 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#ifndef HB_PRIORITY_QUEUE_HH
+#define HB_PRIORITY_QUEUE_HH
+
+#include "hb.hh"
+#include "hb-vector.hh"
+
+/*
+ * hb_priority_queue_t
+ *
+ * Priority queue implemented as a binary heap. Supports extract minimum
+ * and insert operations.
+ */
+struct hb_priority_queue_t
+{
+ HB_DELETE_COPY_ASSIGN (hb_priority_queue_t);
+ hb_priority_queue_t () { init (); }
+ ~hb_priority_queue_t () { fini (); }
+
+ private:
+ typedef hb_pair_t<int64_t, unsigned> item_t;
+ hb_vector_t<item_t> heap;
+
+ public:
+ void init () { heap.init (); }
+
+ void fini () { heap.fini (); }
+
+ void reset () { heap.resize (0); }
+
+ bool in_error () const { return heap.in_error (); }
+
+ void insert (int64_t priority, unsigned value)
+ {
+ heap.push (item_t (priority, value));
+ bubble_up (heap.length - 1);
+ }
+
+ item_t pop_minimum ()
+ {
+ item_t result = heap[0];
+
+ heap[0] = heap[heap.length - 1];
+ heap.shrink (heap.length - 1);
+ bubble_down (0);
+
+ return result;
+ }
+
+ const item_t& minimum ()
+ {
+ return heap[0];
+ }
+
+ bool is_empty () const { return heap.length == 0; }
+ explicit operator bool () const { return !is_empty (); }
+ unsigned int get_population () const { return heap.length; }
+
+ /* Sink interface. */
+ hb_priority_queue_t& operator << (item_t item)
+ { insert (item.first, item.second); return *this; }
+
+ private:
+
+ static constexpr unsigned parent (unsigned index)
+ {
+ return (index - 1) / 2;
+ }
+
+ static constexpr unsigned left_child (unsigned index)
+ {
+ return 2 * index + 1;
+ }
+
+ static constexpr unsigned right_child (unsigned index)
+ {
+ return 2 * index + 2;
+ }
+
+ void bubble_down (unsigned index)
+ {
+ unsigned left = left_child (index);
+ unsigned right = right_child (index);
+
+ bool has_left = left < heap.length;
+ if (!has_left)
+ // If there's no left, then there's also no right.
+ return;
+
+ bool has_right = right < heap.length;
+ if (heap[index].first <= heap[left].first
+ && (!has_right || heap[index].first <= heap[right].first))
+ return;
+
+ if (!has_right || heap[left].first < heap[right].first)
+ {
+ swap (index, left);
+ bubble_down (left);
+ return;
+ }
+
+ swap (index, right);
+ bubble_down (right);
+ }
+
+ void bubble_up (unsigned index)
+ {
+ if (index == 0) return;
+
+ unsigned parent_index = parent (index);
+ if (heap[parent_index].first <= heap[index].first)
+ return;
+
+ swap (index, parent_index);
+ bubble_up (parent_index);
+ }
+
+ void swap (unsigned a, unsigned b)
+ {
+ item_t temp = heap[a];
+ heap[a] = heap[b];
+ heap[b] = temp;
+ }
+};
+
+#endif /* HB_PRIORITY_QUEUE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-repacker.hh b/thirdparty/harfbuzz/src/hb-repacker.hh
new file mode 100644
index 0000000000..b02128b5c4
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-repacker.hh
@@ -0,0 +1,769 @@
+/*
+ * Copyright © 2020 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#ifndef HB_REPACKER_HH
+#define HB_REPACKER_HH
+
+#include "hb-open-type.hh"
+#include "hb-map.hh"
+#include "hb-priority-queue.hh"
+#include "hb-serialize.hh"
+#include "hb-vector.hh"
+
+
+struct graph_t
+{
+ struct vertex_t
+ {
+ vertex_t () :
+ distance (0),
+ incoming_edges (0),
+ start (0),
+ end (0),
+ priority(0) {}
+
+ void fini () { obj.fini (); }
+
+ hb_serialize_context_t::object_t obj;
+ int64_t distance;
+ unsigned incoming_edges;
+ unsigned start;
+ unsigned end;
+ unsigned priority;
+
+ bool is_shared () const
+ {
+ return incoming_edges > 1;
+ }
+
+ bool is_leaf () const
+ {
+ return !obj.links.length;
+ }
+
+ void raise_priority ()
+ {
+ priority++;
+ }
+
+ int64_t modified_distance (unsigned order) const
+ {
+ // TODO(garretrieger): once priority is high enough, should try
+ // setting distance = 0 which will force to sort immediately after
+ // it's parent where possible.
+
+ int64_t modified_distance =
+ hb_min (hb_max(distance + distance_modifier (), 0), 0x7FFFFFFFFF);
+ return (modified_distance << 24) | (0x00FFFFFF & order);
+ }
+
+ int64_t distance_modifier () const
+ {
+ if (!priority) return 0;
+ int64_t table_size = obj.tail - obj.head;
+ return -(table_size - table_size / (1 << hb_min(priority, 16u)));
+ }
+ };
+
+ struct overflow_record_t
+ {
+ unsigned parent;
+ const hb_serialize_context_t::object_t::link_t* link;
+ };
+
+ struct clone_buffer_t
+ {
+ clone_buffer_t () : head (nullptr), tail (nullptr) {}
+
+ bool copy (const hb_serialize_context_t::object_t& object)
+ {
+ fini ();
+ unsigned size = object.tail - object.head;
+ head = (char*) hb_malloc (size);
+ if (!head) return false;
+
+ memcpy (head, object.head, size);
+ tail = head + size;
+ return true;
+ }
+
+ char* head;
+ char* tail;
+
+ void fini ()
+ {
+ if (!head) return;
+ hb_free (head);
+ head = nullptr;
+ }
+ };
+
+ /*
+ * A topological sorting of an object graph. Ordered
+ * in reverse serialization order (first object in the
+ * serialization is at the end of the list). This matches
+ * the 'packed' object stack used internally in the
+ * serializer
+ */
+ graph_t (const hb_vector_t<hb_serialize_context_t::object_t *>& objects)
+ : edge_count_invalid (true),
+ distance_invalid (true),
+ positions_invalid (true),
+ successful (true)
+ {
+ bool removed_nil = false;
+ for (unsigned i = 0; i < objects.length; i++)
+ {
+ // TODO(grieger): check all links point to valid objects.
+
+ // If this graph came from a serialization buffer object 0 is the
+ // nil object. We don't need it for our purposes here so drop it.
+ if (i == 0 && !objects[i])
+ {
+ removed_nil = true;
+ continue;
+ }
+
+ vertex_t* v = vertices_.push ();
+ if (check_success (!vertices_.in_error ()))
+ v->obj = *objects[i];
+ if (!removed_nil) continue;
+ for (unsigned i = 0; i < v->obj.links.length; i++)
+ // Fix indices to account for removed nil object.
+ v->obj.links[i].objidx--;
+ }
+ }
+
+ ~graph_t ()
+ {
+ vertices_.fini_deep ();
+ clone_buffers_.fini_deep ();
+ }
+
+ bool in_error () const
+ {
+ return !successful || vertices_.in_error () || clone_buffers_.in_error ();
+ }
+
+ const vertex_t& root () const
+ {
+ return vertices_[root_idx ()];
+ }
+
+ unsigned root_idx () const
+ {
+ // Object graphs are in reverse order, the first object is at the end
+ // of the vector. Since the graph is topologically sorted it's safe to
+ // assume the first object has no incoming edges.
+ return vertices_.length - 1;
+ }
+
+ const hb_serialize_context_t::object_t& object(unsigned i) const
+ {
+ return vertices_[i].obj;
+ }
+
+ /*
+ * serialize graph into the provided serialization buffer.
+ */
+ void serialize (hb_serialize_context_t* c) const
+ {
+ c->start_serialize<void> ();
+ for (unsigned i = 0; i < vertices_.length; i++) {
+ c->push ();
+
+ size_t size = vertices_[i].obj.tail - vertices_[i].obj.head;
+ char* start = c->allocate_size <char> (size);
+ if (!start) return;
+
+ memcpy (start, vertices_[i].obj.head, size);
+
+ for (const auto& link : vertices_[i].obj.links)
+ serialize_link (link, start, c);
+
+ // All duplications are already encoded in the graph, so don't
+ // enable sharing during packing.
+ c->pop_pack (false);
+ }
+ c->end_serialize ();
+ }
+
+ /*
+ * Generates a new topological sorting of graph using Kahn's
+ * algorithm: https://en.wikipedia.org/wiki/Topological_sorting#Algorithms
+ */
+ void sort_kahn ()
+ {
+ positions_invalid = true;
+
+ if (vertices_.length <= 1) {
+ // Graph of 1 or less doesn't need sorting.
+ return;
+ }
+
+ hb_vector_t<unsigned> queue;
+ hb_vector_t<vertex_t> sorted_graph;
+ hb_vector_t<unsigned> id_map;
+ if (unlikely (!check_success (id_map.resize (vertices_.length)))) return;
+
+ hb_vector_t<unsigned> removed_edges;
+ if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return;
+ update_incoming_edge_count ();
+
+ queue.push (root_idx ());
+ int new_id = vertices_.length - 1;
+
+ while (!queue.in_error () && queue.length)
+ {
+ unsigned next_id = queue[0];
+ queue.remove (0);
+
+ vertex_t& next = vertices_[next_id];
+ sorted_graph.push (next);
+ id_map[next_id] = new_id--;
+
+ for (const auto& link : next.obj.links) {
+ removed_edges[link.objidx]++;
+ if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx]))
+ queue.push (link.objidx);
+ }
+ }
+
+ check_success (!queue.in_error ());
+ check_success (!sorted_graph.in_error ());
+ if (!check_success (new_id == -1))
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
+
+ remap_obj_indices (id_map, &sorted_graph);
+
+ sorted_graph.as_array ().reverse ();
+
+ vertices_.fini_deep ();
+ vertices_ = sorted_graph;
+ sorted_graph.fini_deep ();
+ }
+
+ /*
+ * Generates a new topological sorting of graph ordered by the shortest
+ * distance to each node.
+ */
+ void sort_shortest_distance ()
+ {
+ positions_invalid = true;
+
+ if (vertices_.length <= 1) {
+ // Graph of 1 or less doesn't need sorting.
+ return;
+ }
+
+ update_distances ();
+
+ hb_priority_queue_t queue;
+ hb_vector_t<vertex_t> sorted_graph;
+ hb_vector_t<unsigned> id_map;
+ if (unlikely (!check_success (id_map.resize (vertices_.length)))) return;
+
+ hb_vector_t<unsigned> removed_edges;
+ if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return;
+ update_incoming_edge_count ();
+
+ queue.insert (root ().modified_distance (0), root_idx ());
+ int new_id = root_idx ();
+ unsigned order = 1;
+ while (!queue.in_error () && !queue.is_empty ())
+ {
+ unsigned next_id = queue.pop_minimum().second;
+
+ vertex_t& next = vertices_[next_id];
+ sorted_graph.push (next);
+ id_map[next_id] = new_id--;
+
+ for (const auto& link : next.obj.links) {
+ removed_edges[link.objidx]++;
+ if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx]))
+ // Add the order that the links were encountered to the priority.
+ // This ensures that ties between priorities objects are broken in a consistent
+ // way. More specifically this is set up so that if a set of objects have the same
+ // distance they'll be added to the topological order in the order that they are
+ // referenced from the parent object.
+ queue.insert (vertices_[link.objidx].modified_distance (order++),
+ link.objidx);
+ }
+ }
+
+ check_success (!queue.in_error ());
+ check_success (!sorted_graph.in_error ());
+ if (!check_success (new_id == -1))
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
+
+ remap_obj_indices (id_map, &sorted_graph);
+
+ sorted_graph.as_array ().reverse ();
+
+ vertices_.fini_deep ();
+ vertices_ = sorted_graph;
+ sorted_graph.fini_deep ();
+ }
+
+ /*
+ * Creates a copy of child and re-assigns the link from
+ * parent to the clone. The copy is a shallow copy, objects
+ * linked from child are not duplicated.
+ */
+ void duplicate (unsigned parent_idx, unsigned child_idx)
+ {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, " Duplicating %d => %d",
+ parent_idx, child_idx);
+
+ positions_invalid = true;
+
+ auto* clone = vertices_.push ();
+ auto& child = vertices_[child_idx];
+ clone_buffer_t* buffer = clone_buffers_.push ();
+ if (vertices_.in_error ()
+ || clone_buffers_.in_error ()
+ || !check_success (buffer->copy (child.obj))) {
+ return;
+ }
+
+ clone->obj.head = buffer->head;
+ clone->obj.tail = buffer->tail;
+ clone->distance = child.distance;
+
+ for (const auto& l : child.obj.links)
+ clone->obj.links.push (l);
+
+ check_success (!clone->obj.links.in_error ());
+
+ auto& parent = vertices_[parent_idx];
+ unsigned clone_idx = vertices_.length - 2;
+ for (unsigned i = 0; i < parent.obj.links.length; i++)
+ {
+ auto& l = parent.obj.links[i];
+ if (l.objidx == child_idx)
+ {
+ l.objidx = clone_idx;
+ clone->incoming_edges++;
+ child.incoming_edges--;
+ }
+ }
+
+ // The last object is the root of the graph, so swap back the root to the end.
+ // The root's obj idx does change, however since it's root nothing else refers to it.
+ // all other obj idx's will be unaffected.
+ vertex_t root = vertices_[vertices_.length - 2];
+ vertices_[vertices_.length - 2] = *clone;
+ vertices_[vertices_.length - 1] = root;
+ }
+
+ /*
+ * Raises the sorting priority of all children.
+ */
+ void raise_childrens_priority (unsigned parent_idx)
+ {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, " Raising priority of all children of %d",
+ parent_idx);
+ // This operation doesn't change ordering until a sort is run, so no need
+ // to invalidate positions. It does not change graph structure so no need
+ // to update distances or edge counts.
+ auto& parent = vertices_[parent_idx].obj;
+ for (unsigned i = 0; i < parent.links.length; i++)
+ vertices_[parent.links[i].objidx].raise_priority ();
+ }
+
+ /*
+ * Will any offsets overflow on graph when it's serialized?
+ */
+ bool will_overflow (hb_vector_t<overflow_record_t>* overflows = nullptr)
+ {
+ if (overflows) overflows->resize (0);
+ update_positions ();
+
+ for (int parent_idx = vertices_.length - 1; parent_idx >= 0; parent_idx--)
+ {
+ for (const auto& link : vertices_[parent_idx].obj.links)
+ {
+ int64_t offset = compute_offset (parent_idx, link);
+ if (is_valid_offset (offset, link))
+ continue;
+
+ if (!overflows) return true;
+
+ overflow_record_t r;
+ r.parent = parent_idx;
+ r.link = &link;
+ overflows->push (r);
+ }
+ }
+
+ if (!overflows) return false;
+ return overflows->length;
+ }
+
+ void print_overflows (const hb_vector_t<overflow_record_t>& overflows)
+ {
+ if (!DEBUG_ENABLED(SUBSET_REPACK)) return;
+
+ update_incoming_edge_count ();
+ for (const auto& o : overflows)
+ {
+ const auto& child = vertices_[o.link->objidx];
+ DEBUG_MSG (SUBSET_REPACK, nullptr, " overflow from %d => %d (%d incoming , %d outgoing)",
+ o.parent,
+ o.link->objidx,
+ child.incoming_edges,
+ child.obj.links.length);
+ }
+ }
+
+ void err_other_error () { this->successful = false; }
+
+ private:
+
+ bool check_success (bool success)
+ { return this->successful && (success || (err_other_error (), false)); }
+
+ /*
+ * Creates a map from objid to # of incoming edges.
+ */
+ void update_incoming_edge_count ()
+ {
+ if (!edge_count_invalid) return;
+
+ for (unsigned i = 0; i < vertices_.length; i++)
+ vertices_[i].incoming_edges = 0;
+
+ for (const vertex_t& v : vertices_)
+ {
+ for (auto& l : v.obj.links)
+ {
+ vertices_[l.objidx].incoming_edges++;
+ }
+ }
+
+ edge_count_invalid = false;
+ }
+
+ /*
+ * compute the serialized start and end positions for each vertex.
+ */
+ void update_positions ()
+ {
+ if (!positions_invalid) return;
+
+ unsigned current_pos = 0;
+ for (int i = root_idx (); i >= 0; i--)
+ {
+ auto& v = vertices_[i];
+ v.start = current_pos;
+ current_pos += v.obj.tail - v.obj.head;
+ v.end = current_pos;
+ }
+
+ positions_invalid = false;
+ }
+
+ /*
+ * Finds the distance to each object in the graph
+ * from the initial node.
+ */
+ void update_distances ()
+ {
+ if (!distance_invalid) return;
+
+ // Uses Dijkstra's algorithm to find all of the shortest distances.
+ // https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
+ //
+ // Implementation Note:
+ // Since our priority queue doesn't support fast priority decreases
+ // we instead just add new entries into the queue when a priority changes.
+ // Redundant ones are filtered out later on by the visited set.
+ // According to https://www3.cs.stonybrook.edu/~rezaul/papers/TR-07-54.pdf
+ // for practical performance this is faster then using a more advanced queue
+ // (such as a fibonaacci queue) with a fast decrease priority.
+ for (unsigned i = 0; i < vertices_.length; i++)
+ {
+ if (i == vertices_.length - 1)
+ vertices_[i].distance = 0;
+ else
+ vertices_[i].distance = hb_int_max (int64_t);
+ }
+
+ hb_priority_queue_t queue;
+ queue.insert (0, vertices_.length - 1);
+
+ hb_set_t visited;
+
+ while (!queue.in_error () && !queue.is_empty ())
+ {
+ unsigned next_idx = queue.pop_minimum ().second;
+ if (visited.has (next_idx)) continue;
+ const auto& next = vertices_[next_idx];
+ int64_t next_distance = vertices_[next_idx].distance;
+ visited.add (next_idx);
+
+ for (const auto& link : next.obj.links)
+ {
+ if (visited.has (link.objidx)) continue;
+
+ const auto& child = vertices_[link.objidx].obj;
+ int64_t child_weight = child.tail - child.head +
+ ((int64_t) 1 << (link.width * 8));
+ int64_t child_distance = next_distance + child_weight;
+
+ if (child_distance < vertices_[link.objidx].distance)
+ {
+ vertices_[link.objidx].distance = child_distance;
+ queue.insert (child_distance, link.objidx);
+ }
+ }
+ }
+
+ check_success (!queue.in_error ());
+ if (!check_success (queue.is_empty ()))
+ {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected.");
+ return;
+ }
+
+ distance_invalid = false;
+ }
+
+ int64_t compute_offset (
+ unsigned parent_idx,
+ const hb_serialize_context_t::object_t::link_t& link) const
+ {
+ const auto& parent = vertices_[parent_idx];
+ const auto& child = vertices_[link.objidx];
+ int64_t offset = 0;
+ switch ((hb_serialize_context_t::whence_t) link.whence) {
+ case hb_serialize_context_t::whence_t::Head:
+ offset = child.start - parent.start; break;
+ case hb_serialize_context_t::whence_t::Tail:
+ offset = child.start - parent.end; break;
+ case hb_serialize_context_t::whence_t::Absolute:
+ offset = child.start; break;
+ }
+
+ assert (offset >= link.bias);
+ offset -= link.bias;
+ return offset;
+ }
+
+ bool is_valid_offset (int64_t offset,
+ const hb_serialize_context_t::object_t::link_t& link) const
+ {
+ if (link.is_signed)
+ {
+ if (link.width == 4)
+ return offset >= -((int64_t) 1 << 31) && offset < ((int64_t) 1 << 31);
+ else
+ return offset >= -(1 << 15) && offset < (1 << 15);
+ }
+ else
+ {
+ if (link.width == 4)
+ return offset >= 0 && offset < ((int64_t) 1 << 32);
+ else if (link.width == 3)
+ return offset >= 0 && offset < ((int32_t) 1 << 24);
+ else
+ return offset >= 0 && offset < (1 << 16);
+ }
+ }
+
+ /*
+ * Updates all objidx's in all links using the provided mapping.
+ */
+ void remap_obj_indices (const hb_vector_t<unsigned>& id_map,
+ hb_vector_t<vertex_t>* sorted_graph) const
+ {
+ for (unsigned i = 0; i < sorted_graph->length; i++)
+ {
+ for (unsigned j = 0; j < (*sorted_graph)[i].obj.links.length; j++)
+ {
+ auto& link = (*sorted_graph)[i].obj.links[j];
+ link.objidx = id_map[link.objidx];
+ }
+ }
+ }
+
+ template <typename O> void
+ serialize_link_of_type (const hb_serialize_context_t::object_t::link_t& link,
+ char* head,
+ hb_serialize_context_t* c) const
+ {
+ OT::Offset<O>* offset = reinterpret_cast<OT::Offset<O>*> (head + link.position);
+ *offset = 0;
+ c->add_link (*offset,
+ // serializer has an extra nil object at the start of the
+ // object array. So all id's are +1 of what our id's are.
+ link.objidx + 1,
+ (hb_serialize_context_t::whence_t) link.whence,
+ link.bias);
+ }
+
+ void serialize_link (const hb_serialize_context_t::object_t::link_t& link,
+ char* head,
+ hb_serialize_context_t* c) const
+ {
+ switch (link.width)
+ {
+ case 4:
+ if (link.is_signed)
+ {
+ serialize_link_of_type<OT::HBINT32> (link, head, c);
+ } else {
+ serialize_link_of_type<OT::HBUINT32> (link, head, c);
+ }
+ return;
+ case 2:
+ if (link.is_signed)
+ {
+ serialize_link_of_type<OT::HBINT16> (link, head, c);
+ } else {
+ serialize_link_of_type<OT::HBUINT16> (link, head, c);
+ }
+ return;
+ case 3:
+ serialize_link_of_type<OT::HBUINT24> (link, head, c);
+ return;
+ default:
+ // Unexpected link width.
+ assert (0);
+ }
+ }
+
+ public:
+ // TODO(garretrieger): make private, will need to move most of offset overflow code into graph.
+ hb_vector_t<vertex_t> vertices_;
+ private:
+ hb_vector_t<clone_buffer_t> clone_buffers_;
+ bool edge_count_invalid;
+ bool distance_invalid;
+ bool positions_invalid;
+ bool successful;
+};
+
+
+/*
+ * Attempts to modify the topological sorting of the provided object graph to
+ * eliminate offset overflows in the links between objects of the graph. If a
+ * non-overflowing ordering is found the updated graph is serialized it into the
+ * provided serialization context.
+ *
+ * If necessary the structure of the graph may be modified in ways that do not
+ * affect the functionality of the graph. For example shared objects may be
+ * duplicated.
+ */
+inline void
+hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& packed,
+ hb_serialize_context_t* c) {
+ // Kahn sort is ~twice as fast as shortest distance sort and works for many fonts
+ // so try it first to save time.
+ graph_t sorted_graph (packed);
+ sorted_graph.sort_kahn ();
+ if (!sorted_graph.will_overflow ())
+ {
+ sorted_graph.serialize (c);
+ return;
+ }
+
+ sorted_graph.sort_shortest_distance ();
+
+ unsigned round = 0;
+ hb_vector_t<graph_t::overflow_record_t> overflows;
+ // TODO(garretrieger): select a good limit for max rounds.
+ while (!sorted_graph.in_error ()
+ && sorted_graph.will_overflow (&overflows)
+ && round++ < 10) {
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "=== Over flow resolution round %d ===", round);
+ sorted_graph.print_overflows (overflows);
+
+ bool resolution_attempted = false;
+ hb_set_t priority_bumped_parents;
+ // Try resolving the furthest overflows first.
+ for (int i = overflows.length - 1; i >= 0; i--)
+ {
+ const graph_t::overflow_record_t& r = overflows[i];
+ const auto& child = sorted_graph.vertices_[r.link->objidx];
+ if (child.is_shared ())
+ {
+ // The child object is shared, we may be able to eliminate the overflow
+ // by duplicating it.
+ sorted_graph.duplicate (r.parent, r.link->objidx);
+ resolution_attempted = true;
+
+ // Stop processing overflows for this round so that object order can be
+ // updated to account for the newly added object.
+ break;
+ }
+
+ if (child.is_leaf () && !priority_bumped_parents.has (r.parent))
+ {
+ // This object is too far from it's parent, attempt to move it closer.
+ //
+ // TODO(garretrieger): initially limiting this to leaf's since they can be
+ // moved closer with fewer consequences. However, this can
+ // likely can be used for non-leafs as well.
+ // TODO(garretrieger): add a maximum priority, don't try to raise past this.
+ // TODO(garretrieger): also try lowering priority of the parent. Make it
+ // get placed further up in the ordering, closer to it's children.
+ // this is probably preferable if the total size of the parent object
+ // is < then the total size of the children (and the parent can be moved).
+ // Since in that case moving the parent will cause a smaller increase in
+ // the length of other offsets.
+ sorted_graph.raise_childrens_priority (r.parent);
+ priority_bumped_parents.add (r.parent);
+ resolution_attempted = true;
+ continue;
+ }
+
+ // TODO(garretrieger): add additional offset resolution strategies
+ // - Promotion to extension lookups.
+ // - Table splitting.
+ }
+
+ if (resolution_attempted)
+ {
+ sorted_graph.sort_shortest_distance ();
+ continue;
+ }
+
+ DEBUG_MSG (SUBSET_REPACK, nullptr, "No resolution available :(");
+ c->err (HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
+ return;
+ }
+
+ if (sorted_graph.in_error ())
+ {
+ c->err (HB_SERIALIZE_ERROR_OTHER);
+ return;
+ }
+ sorted_graph.serialize (c);
+}
+
+
+#endif /* HB_REPACKER_HH */
diff --git a/thirdparty/harfbuzz/src/hb-sanitize.hh b/thirdparty/harfbuzz/src/hb-sanitize.hh
index 1675e8448a..56c46015a6 100644
--- a/thirdparty/harfbuzz/src/hb-sanitize.hh
+++ b/thirdparty/harfbuzz/src/hb-sanitize.hh
@@ -105,7 +105,7 @@
#define HB_SANITIZE_MAX_EDITS 32
#endif
#ifndef HB_SANITIZE_MAX_OPS_FACTOR
-#define HB_SANITIZE_MAX_OPS_FACTOR 8
+#define HB_SANITIZE_MAX_OPS_FACTOR 64
#endif
#ifndef HB_SANITIZE_MAX_OPS_MIN
#define HB_SANITIZE_MAX_OPS_MIN 16384
@@ -233,7 +233,7 @@ struct hb_sanitize_context_t :
(this->start <= p &&
p <= this->end &&
(unsigned int) (this->end - p) >= len &&
- this->max_ops-- > 0);
+ (this->max_ops -= len) > 0);
DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
"check_range [%p..%p]"
diff --git a/thirdparty/harfbuzz/src/hb-serialize.hh b/thirdparty/harfbuzz/src/hb-serialize.hh
index fe29bdf96e..7212d9872a 100644
--- a/thirdparty/harfbuzz/src/hb-serialize.hh
+++ b/thirdparty/harfbuzz/src/hb-serialize.hh
@@ -41,6 +41,16 @@
* Serialize
*/
+enum hb_serialize_error_t {
+ HB_SERIALIZE_ERROR_NONE = 0x00000000u,
+ HB_SERIALIZE_ERROR_OTHER = 0x00000001u,
+ HB_SERIALIZE_ERROR_OFFSET_OVERFLOW = 0x00000002u,
+ HB_SERIALIZE_ERROR_OUT_OF_ROOM = 0x00000004u,
+ HB_SERIALIZE_ERROR_INT_OVERFLOW = 0x00000008u,
+ HB_SERIALIZE_ERROR_ARRAY_OVERFLOW = 0x00000010u
+};
+HB_MARK_AS_FLAG_T (hb_serialize_error_t);
+
struct hb_serialize_context_t
{
typedef unsigned objidx_t;
@@ -51,6 +61,8 @@ struct hb_serialize_context_t
Absolute /* Absolute: from the start of the serialize buffer. */
};
+
+
struct object_t
{
void fini () { links.fini (); }
@@ -70,7 +82,7 @@ struct hb_serialize_context_t
struct link_t
{
- bool is_wide: 1;
+ unsigned width: 3;
bool is_signed: 1;
unsigned whence: 2;
unsigned position: 28;
@@ -90,10 +102,11 @@ struct hb_serialize_context_t
char *tail;
object_t *current; // Just for sanity check
unsigned num_links;
+ hb_serialize_error_t errors;
};
snapshot_t snapshot ()
- { return snapshot_t { head, tail, current, current->links.length }; }
+ { return snapshot_t { head, tail, current, current->links.length, errors }; }
hb_serialize_context_t (void *start_, unsigned int size) :
start ((char *) start_),
@@ -117,30 +130,60 @@ struct hb_serialize_context_t
object_pool.fini ();
}
- bool in_error () const { return !this->successful; }
+ bool in_error () const { return bool (errors); }
+
+ bool successful () const { return !bool (errors); }
+
+ HB_NODISCARD bool ran_out_of_room () const { return errors & HB_SERIALIZE_ERROR_OUT_OF_ROOM; }
+ HB_NODISCARD bool offset_overflow () const { return errors & HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; }
+ HB_NODISCARD bool only_offset_overflow () const { return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; }
+ HB_NODISCARD bool only_overflow () const
+ {
+ return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW
+ || errors == HB_SERIALIZE_ERROR_INT_OVERFLOW
+ || errors == HB_SERIALIZE_ERROR_ARRAY_OVERFLOW;
+ }
+
+ void reset (void *start_, unsigned int size)
+ {
+ start = (char*) start_;
+ end = start + size;
+ reset ();
+ current = nullptr;
+ }
void reset ()
{
- this->successful = true;
- this->ran_out_of_room = false;
+ this->errors = HB_SERIALIZE_ERROR_NONE;
this->head = this->start;
this->tail = this->end;
this->debug_depth = 0;
fini ();
this->packed.push (nullptr);
+ this->packed_map.init ();
}
- bool check_success (bool success)
- { return this->successful && (success || (err_other_error (), false)); }
+ bool check_success (bool success,
+ hb_serialize_error_t err_type = HB_SERIALIZE_ERROR_OTHER)
+ {
+ return successful ()
+ && (success || err (err_type));
+ }
template <typename T1, typename T2>
- bool check_equal (T1 &&v1, T2 &&v2)
- { return check_success ((long long) v1 == (long long) v2); }
+ bool check_equal (T1 &&v1, T2 &&v2, hb_serialize_error_t err_type)
+ {
+ if ((long long) v1 != (long long) v2)
+ {
+ return err (err_type);
+ }
+ return true;
+ }
template <typename T1, typename T2>
- bool check_assign (T1 &v1, T2 &&v2)
- { return check_equal (v1 = v2, v2); }
+ bool check_assign (T1 &v1, T2 &&v2, hb_serialize_error_t err_type)
+ { return check_equal (v1 = v2, v2, err_type); }
template <typename T> bool propagate_error (T &&obj)
{ return check_success (!hb_deref (obj).in_error ()); }
@@ -167,12 +210,18 @@ struct hb_serialize_context_t
"end [%p..%p] serialized %u bytes; %s",
this->start, this->end,
(unsigned) (this->head - this->start),
- this->successful ? "successful" : "UNSUCCESSFUL");
+ successful () ? "successful" : "UNSUCCESSFUL");
propagate_error (packed, packed_map);
if (unlikely (!current)) return;
- if (unlikely (in_error())) return;
+ if (unlikely (in_error()))
+ {
+ // Offset overflows that occur before link resolution cannot be handled
+ // by repacking, so set a more general error.
+ if (offset_overflow ()) err (HB_SERIALIZE_ERROR_OTHER);
+ return;
+ }
assert (!current->next);
@@ -212,7 +261,7 @@ struct hb_serialize_context_t
current = current->next;
revert (obj->head, obj->tail);
obj->fini ();
- object_pool.free (obj);
+ object_pool.release (obj);
}
/* Set share to false when an object is unlikely sharable with others
@@ -275,9 +324,11 @@ struct hb_serialize_context_t
void revert (snapshot_t snap)
{
- if (unlikely (in_error ())) return;
+ // Overflows that happened after the snapshot will be erased by the revert.
+ if (unlikely (in_error () && !only_overflow ())) return;
assert (snap.current == current);
current->links.shrink (snap.num_links);
+ errors = snap.errors;
revert (snap.head, snap.tail);
}
@@ -312,7 +363,6 @@ struct hb_serialize_context_t
whence_t whence = Head,
unsigned bias = 0)
{
- static_assert (sizeof (T) == 2 || sizeof (T) == 4, "");
if (unlikely (in_error ())) return;
if (!objidx)
@@ -322,8 +372,10 @@ struct hb_serialize_context_t
assert (current->head <= (const char *) &ofs);
auto& link = *current->links.push ();
+ if (current->links.in_error ())
+ err (HB_SERIALIZE_ERROR_OTHER);
- link.is_wide = sizeof (T) == 4;
+ link.width = sizeof (T);
link.is_signed = hb_is_signed (hb_unwrap_type (T));
link.whence = (unsigned) whence;
link.position = (const char *) &ofs - current->head;
@@ -351,7 +403,7 @@ struct hb_serialize_context_t
for (const object_t::link_t &link : parent->links)
{
const object_t* child = packed[link.objidx];
- if (unlikely (!child)) { err_other_error(); return; }
+ if (unlikely (!child)) { err (HB_SERIALIZE_ERROR_OTHER); return; }
unsigned offset = 0;
switch ((whence_t) link.whence) {
case Head: offset = child->head - parent->head; break;
@@ -363,15 +415,19 @@ struct hb_serialize_context_t
offset -= link.bias;
if (link.is_signed)
{
- if (link.is_wide)
+ assert (link.width == 2 || link.width == 4);
+ if (link.width == 4)
assign_offset<int32_t> (parent, link, offset);
else
assign_offset<int16_t> (parent, link, offset);
}
else
{
- if (link.is_wide)
+ assert (link.width == 2 || link.width == 3 || link.width == 4);
+ if (link.width == 4)
assign_offset<uint32_t> (parent, link, offset);
+ else if (link.width == 3)
+ assign_offset<uint32_t, 3> (parent, link, offset);
else
assign_offset<uint16_t> (parent, link, offset);
}
@@ -398,22 +454,22 @@ struct hb_serialize_context_t
Type *start_embed (const Type &obj) const
{ return start_embed (hb_addressof (obj)); }
- /* Following two functions exist to allow setting breakpoint on. */
- void err_ran_out_of_room () { this->ran_out_of_room = true; }
- void err_other_error () { this->successful = false; }
+ bool err (hb_serialize_error_t err_type)
+ {
+ return !bool ((errors = (errors | err_type)));
+ }
template <typename Type>
- Type *allocate_size (unsigned int size)
+ Type *allocate_size (size_t size)
{
- if (unlikely (!this->successful)) return nullptr;
+ if (unlikely (in_error ())) return nullptr;
- if (this->tail - this->head < ptrdiff_t (size))
+ if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
{
- err_ran_out_of_room ();
- this->successful = false;
+ err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
return nullptr;
}
- memset (this->head, 0, size);
+ hb_memset (this->head, 0, size);
char *ret = this->head;
this->head += size;
return reinterpret_cast<Type *> (ret);
@@ -468,18 +524,19 @@ struct hb_serialize_context_t
hb_serialize_context_t& operator << (const Type &obj) & { embed (obj); return *this; }
template <typename Type>
- Type *extend_size (Type *obj, unsigned int size)
+ Type *extend_size (Type *obj, size_t size)
{
if (unlikely (in_error ())) return nullptr;
assert (this->start <= (char *) obj);
assert ((char *) obj <= this->head);
- assert ((char *) obj + size >= this->head);
- if (unlikely (!this->allocate_size<Type> (((char *) obj) + size - this->head))) return nullptr;
+ assert ((size_t) (this->head - (char *) obj) <= size);
+ if (unlikely (((char *) obj + size < (char *) obj) ||
+ !this->allocate_size<Type> (((char *) obj) + size - this->head))) return nullptr;
return reinterpret_cast<Type *> (obj);
}
template <typename Type>
- Type *extend_size (Type &obj, unsigned int size)
+ Type *extend_size (Type &obj, size_t size)
{ return extend_size (hb_addressof (obj), size); }
template <typename Type>
@@ -497,12 +554,16 @@ struct hb_serialize_context_t
/* Output routines. */
hb_bytes_t copy_bytes () const
{
- assert (this->successful);
+ assert (successful ());
/* Copy both items from head side and tail side... */
unsigned int len = (this->head - this->start)
+ (this->end - this->tail);
- char *p = (char *) malloc (len);
+ // If len is zero don't hb_malloc as the memory won't get properly
+ // cleaned up later.
+ if (!len) return hb_bytes_t ();
+
+ char *p = (char *) hb_malloc (len);
if (unlikely (!p)) return hb_bytes_t ();
memcpy (p, this->start, this->head - this->start);
@@ -517,23 +578,25 @@ struct hb_serialize_context_t
hb_bytes_t b = copy_bytes ();
return hb_blob_create (b.arrayZ, b.length,
HB_MEMORY_MODE_WRITABLE,
- (char *) b.arrayZ, free);
+ (char *) b.arrayZ, hb_free);
}
+ const hb_vector_t<object_t *>& object_graph() const
+ { return packed; }
+
private:
- template <typename T>
+ template <typename T, unsigned Size = sizeof (T)>
void assign_offset (const object_t* parent, const object_t::link_t &link, unsigned offset)
{
- auto &off = * ((BEInt<T> *) (parent->head + link.position));
+ auto &off = * ((BEInt<T, Size> *) (parent->head + link.position));
assert (0 == off);
- check_assign (off, offset);
+ check_assign (off, offset, HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
}
public: /* TODO Make private. */
char *start, *head, *tail, *end;
unsigned int debug_depth;
- bool successful;
- bool ran_out_of_room;
+ hb_serialize_error_t errors;
private:
@@ -550,5 +613,4 @@ struct hb_serialize_context_t
hb_hashmap_t<const object_t *, objidx_t, nullptr, 0> packed_map;
};
-
#endif /* HB_SERIALIZE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-set-digest.hh b/thirdparty/harfbuzz/src/hb-set-digest.hh
index b97526f775..1ef1ba5fb2 100644
--- a/thirdparty/harfbuzz/src/hb-set-digest.hh
+++ b/thirdparty/harfbuzz/src/hb-set-digest.hh
@@ -87,6 +87,8 @@ struct hb_set_digest_lowest_bits_t
}
}
template <typename T>
+ void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
+ template <typename T>
bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
for (unsigned int i = 0; i < count; i++)
@@ -96,6 +98,8 @@ struct hb_set_digest_lowest_bits_t
}
return true;
}
+ template <typename T>
+ bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
bool may_have (hb_codepoint_t g) const
{ return !!(mask & mask_for (g)); }
@@ -135,12 +139,16 @@ struct hb_set_digest_combiner_t
tail.add_array (array, count, stride);
}
template <typename T>
+ void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
+ template <typename T>
bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
head.add_sorted_array (array, count, stride);
tail.add_sorted_array (array, count, stride);
return true;
}
+ template <typename T>
+ bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
bool may_have (hb_codepoint_t g) const
{
diff --git a/thirdparty/harfbuzz/src/hb-set.cc b/thirdparty/harfbuzz/src/hb-set.cc
index 86bf70034c..204dbb5645 100644
--- a/thirdparty/harfbuzz/src/hb-set.cc
+++ b/thirdparty/harfbuzz/src/hb-set.cc
@@ -109,7 +109,7 @@ hb_set_destroy (hb_set_t *set)
set->fini_shallow ();
- free (set);
+ hb_free (set);
}
/**
@@ -169,7 +169,25 @@ hb_set_get_user_data (hb_set_t *set,
hb_bool_t
hb_set_allocation_successful (const hb_set_t *set)
{
- return set->successful;
+ return !set->in_error ();
+}
+
+/**
+ * hb_set_copy:
+ * @set: A set
+ *
+ * Allocate a copy of @set.
+ *
+ * Return value: Newly-allocated set.
+ *
+ * Since: 2.8.2
+ **/
+hb_set_t *
+hb_set_copy (const hb_set_t *set)
+{
+ hb_set_t *copy = hb_set_create ();
+ copy->set (*set);
+ return copy;
}
/**
@@ -183,9 +201,7 @@ hb_set_allocation_successful (const hb_set_t *set)
void
hb_set_clear (hb_set_t *set)
{
- if (unlikely (hb_object_is_immutable (set)))
- return;
-
+ /* Immutible-safe. */
set->clear ();
}
@@ -236,6 +252,7 @@ void
hb_set_add (hb_set_t *set,
hb_codepoint_t codepoint)
{
+ /* Immutible-safe. */
set->add (codepoint);
}
@@ -255,6 +272,7 @@ hb_set_add_range (hb_set_t *set,
hb_codepoint_t first,
hb_codepoint_t last)
{
+ /* Immutible-safe. */
set->add_range (first, last);
}
@@ -271,6 +289,7 @@ void
hb_set_del (hb_set_t *set,
hb_codepoint_t codepoint)
{
+ /* Immutible-safe. */
set->del (codepoint);
}
@@ -283,6 +302,9 @@ hb_set_del (hb_set_t *set,
* Removes all of the elements from @first to @last
* (inclusive) from @set.
*
+ * If @last is #HB_SET_VALUE_INVALID, then all values
+ * greater than or equal to @first are removed.
+ *
* Since: 0.9.7
**/
void
@@ -290,6 +312,7 @@ hb_set_del_range (hb_set_t *set,
hb_codepoint_t first,
hb_codepoint_t last)
{
+ /* Immutible-safe. */
set->del_range (first, last);
}
@@ -309,7 +332,7 @@ hb_bool_t
hb_set_is_equal (const hb_set_t *set,
const hb_set_t *other)
{
- return set->is_equal (other);
+ return set->is_equal (*other);
}
/**
@@ -327,7 +350,7 @@ hb_bool_t
hb_set_is_subset (const hb_set_t *set,
const hb_set_t *larger_set)
{
- return set->is_subset (larger_set);
+ return set->is_subset (*larger_set);
}
/**
@@ -343,7 +366,8 @@ void
hb_set_set (hb_set_t *set,
const hb_set_t *other)
{
- set->set (other);
+ /* Immutible-safe. */
+ set->set (*other);
}
/**
@@ -359,7 +383,8 @@ void
hb_set_union (hb_set_t *set,
const hb_set_t *other)
{
- set->union_ (other);
+ /* Immutible-safe. */
+ set->union_ (*other);
}
/**
@@ -375,7 +400,8 @@ void
hb_set_intersect (hb_set_t *set,
const hb_set_t *other)
{
- set->intersect (other);
+ /* Immutible-safe. */
+ set->intersect (*other);
}
/**
@@ -391,7 +417,8 @@ void
hb_set_subtract (hb_set_t *set,
const hb_set_t *other)
{
- set->subtract (other);
+ /* Immutible-safe. */
+ set->subtract (*other);
}
/**
@@ -408,25 +435,24 @@ void
hb_set_symmetric_difference (hb_set_t *set,
const hb_set_t *other)
{
- set->symmetric_difference (other);
+ /* Immutible-safe. */
+ set->symmetric_difference (*other);
}
-#ifndef HB_DISABLE_DEPRECATED
/**
* hb_set_invert:
* @set: A set
*
* Inverts the contents of @set.
*
- * Since: 0.9.10
- *
- * Deprecated: 1.6.1
+ * Since: 3.0.0
**/
void
-hb_set_invert (hb_set_t *set HB_UNUSED)
+hb_set_invert (hb_set_t *set)
{
+ /* Immutible-safe. */
+ set->invert ();
}
-#endif
/**
* hb_set_get_population:
diff --git a/thirdparty/harfbuzz/src/hb-set.h b/thirdparty/harfbuzz/src/hb-set.h
index 0ad27f4bbd..423225bf96 100644
--- a/thirdparty/harfbuzz/src/hb-set.h
+++ b/thirdparty/harfbuzz/src/hb-set.h
@@ -85,12 +85,18 @@ hb_set_get_user_data (hb_set_t *set,
HB_EXTERN hb_bool_t
hb_set_allocation_successful (const hb_set_t *set);
+HB_EXTERN hb_set_t *
+hb_set_copy (const hb_set_t *set);
+
HB_EXTERN void
hb_set_clear (hb_set_t *set);
HB_EXTERN hb_bool_t
hb_set_is_empty (const hb_set_t *set);
+HB_EXTERN void
+hb_set_invert (hb_set_t *set);
+
HB_EXTERN hb_bool_t
hb_set_has (const hb_set_t *set,
hb_codepoint_t codepoint);
diff --git a/thirdparty/harfbuzz/src/hb-set.hh b/thirdparty/harfbuzz/src/hb-set.hh
index ae8b5eb10f..437e234361 100644
--- a/thirdparty/harfbuzz/src/hb-set.hh
+++ b/thirdparty/harfbuzz/src/hb-set.hh
@@ -1,5 +1,6 @@
/*
* Copyright © 2012,2017 Google, Inc.
+ * Copyright © 2021 Behdad Esfahbod
*
* This is part of HarfBuzz, a text shaping library.
*
@@ -28,420 +29,67 @@
#define HB_SET_HH
#include "hb.hh"
-#include "hb-machinery.hh"
+#include "hb-bit-set-invertible.hh"
-/*
- * hb_set_t
- */
-
-/* TODO Keep a free-list so we can free pages that are completely zeroed. At that
- * point maybe also use a sentinel value for "all-1" pages? */
-
-struct hb_set_t
+template <typename impl_t>
+struct hb_sparseset_t
{
- HB_DELETE_COPY_ASSIGN (hb_set_t);
- hb_set_t () { init (); }
- ~hb_set_t () { fini (); }
-
- struct page_map_t
- {
- int cmp (const page_map_t &o) const { return (int) o.major - (int) major; }
-
- uint32_t major;
- uint32_t index;
- };
-
- struct page_t
- {
- void init0 () { v.clear (); }
- void init1 () { v.clear (0xFF); }
-
- unsigned int len () const
- { return ARRAY_LENGTH_CONST (v); }
-
- bool is_empty () const
- {
- for (unsigned int i = 0; i < len (); i++)
- if (v[i])
- return false;
- return true;
- }
-
- void add (hb_codepoint_t g) { elt (g) |= mask (g); }
- void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
- bool get (hb_codepoint_t g) const { return elt (g) & mask (g); }
-
- void add_range (hb_codepoint_t a, hb_codepoint_t b)
- {
- elt_t *la = &elt (a);
- elt_t *lb = &elt (b);
- if (la == lb)
- *la |= (mask (b) << 1) - mask(a);
- else
- {
- *la |= ~(mask (a) - 1);
- la++;
-
- memset (la, 0xff, (char *) lb - (char *) la);
-
- *lb |= ((mask (b) << 1) - 1);
- }
- }
-
- void del_range (hb_codepoint_t a, hb_codepoint_t b)
- {
- elt_t *la = &elt (a);
- elt_t *lb = &elt (b);
- if (la == lb)
- *la &= ~((mask (b) << 1) - mask(a));
- else
- {
- *la &= mask (a) - 1;
- la++;
-
- memset (la, 0, (char *) lb - (char *) la);
-
- *lb &= ~((mask (b) << 1) - 1);
- }
- }
-
- bool is_equal (const page_t *other) const
- {
- return 0 == hb_memcmp (&v, &other->v, sizeof (v));
- }
-
- unsigned int get_population () const
- {
- unsigned int pop = 0;
- for (unsigned int i = 0; i < len (); i++)
- pop += hb_popcount (v[i]);
- return pop;
- }
-
- bool next (hb_codepoint_t *codepoint) const
- {
- unsigned int m = (*codepoint + 1) & MASK;
- if (!m)
- {
- *codepoint = INVALID;
- return false;
- }
- unsigned int i = m / ELT_BITS;
- unsigned int j = m & ELT_MASK;
-
- const elt_t vv = v[i] & ~((elt_t (1) << j) - 1);
- for (const elt_t *p = &vv; i < len (); p = &v[++i])
- if (*p)
- {
- *codepoint = i * ELT_BITS + elt_get_min (*p);
- return true;
- }
-
- *codepoint = INVALID;
- return false;
- }
- bool previous (hb_codepoint_t *codepoint) const
- {
- unsigned int m = (*codepoint - 1) & MASK;
- if (m == MASK)
- {
- *codepoint = INVALID;
- return false;
- }
- unsigned int i = m / ELT_BITS;
- unsigned int j = m & ELT_MASK;
-
- /* Fancy mask to avoid shifting by elt_t bitsize, which is undefined. */
- const elt_t mask = j < 8 * sizeof (elt_t) - 1 ?
- ((elt_t (1) << (j + 1)) - 1) :
- (elt_t) -1;
- const elt_t vv = v[i] & mask;
- const elt_t *p = &vv;
- while (true)
- {
- if (*p)
- {
- *codepoint = i * ELT_BITS + elt_get_max (*p);
- return true;
- }
- if ((int) i <= 0) break;
- p = &v[--i];
- }
-
- *codepoint = INVALID;
- return false;
- }
- hb_codepoint_t get_min () const
- {
- for (unsigned int i = 0; i < len (); i++)
- if (v[i])
- return i * ELT_BITS + elt_get_min (v[i]);
- return INVALID;
- }
- hb_codepoint_t get_max () const
- {
- for (int i = len () - 1; i >= 0; i--)
- if (v[i])
- return i * ELT_BITS + elt_get_max (v[i]);
- return 0;
- }
-
- typedef unsigned long long elt_t;
- static constexpr unsigned PAGE_BITS = 512;
- static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
-
- static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); }
- static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; }
-
- typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t;
-
- static constexpr unsigned ELT_BITS = sizeof (elt_t) * 8;
- static constexpr unsigned ELT_MASK = ELT_BITS - 1;
- static constexpr unsigned BITS = sizeof (vector_t) * 8;
- static constexpr unsigned MASK = BITS - 1;
- static_assert ((unsigned) PAGE_BITS == (unsigned) BITS, "");
-
- elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; }
- elt_t const &elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; }
- elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & ELT_MASK); }
+ hb_object_header_t header;
+ impl_t s;
- vector_t v;
- };
- static_assert (page_t::PAGE_BITS == sizeof (page_t) * 8, "");
+ hb_sparseset_t () { init (); }
+ ~hb_sparseset_t () { fini (); }
- hb_object_header_t header;
- bool successful; /* Allocations successful */
- mutable unsigned int population;
- hb_sorted_vector_t<page_map_t> page_map;
- hb_vector_t<page_t> pages;
+ hb_sparseset_t (const hb_sparseset_t& other) : hb_sparseset_t () { set (other); }
+ void operator= (const hb_sparseset_t& other) { set (other); }
+ // TODO Add move construtor/assign
+ // TODO Add constructor for Iterator
- void init_shallow ()
- {
- successful = true;
- population = 0;
- page_map.init ();
- pages.init ();
- }
+ void init_shallow () { s.init (); }
void init ()
{
hb_object_init (this);
init_shallow ();
}
- void fini_shallow ()
- {
- population = 0;
- page_map.fini ();
- pages.fini ();
- }
+ void fini_shallow () { s.fini (); }
void fini ()
{
hb_object_fini (this);
fini_shallow ();
}
- bool in_error () const { return !successful; }
-
- bool resize (unsigned int count)
- {
- if (unlikely (count > pages.length && !successful)) return false;
- if (!pages.resize (count) || !page_map.resize (count))
- {
- pages.resize (page_map.length);
- successful = false;
- return false;
- }
- return true;
- }
-
- void reset ()
- {
- successful = true;
- clear ();
- }
-
- void clear ()
- {
- if (resize (0))
- population = 0;
- }
- bool is_empty () const
- {
- unsigned int count = pages.length;
- for (unsigned int i = 0; i < count; i++)
- if (!pages[i].is_empty ())
- return false;
- return true;
- }
explicit operator bool () const { return !is_empty (); }
- void dirty () { population = UINT_MAX; }
-
- void add (hb_codepoint_t g)
- {
- if (unlikely (!successful)) return;
- if (unlikely (g == INVALID)) return;
- dirty ();
- page_t *page = page_for_insert (g); if (unlikely (!page)) return;
- page->add (g);
- }
- bool add_range (hb_codepoint_t a, hb_codepoint_t b)
- {
- if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
- if (unlikely (a > b || a == INVALID || b == INVALID)) return false;
- dirty ();
- unsigned int ma = get_major (a);
- unsigned int mb = get_major (b);
- if (ma == mb)
- {
- page_t *page = page_for_insert (a); if (unlikely (!page)) return false;
- page->add_range (a, b);
- }
- else
- {
- page_t *page = page_for_insert (a); if (unlikely (!page)) return false;
- page->add_range (a, major_start (ma + 1) - 1);
+ void err () { s.err (); }
+ bool in_error () const { return s.in_error (); }
- for (unsigned int m = ma + 1; m < mb; m++)
- {
- page = page_for_insert (major_start (m)); if (unlikely (!page)) return false;
- page->init1 ();
- }
+ void reset () { s.reset (); }
+ void clear () { s.clear (); }
+ void invert () { s.invert (); }
+ bool is_empty () const { return s.is_empty (); }
- page = page_for_insert (b); if (unlikely (!page)) return false;
- page->add_range (major_start (mb), b);
- }
- return true;
- }
+ void add (hb_codepoint_t g) { s.add (g); }
+ bool add_range (hb_codepoint_t a, hb_codepoint_t b) { return s.add_range (a, b); }
template <typename T>
void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
- {
- if (unlikely (!successful)) return;
- if (!count) return;
- dirty ();
- hb_codepoint_t g = *array;
- while (count)
- {
- unsigned int m = get_major (g);
- page_t *page = page_for_insert (g); if (unlikely (!page)) return;
- unsigned int start = major_start (m);
- unsigned int end = major_start (m + 1);
- do
- {
- page->add (g);
-
- array = &StructAtOffsetUnaligned<T> (array, stride);
- count--;
- }
- while (count && (g = *array, start <= g && g < end));
- }
- }
+ { s.add_array (array, count, stride); }
+ template <typename T>
+ void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
/* Might return false if array looks unsorted.
* Used for faster rejection of corrupt data. */
template <typename T>
bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
- {
- if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
- if (!count) return true;
- dirty ();
- hb_codepoint_t g = *array;
- hb_codepoint_t last_g = g;
- while (count)
- {
- unsigned int m = get_major (g);
- page_t *page = page_for_insert (g); if (unlikely (!page)) return false;
- unsigned int end = major_start (m + 1);
- do
- {
- /* If we try harder we can change the following comparison to <=;
- * Not sure if it's worth it. */
- if (g < last_g) return false;
- last_g = g;
- page->add (g);
-
- array = (const T *) ((const char *) array + stride);
- count--;
- }
- while (count && (g = *array, g < end));
- }
- return true;
- }
-
- void del (hb_codepoint_t g)
- {
- /* TODO perform op even if !successful. */
- if (unlikely (!successful)) return;
- page_t *page = page_for (g);
- if (!page)
- return;
- dirty ();
- page->del (g);
- }
-
- private:
- void del_pages (int ds, int de)
- {
- if (ds <= de)
- {
- // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
- // before attempting to rewrite the page map.
- hb_vector_t<unsigned> compact_workspace;
- if (unlikely (!allocate_compact_workspace (compact_workspace))) return;
-
- unsigned int write_index = 0;
- for (unsigned int i = 0; i < page_map.length; i++)
- {
- int m = (int) page_map[i].major;
- if (m < ds || de < m)
- page_map[write_index++] = page_map[i];
- }
- compact (compact_workspace, write_index);
- resize (write_index);
- }
- }
+ { return s.add_sorted_array (array, count, stride); }
+ template <typename T>
+ bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
+ void del (hb_codepoint_t g) { s.del (g); }
+ void del_range (hb_codepoint_t a, hb_codepoint_t b) { s.del_range (a, b); }
- public:
- void del_range (hb_codepoint_t a, hb_codepoint_t b)
- {
- /* TODO perform op even if !successful. */
- if (unlikely (!successful)) return;
- if (unlikely (a > b || a == INVALID || b == INVALID)) return;
- dirty ();
- unsigned int ma = get_major (a);
- unsigned int mb = get_major (b);
- /* Delete pages from ds through de if ds <= de. */
- int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1);
- int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1);
- if (ds > de || (int) ma < ds)
- {
- page_t *page = page_for (a);
- if (page)
- {
- if (ma == mb)
- page->del_range (a, b);
- else
- page->del_range (a, major_start (ma + 1) - 1);
- }
- }
- if (de < (int) mb && ma != mb)
- {
- page_t *page = page_for (b);
- if (page)
- page->del_range (major_start (mb), b);
- }
- del_pages (ds, de);
- }
-
- bool get (hb_codepoint_t g) const
- {
- const page_t *page = page_for (g);
- if (!page)
- return false;
- return page->get (g);
- }
+ bool get (hb_codepoint_t g) const { return s.get (g); }
/* Has interface. */
static constexpr bool SENTINEL = false;
@@ -452,464 +100,49 @@ struct hb_set_t
bool operator () (hb_codepoint_t k) const { return has (k); }
/* Sink interface. */
- hb_set_t& operator << (hb_codepoint_t v)
+ hb_sparseset_t& operator << (hb_codepoint_t v)
{ add (v); return *this; }
- hb_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
+ hb_sparseset_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range)
{ add_range (range.first, range.second); return *this; }
bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
- {
- hb_codepoint_t c = first - 1;
- return next (&c) && c <= last;
- }
- void set (const hb_set_t *other)
- {
- if (unlikely (!successful)) return;
- unsigned int count = other->pages.length;
- if (!resize (count))
- return;
- population = other->population;
- memcpy ((void *) pages, (const void *) other->pages, count * pages.item_size);
- memcpy ((void *) page_map, (const void *) other->page_map, count * page_map.item_size);
- }
-
- bool is_equal (const hb_set_t *other) const
- {
- if (get_population () != other->get_population ())
- return false;
-
- unsigned int na = pages.length;
- unsigned int nb = other->pages.length;
+ { return s.intersects (first, last); }
- unsigned int a = 0, b = 0;
- for (; a < na && b < nb; )
- {
- if (page_at (a).is_empty ()) { a++; continue; }
- if (other->page_at (b).is_empty ()) { b++; continue; }
- if (page_map[a].major != other->page_map[b].major ||
- !page_at (a).is_equal (&other->page_at (b)))
- return false;
- a++;
- b++;
- }
- for (; a < na; a++)
- if (!page_at (a).is_empty ()) { return false; }
- for (; b < nb; b++)
- if (!other->page_at (b).is_empty ()) { return false; }
+ void set (const hb_sparseset_t &other) { s.set (other.s); }
- return true;
- }
-
- bool is_subset (const hb_set_t *larger_set) const
- {
- if (get_population () > larger_set->get_population ())
- return false;
-
- /* TODO Optimize to use pages. */
- hb_codepoint_t c = INVALID;
- while (next (&c))
- if (!larger_set->has (c))
- return false;
-
- return true;
- }
-
- bool allocate_compact_workspace(hb_vector_t<unsigned>& workspace)
- {
- if (unlikely(!workspace.resize (pages.length)))
- {
- successful = false;
- return false;
- }
-
- return true;
- }
-
-
- /*
- * workspace should be a pre-sized vector allocated to hold at exactly pages.length
- * elements.
- */
- void compact (hb_vector_t<unsigned>& workspace,
- unsigned int length)
- {
- assert(workspace.length == pages.length);
- hb_vector_t<unsigned>& old_index_to_page_map_index = workspace;
-
- hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF);
- /* TODO(iter) Rewrite as dagger? */
- for (unsigned i = 0; i < length; i++)
- old_index_to_page_map_index[page_map[i].index] = i;
-
- compact_pages (old_index_to_page_map_index);
- }
-
- void compact_pages (const hb_vector_t<unsigned>& old_index_to_page_map_index)
- {
- unsigned int write_index = 0;
- for (unsigned int i = 0; i < pages.length; i++)
- {
- if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue;
+ bool is_equal (const hb_sparseset_t &other) const { return s.is_equal (other.s); }
- if (write_index < i)
- pages[write_index] = pages[i];
+ bool is_subset (const hb_sparseset_t &larger_set) const { return s.is_subset (larger_set.s); }
- page_map[old_index_to_page_map_index[i]].index = write_index;
- write_index++;
- }
- }
-
- template <typename Op>
- void process (const Op& op, const hb_set_t *other)
- {
- const bool passthru_left = op (1, 0);
- const bool passthru_right = op (0, 1);
-
- if (unlikely (!successful)) return;
-
- dirty ();
-
- unsigned int na = pages.length;
- unsigned int nb = other->pages.length;
- unsigned int next_page = na;
-
- unsigned int count = 0, newCount = 0;
- unsigned int a = 0, b = 0;
- unsigned int write_index = 0;
-
- // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
- // before attempting to rewrite the page map.
- hb_vector_t<unsigned> compact_workspace;
- if (!passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return;
-
- for (; a < na && b < nb; )
- {
- if (page_map[a].major == other->page_map[b].major)
- {
- if (!passthru_left)
- {
- // Move page_map entries that we're keeping from the left side set
- // to the front of the page_map vector. This isn't necessary if
- // passthru_left is set since no left side pages will be removed
- // in that case.
- if (write_index < a)
- page_map[write_index] = page_map[a];
- write_index++;
- }
-
- count++;
- a++;
- b++;
- }
- else if (page_map[a].major < other->page_map[b].major)
- {
- if (passthru_left)
- count++;
- a++;
- }
- else
- {
- if (passthru_right)
- count++;
- b++;
- }
- }
- if (passthru_left)
- count += na - a;
- if (passthru_right)
- count += nb - b;
+ void union_ (const hb_sparseset_t &other) { s.union_ (other.s); }
+ void intersect (const hb_sparseset_t &other) { s.intersect (other.s); }
+ void subtract (const hb_sparseset_t &other) { s.subtract (other.s); }
+ void symmetric_difference (const hb_sparseset_t &other) { s.symmetric_difference (other.s); }
- if (!passthru_left)
- {
- na = write_index;
- next_page = write_index;
- compact (compact_workspace, write_index);
- }
-
- if (!resize (count))
- return;
-
- newCount = count;
-
- /* Process in-place backward. */
- a = na;
- b = nb;
- for (; a && b; )
- {
- if (page_map[a - 1].major == other->page_map[b - 1].major)
- {
- a--;
- b--;
- count--;
- page_map[count] = page_map[a];
- page_at (count).v = op (page_at (a).v, other->page_at (b).v);
- }
- else if (page_map[a - 1].major > other->page_map[b - 1].major)
- {
- a--;
- if (passthru_left)
- {
- count--;
- page_map[count] = page_map[a];
- }
- }
- else
- {
- b--;
- if (passthru_right)
- {
- count--;
- page_map[count].major = other->page_map[b].major;
- page_map[count].index = next_page++;
- page_at (count).v = other->page_at (b).v;
- }
- }
- }
- if (passthru_left)
- while (a)
- {
- a--;
- count--;
- page_map[count] = page_map [a];
- }
- if (passthru_right)
- while (b)
- {
- b--;
- count--;
- page_map[count].major = other->page_map[b].major;
- page_map[count].index = next_page++;
- page_at (count).v = other->page_at (b).v;
- }
- assert (!count);
- if (pages.length > newCount)
- // This resize() doesn't need to be checked because we can't get here
- // if the set is currently in_error() and this only resizes downwards
- // which will always succeed if the set is not in_error().
- resize (newCount);
- }
-
- void union_ (const hb_set_t *other)
- {
- process (hb_bitwise_or, other);
- }
- void intersect (const hb_set_t *other)
- {
- process (hb_bitwise_and, other);
- }
- void subtract (const hb_set_t *other)
- {
- process (hb_bitwise_sub, other);
- }
- void symmetric_difference (const hb_set_t *other)
- {
- process (hb_bitwise_xor, other);
- }
- bool next (hb_codepoint_t *codepoint) const
- {
- if (unlikely (*codepoint == INVALID)) {
- *codepoint = get_min ();
- return *codepoint != INVALID;
- }
-
- page_map_t map = {get_major (*codepoint), 0};
- unsigned int i;
- page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST);
- if (i < page_map.length && page_map[i].major == map.major)
- {
- if (pages[page_map[i].index].next (codepoint))
- {
- *codepoint += page_map[i].major * page_t::PAGE_BITS;
- return true;
- }
- i++;
- }
- for (; i < page_map.length; i++)
- {
- hb_codepoint_t m = pages[page_map[i].index].get_min ();
- if (m != INVALID)
- {
- *codepoint = page_map[i].major * page_t::PAGE_BITS + m;
- return true;
- }
- }
- *codepoint = INVALID;
- return false;
- }
- bool previous (hb_codepoint_t *codepoint) const
- {
- if (unlikely (*codepoint == INVALID)) {
- *codepoint = get_max ();
- return *codepoint != INVALID;
- }
-
- page_map_t map = {get_major (*codepoint), 0};
- unsigned int i;
- page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST);
- if (i < page_map.length && page_map[i].major == map.major)
- {
- if (pages[page_map[i].index].previous (codepoint))
- {
- *codepoint += page_map[i].major * page_t::PAGE_BITS;
- return true;
- }
- }
- i--;
- for (; (int) i >= 0; i--)
- {
- hb_codepoint_t m = pages[page_map[i].index].get_max ();
- if (m != INVALID)
- {
- *codepoint = page_map[i].major * page_t::PAGE_BITS + m;
- return true;
- }
- }
- *codepoint = INVALID;
- return false;
- }
+ bool next (hb_codepoint_t *codepoint) const { return s.next (codepoint); }
+ bool previous (hb_codepoint_t *codepoint) const { return s.previous (codepoint); }
bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
- {
- hb_codepoint_t i;
-
- i = *last;
- if (!next (&i))
- {
- *last = *first = INVALID;
- return false;
- }
-
- /* TODO Speed up. */
- *last = *first = i;
- while (next (&i) && i == *last + 1)
- (*last)++;
-
- return true;
- }
+ { return s.next_range (first, last); }
bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
- {
- hb_codepoint_t i;
+ { return s.previous_range (first, last); }
- i = *first;
- if (!previous (&i))
- {
- *last = *first = INVALID;
- return false;
- }
-
- /* TODO Speed up. */
- *last = *first = i;
- while (previous (&i) && i == *first - 1)
- (*first)--;
-
- return true;
- }
-
- unsigned int get_population () const
- {
- if (population != UINT_MAX)
- return population;
+ unsigned int get_population () const { return s.get_population (); }
+ hb_codepoint_t get_min () const { return s.get_min (); }
+ hb_codepoint_t get_max () const { return s.get_max (); }
- unsigned int pop = 0;
- unsigned int count = pages.length;
- for (unsigned int i = 0; i < count; i++)
- pop += pages[i].get_population ();
-
- population = pop;
- return pop;
- }
- hb_codepoint_t get_min () const
- {
- unsigned int count = pages.length;
- for (unsigned int i = 0; i < count; i++)
- if (!page_at (i).is_empty ())
- return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_min ();
- return INVALID;
- }
- hb_codepoint_t get_max () const
- {
- unsigned int count = pages.length;
- for (int i = count - 1; i >= 0; i++)
- if (!page_at (i).is_empty ())
- return page_map[(unsigned) i].major * page_t::PAGE_BITS + page_at (i).get_max ();
- return INVALID;
- }
-
- static constexpr hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
+ static constexpr hb_codepoint_t INVALID = impl_t::INVALID;
/*
* Iterator implementation.
*/
- struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
- {
- static constexpr bool is_sorted_iterator = true;
- iter_t (const hb_set_t &s_ = Null (hb_set_t),
- bool init = true) : s (&s_), v (INVALID), l(0)
- {
- if (init)
- {
- l = s->get_population () + 1;
- __next__ ();
- }
- }
-
- typedef hb_codepoint_t __item_t__;
- hb_codepoint_t __item__ () const { return v; }
- bool __more__ () const { return v != INVALID; }
- void __next__ () { s->next (&v); if (l) l--; }
- void __prev__ () { s->previous (&v); }
- unsigned __len__ () const { return l; }
- iter_t end () const { return iter_t (*s, false); }
- bool operator != (const iter_t& o) const
- { return s != o.s || v != o.v; }
-
- protected:
- const hb_set_t *s;
- hb_codepoint_t v;
- unsigned l;
- };
- iter_t iter () const { return iter_t (*this); }
+ using iter_t = typename impl_t::iter_t;
+ iter_t iter () const { return iter_t (this->s); }
operator iter_t () const { return iter (); }
+};
- protected:
-
- page_t *page_for_insert (hb_codepoint_t g)
- {
- page_map_t map = {get_major (g), pages.length};
- unsigned int i;
- if (!page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST))
- {
- if (!resize (pages.length + 1))
- return nullptr;
+struct hb_set_t : hb_sparseset_t<hb_bit_set_invertible_t> {};
- pages[map.index].init0 ();
- memmove (page_map + i + 1,
- page_map + i,
- (page_map.length - 1 - i) * page_map.item_size);
- page_map[i] = map;
- }
- return &pages[page_map[i].index];
- }
- page_t *page_for (hb_codepoint_t g)
- {
- page_map_t key = {get_major (g)};
- const page_map_t *found = page_map.bsearch (key);
- if (found)
- return &pages[found->index];
- return nullptr;
- }
- const page_t *page_for (hb_codepoint_t g) const
- {
- page_map_t key = {get_major (g)};
- const page_map_t *found = page_map.bsearch (key);
- if (found)
- return &pages[found->index];
- return nullptr;
- }
- page_t &page_at (unsigned int i) { return pages[page_map[i].index]; }
- const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; }
- unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; }
- hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; }
-};
+static_assert (hb_set_t::INVALID == HB_SET_VALUE_INVALID, "");
#endif /* HB_SET_HH */
diff --git a/thirdparty/harfbuzz/src/hb-shape-plan.cc b/thirdparty/harfbuzz/src/hb-shape-plan.cc
index 0d9eaddaa6..66332165c3 100644
--- a/thirdparty/harfbuzz/src/hb-shape-plan.cc
+++ b/thirdparty/harfbuzz/src/hb-shape-plan.cc
@@ -66,7 +66,7 @@ hb_shape_plan_key_t::init (bool copy,
const char * const *shaper_list)
{
hb_feature_t *features = nullptr;
- if (copy && num_user_features && !(features = (hb_feature_t *) calloc (num_user_features, sizeof (hb_feature_t))))
+ if (copy && num_user_features && !(features = (hb_feature_t *) hb_calloc (num_user_features, sizeof (hb_feature_t))))
goto bail;
this->props = *props;
@@ -130,7 +130,7 @@ hb_shape_plan_key_t::init (bool copy,
#undef HB_SHAPER_PLAN
bail:
- ::free (features);
+ ::hb_free (features);
return false;
}
@@ -264,9 +264,9 @@ hb_shape_plan_create2 (hb_face_t *face,
#ifndef HB_NO_OT_SHAPE
bail3:
#endif
- shape_plan->key.free ();
+ shape_plan->key.fini ();
bail2:
- free (shape_plan);
+ hb_free (shape_plan);
bail:
return hb_shape_plan_get_empty ();
}
@@ -320,8 +320,8 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
#ifndef HB_NO_OT_SHAPE
shape_plan->ot.fini ();
#endif
- shape_plan->key.free ();
- free (shape_plan);
+ shape_plan->key.fini ();
+ hb_free (shape_plan);
}
/**
@@ -404,7 +404,7 @@ _hb_shape_plan_execute_internal (hb_shape_plan_t *shape_plan,
buffer->assert_unicode ();
- if (unlikely (hb_object_is_inert (shape_plan)))
+ if (unlikely (!hb_object_is_valid (shape_plan)))
return false;
assert (shape_plan->face_unsafe == font->face);
@@ -529,7 +529,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face,
retry:
hb_face_t::plan_node_t *cached_plan_nodes = face->shape_plans;
- bool dont_cache = hb_object_is_inert (face);
+ bool dont_cache = !hb_object_is_valid (face);
if (likely (!dont_cache))
{
@@ -560,7 +560,7 @@ retry:
if (unlikely (dont_cache))
return shape_plan;
- hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) calloc (1, sizeof (hb_face_t::plan_node_t));
+ hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) hb_calloc (1, sizeof (hb_face_t::plan_node_t));
if (unlikely (!node))
return shape_plan;
@@ -570,7 +570,7 @@ retry:
if (unlikely (!face->shape_plans.cmpexch (cached_plan_nodes, node)))
{
hb_shape_plan_destroy (shape_plan);
- free (node);
+ hb_free (node);
goto retry;
}
DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan, "inserted into cache");
diff --git a/thirdparty/harfbuzz/src/hb-shape-plan.hh b/thirdparty/harfbuzz/src/hb-shape-plan.hh
index 6da7edb2f8..8cb4ddb927 100644
--- a/thirdparty/harfbuzz/src/hb-shape-plan.hh
+++ b/thirdparty/harfbuzz/src/hb-shape-plan.hh
@@ -55,7 +55,7 @@ struct hb_shape_plan_key_t
unsigned int num_coords,
const char * const *shaper_list);
- HB_INTERNAL void free () { ::free ((void *) user_features); }
+ HB_INTERNAL void fini () { hb_free ((void *) user_features); }
HB_INTERNAL bool user_features_match (const hb_shape_plan_key_t *other);
diff --git a/thirdparty/harfbuzz/src/hb-shape.cc b/thirdparty/harfbuzz/src/hb-shape.cc
index c442f4403b..c1f619c81c 100644
--- a/thirdparty/harfbuzz/src/hb-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-shape.cc
@@ -48,9 +48,7 @@
**/
-#if HB_USE_ATEXIT
-static void free_static_shaper_list ();
-#endif
+static inline void free_static_shaper_list ();
static const char *nil_shaper_list[] = {nullptr};
@@ -59,7 +57,7 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
{
static const char ** create ()
{
- const char **shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
+ const char **shaper_list = (const char **) hb_calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
if (unlikely (!shaper_list))
return nullptr;
@@ -69,25 +67,21 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
shaper_list[i] = shapers[i].name;
shaper_list[i] = nullptr;
-#if HB_USE_ATEXIT
- atexit (free_static_shaper_list);
-#endif
+ hb_atexit (free_static_shaper_list);
return shaper_list;
}
static void destroy (const char **l)
- { free (l); }
+ { hb_free (l); }
static const char ** get_null ()
{ return nil_shaper_list; }
} static_shaper_list;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_shaper_list ()
{
static_shaper_list.free_instance ();
}
-#endif
/**
diff --git a/thirdparty/harfbuzz/src/hb-shaper.cc b/thirdparty/harfbuzz/src/hb-shaper.cc
index 0ea68ad1f5..a11ed83afd 100644
--- a/thirdparty/harfbuzz/src/hb-shaper.cc
+++ b/thirdparty/harfbuzz/src/hb-shaper.cc
@@ -38,9 +38,7 @@ static const hb_shaper_entry_t all_shapers[] = {
static_assert (0 != ARRAY_LENGTH_CONST (all_shapers), "No shaper enabled.");
#endif
-#if HB_USE_ATEXIT
-static void free_static_shapers ();
-#endif
+static inline void free_static_shapers ();
static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_t,
hb_shapers_lazy_loader_t>
@@ -51,7 +49,7 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_
if (!env || !*env)
return nullptr;
- hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) calloc (1, sizeof (all_shapers));
+ hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) hb_calloc (1, sizeof (all_shapers));
if (unlikely (!shapers))
return nullptr;
@@ -83,23 +81,19 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_
p = end + 1;
}
-#if HB_USE_ATEXIT
- atexit (free_static_shapers);
-#endif
+ hb_atexit (free_static_shapers);
return shapers;
}
- static void destroy (const hb_shaper_entry_t *p) { free ((void *) p); }
+ static void destroy (const hb_shaper_entry_t *p) { hb_free ((void *) p); }
static const hb_shaper_entry_t *get_null () { return all_shapers; }
} static_shapers;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_shapers ()
{
static_shapers.free_instance ();
}
-#endif
const hb_shaper_entry_t *
_hb_shapers_get ()
diff --git a/thirdparty/harfbuzz/src/hb-static.cc b/thirdparty/harfbuzz/src/hb-static.cc
index f5b7fa50a0..ec4b241470 100644
--- a/thirdparty/harfbuzz/src/hb-static.cc
+++ b/thirdparty/harfbuzz/src/hb-static.cc
@@ -43,6 +43,7 @@ uint64_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (uint64_t) - 1) / sizeof
/*thread_local*/ uint64_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (uint64_t) - 1) / sizeof (uint64_t)] = {};
DEFINE_NULL_NAMESPACE_BYTES (OT, Index) = {0xFF,0xFF};
+DEFINE_NULL_NAMESPACE_BYTES (OT, VarIdx) = {0xFF,0xFF,0xFF,0xFF};
DEFINE_NULL_NAMESPACE_BYTES (OT, LangSys) = {0x00,0x00, 0xFF,0xFF, 0x00,0x00};
DEFINE_NULL_NAMESPACE_BYTES (OT, RangeRecord) = {0x00,0x01, 0x00,0x00, 0x00, 0x00};
DEFINE_NULL_NAMESPACE_BYTES (OT, CmapSubtableLongGroup) = {0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
diff --git a/thirdparty/harfbuzz/src/hb-style.cc b/thirdparty/harfbuzz/src/hb-style.cc
index 2f45d119f9..dfb1017c88 100644
--- a/thirdparty/harfbuzz/src/hb-style.cc
+++ b/thirdparty/harfbuzz/src/hb-style.cc
@@ -25,7 +25,6 @@
#include "hb.hh"
#ifndef HB_NO_STYLE
-#ifdef HB_EXPERIMENTAL_API
#include "hb-ot-var-avar-table.hh"
#include "hb-ot-var-fvar-table.hh"
@@ -36,56 +35,46 @@
#include "hb-ot-face.hh"
/**
- * hb_style_tag_t:
- * @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.
- * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
- * be interpreted as (fully) italic.
- * @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.
- * Non-zero. Values can be interpreted as text size, in points.
- * @HB_STYLE_TAG_SLANT: Used to vary between upright and slanted text. Values
- * must be greater than -90 and less than +90. Values can be interpreted as
- * the angle, in counter-clockwise degrees, of oblique slant from whatever the
- * designer considers to be upright for that font design.
- * @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
- * Non-zero. Values can be interpreted as a percentage of whatever the font
- * designer considers “normal width” for that font design.
- * @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details
- * to give variation from lighter to blacker. Values can be interpreted in direct
- * comparison to values for usWeightClass in the OS/2 table,
- * or the CSS font-weight property.
+ * SECTION:hb-style
+ * @title: hb-style
+ * @short_description: Font Styles
+ * @include: hb.h
*
- * Defined by https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg
- *
- * Since: EXPERIMENTAL
+ * Functions for fetching style information from fonts.
**/
-typedef enum {
- HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'),
- HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'),
- HB_STYLE_TAG_SLANT = HB_TAG ('s','l','n','t'),
- HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'),
- HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'),
- /*< private >*/
- _HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
-} hb_style_tag_t;
+static inline float
+_hb_angle_to_ratio (float a)
+{
+ return tanf (a * float (M_PI / 180.));
+}
+#if 0
+static inline float
+_hb_ratio_to_angle (float r)
+{
+ return atanf (r) * float (180. / M_PI);
+}
+#endif
/**
* hb_style_get_value:
* @font: a #hb_font_t object.
* @style_tag: a style tag.
*
- * Searches variation axes of a hb_font_t object for a specific axis first,
+ * Searches variation axes of a #hb_font_t object for a specific axis first,
* if not set, then tries to get default style values from different
* tables of the font.
*
* Returns: Corresponding axis or default value to a style tag.
*
- * Since: EXPERIMENTAL
+ * Since: 3.0.0
**/
float
-hb_style_get_value (hb_font_t *font, hb_tag_t tag)
+hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
{
- hb_style_tag_t style_tag = (hb_style_tag_t) tag;
+ if (unlikely (style_tag == HB_STYLE_TAG_SLANT_RATIO))
+ return _hb_angle_to_ratio (hb_style_get_value (font, HB_STYLE_TAG_SLANT_ANGLE));
+
hb_face_t *face = font->face;
#ifndef HB_NO_VAR
@@ -112,12 +101,14 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag)
return face->table.OS2->is_italic () || face->table.head->is_italic () ? 1 : 0;
case HB_STYLE_TAG_OPTICAL_SIZE:
{
- unsigned int lower, upper;
+ unsigned int lower, design, upper;
return face->table.OS2->v5 ().get_optical_size (&lower, &upper)
? (float) (lower + upper) / 2.f
+ : hb_ot_layout_get_size_params (face, &design, nullptr, nullptr, nullptr, nullptr)
+ ? design / 10.f
: 12.f;
}
- case HB_STYLE_TAG_SLANT:
+ case HB_STYLE_TAG_SLANT_ANGLE:
return face->table.post->table->italicAngle.to_float ();
case HB_STYLE_TAG_WIDTH:
return face->table.OS2->has_data ()
@@ -133,4 +124,3 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag)
}
#endif
-#endif
diff --git a/thirdparty/harfbuzz/src/hb-style.h b/thirdparty/harfbuzz/src/hb-style.h
index f5776cee58..30a6f2b878 100644
--- a/thirdparty/harfbuzz/src/hb-style.h
+++ b/thirdparty/harfbuzz/src/hb-style.h
@@ -33,10 +33,46 @@
HB_BEGIN_DECLS
-#ifdef HB_EXPERIMENTAL_API
+/**
+ * hb_style_tag_t:
+ * @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.
+ * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
+ * be interpreted as (fully) italic.
+ * @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.
+ * Non-zero. Values can be interpreted as text size, in points.
+ * @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values
+ * must be greater than -90 and less than +90. Values can be interpreted as
+ * the angle, in counter-clockwise degrees, of oblique slant from whatever the
+ * designer considers to be upright for that font design.
+ * @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.
+ * @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
+ * Non-zero. Values can be interpreted as a percentage of whatever the font
+ * designer considers “normal width” for that font design.
+ * @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details
+ * to give variation from lighter to blacker. Values can be interpreted in direct
+ * comparison to values for usWeightClass in the OS/2 table,
+ * or the CSS font-weight property.
+ *
+ * Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).
+ *
+ * Since: 3.0.0
+ **/
+typedef enum
+{
+ HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'),
+ HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'),
+ HB_STYLE_TAG_SLANT_ANGLE = HB_TAG ('s','l','n','t'),
+ HB_STYLE_TAG_SLANT_RATIO = HB_TAG ('S','l','n','t'),
+ HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'),
+ HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'),
+
+ /*< private >*/
+ _HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
+} hb_style_tag_t;
+
+
HB_EXTERN float
-hb_style_get_value (hb_font_t *font, hb_tag_t style_tag);
-#endif
+hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag);
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff-common.cc b/thirdparty/harfbuzz/src/hb-subset-cff-common.cc
index 04e1db24ac..711b2236d6 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff-common.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-cff-common.cc
@@ -38,13 +38,12 @@
using namespace CFF;
-/**
- * hb_plan_subset_cff_fdselect
- * Determine an optimal FDSelect format according to a provided plan.
+
+/* Determine an optimal FDSelect format according to a provided plan.
*
* Return value: FDSelect format, size, and ranges for the most compact subset FDSelect
* along with a font index remapping table
- **/
+ */
bool
hb_plan_subset_cff_fdselect (const hb_subset_plan_t *plan,
@@ -169,10 +168,7 @@ serialize_fdselect_3_4 (hb_serialize_context_t *c,
return_trace (true);
}
-/**
- * hb_serialize_cff_fdselect
- * Serialize a subset FDSelect format planned above.
- **/
+/* Serialize a subset FDSelect format planned above. */
bool
hb_serialize_cff_fdselect (hb_serialize_context_t *c,
const unsigned int num_glyphs,
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
index 422b20b8d0..7fd96ca86d 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
@@ -259,7 +259,10 @@ struct subr_flattener_t
return false;
cs_interpreter_t<ENV, OPSET, flatten_param_t> interp;
interp.env.init (str, acc, fd);
- flatten_param_t param = { flat_charstrings[i], plan->drop_hints };
+ flatten_param_t param = {
+ flat_charstrings[i],
+ (bool) (plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
+ };
if (unlikely (!interp.interpret (param)))
return false;
}
@@ -636,7 +639,7 @@ struct subr_subsetter_t
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
closures.global_closure, closures.local_closures[fd],
- plan->drop_hints);
+ plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
if (unlikely (!interp.interpret (param)))
return false;
@@ -645,7 +648,7 @@ struct subr_subsetter_t
SUBSETTER::complete_parsed_str (interp.env, param, parsed_charstrings[i]);
}
- if (plan->drop_hints)
+ if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING)
{
/* mark hint ops and arguments for drop */
for (unsigned int i = 0; i < plan->num_output_glyphs (); i++)
@@ -660,7 +663,7 @@ struct subr_subsetter_t
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
closures.global_closure, closures.local_closures[fd],
- plan->drop_hints);
+ plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
drop_hints_param_t drop;
if (drop_hints_in_str (parsed_charstrings[i], param, drop))
@@ -685,7 +688,7 @@ struct subr_subsetter_t
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
closures.global_closure, closures.local_closures[fd],
- plan->drop_hints);
+ plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
collect_subr_refs_in_str (parsed_charstrings[i], param);
}
}
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff1.cc b/thirdparty/harfbuzz/src/hb-subset-cff1.cc
index df322f8451..b4e24122c9 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff1.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-cff1.cc
@@ -402,7 +402,7 @@ struct cff_subset_plan {
void plan_subset_encoding (const OT::cff1::accelerator_subset_t &acc, hb_subset_plan_t *plan)
{
const Encoding *encoding = acc.encoding;
- unsigned int size0, size1, supp_size;
+ unsigned int size0, size1;
hb_codepoint_t code, last_code = CFF_UNDEF_CODE;
hb_vector_t<hb_codepoint_t> supp_codes;
@@ -412,7 +412,6 @@ struct cff_subset_plan {
return;
}
- supp_size = 0;
supp_codes.init ();
subset_enc_num_codes = plan->num_output_glyphs () - 1;
@@ -448,7 +447,6 @@ struct cff_subset_plan {
code_pair_t pair = { supp_codes[i], sid };
subset_enc_supp_codes.push (pair);
}
- supp_size += SuppEncoding::static_size * supp_codes.length;
}
}
supp_codes.fini ();
@@ -545,8 +543,8 @@ struct cff_subset_plan {
num_glyphs = plan->num_output_glyphs ();
orig_fdcount = acc.fdCount;
- drop_hints = plan->drop_hints;
- desubroutinize = plan->desubroutinize;
+ drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING;
+ desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE;
/* check whether the subset renumbers any glyph IDs */
gid_renum = false;
@@ -919,12 +917,6 @@ _hb_subset_cff1 (const OT::cff1::accelerator_subset_t &acc,
return _serialize_cff1 (c->serializer, cff_plan, acc, c->plan->num_output_glyphs ());
}
-/**
- * hb_subset_cff1:
- * Subsets the CFF table according to a provided plan.
- *
- * Return value: subsetted cff table.
- **/
bool
hb_subset_cff1 (hb_subset_context_t *c)
{
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff2.cc b/thirdparty/harfbuzz/src/hb-subset-cff2.cc
index 17ee040deb..896ae64016 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff2.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-cff2.cc
@@ -262,8 +262,8 @@ struct cff2_subset_plan {
{
orig_fdcount = acc.fdArray->count;
- drop_hints = plan->drop_hints;
- desubroutinize = plan->desubroutinize;
+ drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING;
+ desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE;
if (desubroutinize)
{
@@ -470,10 +470,6 @@ _hb_subset_cff2 (const OT::cff2::accelerator_subset_t &acc,
return _serialize_cff2 (c->serializer, cff2_plan, acc, c->plan->num_output_glyphs ());
}
-/**
- * hb_subset_cff2:
- * Subsets the CFF2 table according to a provided subset context.
- **/
bool
hb_subset_cff2 (hb_subset_context_t *c)
{
diff --git a/thirdparty/harfbuzz/src/hb-subset-input.cc b/thirdparty/harfbuzz/src/hb-subset-input.cc
index fe9be3ce02..4885280996 100644
--- a/thirdparty/harfbuzz/src/hb-subset-input.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-input.cc
@@ -30,35 +30,37 @@
/**
* hb_subset_input_create_or_fail:
*
- * Return value: New subset input.
+ * Creates a new subset input object.
+ *
+ * Return value: (transfer full): New subset input, or %NULL if failed. Destroy
+ * with hb_subset_input_destroy().
*
* Since: 1.8.0
**/
hb_subset_input_t *
-hb_subset_input_create_or_fail ()
+hb_subset_input_create_or_fail (void)
{
hb_subset_input_t *input = hb_object_create<hb_subset_input_t>();
if (unlikely (!input))
return nullptr;
- input->unicodes = hb_set_create ();
- input->glyphs = hb_set_create ();
- input->name_ids = hb_set_create ();
- hb_set_add_range (input->name_ids, 0, 6);
- input->name_languages = hb_set_create ();
- hb_set_add (input->name_languages, 0x0409);
- input->drop_tables = hb_set_create ();
- input->drop_hints = false;
- input->desubroutinize = false;
- input->retain_gids = false;
- input->name_legacy = false;
+ for (auto& set : input->sets_iter ())
+ set = hb_set_create ();
+
+ if (input->in_error ())
+ {
+ hb_subset_input_destroy (input);
+ return nullptr;
+ }
+
+ input->flags = HB_SUBSET_FLAGS_DEFAULT;
+
+ hb_set_add_range (input->sets.name_ids, 0, 6);
+ hb_set_add (input->sets.name_languages, 0x0409);
hb_tag_t default_drop_tables[] = {
// Layout disabled by default
- HB_TAG ('G', 'S', 'U', 'B'),
- HB_TAG ('G', 'P', 'O', 'S'),
- HB_TAG ('G', 'D', 'E', 'F'),
HB_TAG ('m', 'o', 'r', 'x'),
HB_TAG ('m', 'o', 'r', 't'),
HB_TAG ('k', 'e', 'r', 'x'),
@@ -81,149 +83,281 @@ hb_subset_input_create_or_fail ()
HB_TAG ('S', 'i', 'l', 'f'),
HB_TAG ('S', 'i', 'l', 'l'),
};
+ input->sets.drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables));
+
+ hb_tag_t default_no_subset_tables[] = {
+ HB_TAG ('a', 'v', 'a', 'r'),
+ HB_TAG ('f', 'v', 'a', 'r'),
+ HB_TAG ('g', 'a', 's', 'p'),
+ HB_TAG ('c', 'v', 't', ' '),
+ HB_TAG ('f', 'p', 'g', 'm'),
+ HB_TAG ('p', 'r', 'e', 'p'),
+ HB_TAG ('V', 'D', 'M', 'X'),
+ HB_TAG ('D', 'S', 'I', 'G'),
+ HB_TAG ('M', 'V', 'A', 'R'),
+ HB_TAG ('c', 'v', 'a', 'r'),
+ HB_TAG ('S', 'T', 'A', 'T'),
+ };
+ input->sets.no_subset_tables->add_array (default_no_subset_tables,
+ ARRAY_LENGTH (default_no_subset_tables));
+
+ //copied from _layout_features_groups in fonttools
+ hb_tag_t default_layout_features[] = {
+ // default shaper
+ // common
+ HB_TAG ('r', 'v', 'r', 'n'),
+ HB_TAG ('c', 'c', 'm', 'p'),
+ HB_TAG ('l', 'i', 'g', 'a'),
+ HB_TAG ('l', 'o', 'c', 'l'),
+ HB_TAG ('m', 'a', 'r', 'k'),
+ HB_TAG ('m', 'k', 'm', 'k'),
+ HB_TAG ('r', 'l', 'i', 'g'),
- input->drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables));
+ //fractions
+ HB_TAG ('f', 'r', 'a', 'c'),
+ HB_TAG ('n', 'u', 'm', 'r'),
+ HB_TAG ('d', 'n', 'o', 'm'),
+ //horizontal
+ HB_TAG ('c', 'a', 'l', 't'),
+ HB_TAG ('c', 'l', 'i', 'g'),
+ HB_TAG ('c', 'u', 'r', 's'),
+ HB_TAG ('k', 'e', 'r', 'n'),
+ HB_TAG ('r', 'c', 'l', 't'),
+
+ //vertical
+ HB_TAG ('v', 'a', 'l', 't'),
+ HB_TAG ('v', 'e', 'r', 't'),
+ HB_TAG ('v', 'k', 'r', 'n'),
+ HB_TAG ('v', 'p', 'a', 'l'),
+ HB_TAG ('v', 'r', 't', '2'),
+
+ //ltr
+ HB_TAG ('l', 't', 'r', 'a'),
+ HB_TAG ('l', 't', 'r', 'm'),
+
+ //rtl
+ HB_TAG ('r', 't', 'l', 'a'),
+ HB_TAG ('r', 't', 'l', 'm'),
+
+ //Complex shapers
+ //arabic
+ HB_TAG ('i', 'n', 'i', 't'),
+ HB_TAG ('m', 'e', 'd', 'i'),
+ HB_TAG ('f', 'i', 'n', 'a'),
+ HB_TAG ('i', 's', 'o', 'l'),
+ HB_TAG ('m', 'e', 'd', '2'),
+ HB_TAG ('f', 'i', 'n', '2'),
+ HB_TAG ('f', 'i', 'n', '3'),
+ HB_TAG ('c', 's', 'w', 'h'),
+ HB_TAG ('m', 's', 'e', 't'),
+ HB_TAG ('s', 't', 'c', 'h'),
+
+ //hangul
+ HB_TAG ('l', 'j', 'm', 'o'),
+ HB_TAG ('v', 'j', 'm', 'o'),
+ HB_TAG ('t', 'j', 'm', 'o'),
+
+ //tibetan
+ HB_TAG ('a', 'b', 'v', 's'),
+ HB_TAG ('b', 'l', 'w', 's'),
+ HB_TAG ('a', 'b', 'v', 'm'),
+ HB_TAG ('b', 'l', 'w', 'm'),
+
+ //indic
+ HB_TAG ('n', 'u', 'k', 't'),
+ HB_TAG ('a', 'k', 'h', 'n'),
+ HB_TAG ('r', 'p', 'h', 'f'),
+ HB_TAG ('r', 'k', 'r', 'f'),
+ HB_TAG ('p', 'r', 'e', 'f'),
+ HB_TAG ('b', 'l', 'w', 'f'),
+ HB_TAG ('h', 'a', 'l', 'f'),
+ HB_TAG ('a', 'b', 'v', 'f'),
+ HB_TAG ('p', 's', 't', 'f'),
+ HB_TAG ('c', 'f', 'a', 'r'),
+ HB_TAG ('v', 'a', 't', 'u'),
+ HB_TAG ('c', 'j', 'c', 't'),
+ HB_TAG ('i', 'n', 'i', 't'),
+ HB_TAG ('p', 'r', 'e', 's'),
+ HB_TAG ('a', 'b', 'v', 's'),
+ HB_TAG ('b', 'l', 'w', 's'),
+ HB_TAG ('p', 's', 't', 's'),
+ HB_TAG ('h', 'a', 'l', 'n'),
+ HB_TAG ('d', 'i', 's', 't'),
+ HB_TAG ('a', 'b', 'v', 'm'),
+ HB_TAG ('b', 'l', 'w', 'm'),
+ };
+
+ input->sets.layout_features->add_array (default_layout_features, ARRAY_LENGTH (default_layout_features));
+
+ if (input->in_error ())
+ {
+ hb_subset_input_destroy (input);
+ return nullptr;
+ }
return input;
}
/**
* hb_subset_input_reference: (skip)
- * @subset_input: a subset_input.
+ * @input: a #hb_subset_input_t object.
*
+ * Increases the reference count on @input.
*
- *
- * Return value:
+ * Return value: @input.
*
* Since: 1.8.0
**/
hb_subset_input_t *
-hb_subset_input_reference (hb_subset_input_t *subset_input)
+hb_subset_input_reference (hb_subset_input_t *input)
{
- return hb_object_reference (subset_input);
+ return hb_object_reference (input);
}
/**
* hb_subset_input_destroy:
- * @subset_input: a subset_input.
+ * @input: a #hb_subset_input_t object.
+ *
+ * Decreases the reference count on @input, and if it reaches zero, destroys
+ * @input, freeing all memory.
*
* Since: 1.8.0
**/
void
-hb_subset_input_destroy (hb_subset_input_t *subset_input)
+hb_subset_input_destroy (hb_subset_input_t *input)
{
- if (!hb_object_destroy (subset_input)) return;
+ if (!hb_object_destroy (input)) return;
- hb_set_destroy (subset_input->unicodes);
- hb_set_destroy (subset_input->glyphs);
- hb_set_destroy (subset_input->name_ids);
- hb_set_destroy (subset_input->name_languages);
- hb_set_destroy (subset_input->drop_tables);
+ for (hb_set_t* set : input->sets_iter ())
+ hb_set_destroy (set);
- free (subset_input);
+ hb_free (input);
}
/**
* hb_subset_input_unicode_set:
- * @subset_input: a subset_input.
+ * @input: a #hb_subset_input_t object.
+ *
+ * Gets the set of Unicode code points to retain, the caller should modify the
+ * set as needed.
+ *
+ * Return value: (transfer none): pointer to the #hb_set_t of Unicode code
+ * points.
*
* Since: 1.8.0
**/
HB_EXTERN hb_set_t *
-hb_subset_input_unicode_set (hb_subset_input_t *subset_input)
+hb_subset_input_unicode_set (hb_subset_input_t *input)
{
- return subset_input->unicodes;
+ return input->sets.unicodes;
}
/**
* hb_subset_input_glyph_set:
- * @subset_input: a subset_input.
+ * @input: a #hb_subset_input_t object.
+ *
+ * Gets the set of glyph IDs to retain, the caller should modify the set as
+ * needed.
+ *
+ * Return value: (transfer none): pointer to the #hb_set_t of glyph IDs.
*
* Since: 1.8.0
**/
HB_EXTERN hb_set_t *
-hb_subset_input_glyph_set (hb_subset_input_t *subset_input)
-{
- return subset_input->glyphs;
-}
-
-HB_EXTERN hb_set_t *
-hb_subset_input_nameid_set (hb_subset_input_t *subset_input)
-{
- return subset_input->name_ids;
-}
-
-HB_EXTERN hb_set_t *
-hb_subset_input_namelangid_set (hb_subset_input_t *subset_input)
+hb_subset_input_glyph_set (hb_subset_input_t *input)
{
- return subset_input->name_languages;
+ return input->sets.glyphs;
}
+/**
+ * hb_subset_input_set:
+ * @input: a #hb_subset_input_t object.
+ * @set_type: a #hb_subset_sets_t set type.
+ *
+ * Gets the set of the specified type.
+ *
+ * Return value: (transfer none): pointer to the #hb_set_t of the specified type.
+ *
+ * Since: 2.9.1
+ **/
HB_EXTERN hb_set_t *
-hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input)
-{
- return subset_input->drop_tables;
-}
-
-HB_EXTERN void
-hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input,
- hb_bool_t drop_hints)
+hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type)
{
- subset_input->drop_hints = drop_hints;
+ return input->sets_iter () [set_type];
}
-HB_EXTERN hb_bool_t
-hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input)
-{
- return subset_input->drop_hints;
-}
-
-HB_EXTERN void
-hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
- hb_bool_t desubroutinize)
-{
- subset_input->desubroutinize = desubroutinize;
-}
-
-HB_EXTERN hb_bool_t
-hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input)
+/**
+ * hb_subset_input_get_flags:
+ * @input: a #hb_subset_input_t object.
+ *
+ * Gets all of the subsetting flags in the input object.
+ *
+ * Return value: the subsetting flags bit field.
+ *
+ * Since: 2.9.0
+ **/
+HB_EXTERN hb_subset_flags_t
+hb_subset_input_get_flags (hb_subset_input_t *input)
{
- return subset_input->desubroutinize;
+ return (hb_subset_flags_t) input->flags;
}
/**
- * hb_subset_input_set_retain_gids:
- * @subset_input: a subset_input.
- * @retain_gids: If true the subsetter will not renumber glyph ids.
- * Since: 2.4.0
+ * hb_subset_input_set_flags:
+ * @input: a #hb_subset_input_t object.
+ * @value: bit field of flags
+ *
+ * Sets all of the flags in the input object to the values specified by the bit
+ * field.
+ *
+ * Since: 2.9.0
**/
HB_EXTERN void
-hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input,
- hb_bool_t retain_gids)
+hb_subset_input_set_flags (hb_subset_input_t *input,
+ unsigned value)
{
- subset_input->retain_gids = retain_gids;
+ input->flags = (hb_subset_flags_t) value;
}
/**
- * hb_subset_input_get_retain_gids:
- * Returns: value of retain_gids.
- * Since: 2.4.0
+ * hb_subset_input_set_user_data: (skip)
+ * @input: a #hb_subset_input_t object.
+ * @key: The user-data key to set
+ * @data: A pointer to the user data
+ * @destroy: (nullable): A callback to call when @data is not needed anymore
+ * @replace: Whether to replace an existing data with the same key
+ *
+ * Attaches a user-data key/data pair to the given subset input object.
+ *
+ * Return value: %true if success, %false otherwise
+ *
+ * Since: 2.9.0
**/
-HB_EXTERN hb_bool_t
-hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input)
+hb_bool_t
+hb_subset_input_set_user_data (hb_subset_input_t *input,
+ hb_user_data_key_t *key,
+ void * data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace)
{
- return subset_input->retain_gids;
+ return hb_object_set_user_data (input, key, data, destroy, replace);
}
-HB_EXTERN void
-hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
- hb_bool_t name_legacy)
-{
- subset_input->name_legacy = name_legacy;
-}
-
-HB_EXTERN hb_bool_t
-hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input)
+/**
+ * hb_subset_input_get_user_data: (skip)
+ * @input: a #hb_subset_input_t object.
+ * @key: The user-data key to query
+ *
+ * Fetches the user data associated with the specified key,
+ * attached to the specified subset input object.
+ *
+ * Return value: (transfer none): A pointer to the user data
+ *
+ * Since: 2.9.0
+ **/
+void *
+hb_subset_input_get_user_data (const hb_subset_input_t *input,
+ hb_user_data_key_t *key)
{
- return subset_input->name_legacy;
+ return hb_object_get_user_data (input, key);
}
diff --git a/thirdparty/harfbuzz/src/hb-subset-input.hh b/thirdparty/harfbuzz/src/hb-subset-input.hh
index 0aeb96695b..a3e28b0562 100644
--- a/thirdparty/harfbuzz/src/hb-subset-input.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-input.hh
@@ -31,30 +31,51 @@
#include "hb.hh"
#include "hb-subset.h"
+#include "hb-map.hh"
+#include "hb-set.hh"
#include "hb-font.hh"
+HB_MARK_AS_FLAG_T (hb_subset_flags_t);
+
struct hb_subset_input_t
{
hb_object_header_t header;
- hb_set_t *unicodes;
- hb_set_t *glyphs;
- hb_set_t *name_ids;
- hb_set_t *name_languages;
- hb_set_t *drop_tables;
-
- bool drop_hints;
- bool desubroutinize;
- bool retain_gids;
- bool name_legacy;
- /* TODO
- *
- * features
- * lookups
- * name_ids
- * ...
- */
+ union {
+ struct {
+ hb_set_t *glyphs;
+ hb_set_t *unicodes;
+ hb_set_t *no_subset_tables;
+ hb_set_t *drop_tables;
+ hb_set_t *name_ids;
+ hb_set_t *name_languages;
+ hb_set_t *layout_features;
+ } sets;
+ hb_set_t* set_ptrs[sizeof (sets) / sizeof (hb_set_t*)];
+ };
+
+ unsigned flags;
+
+ inline unsigned num_sets () const
+ {
+ return sizeof (set_ptrs) / sizeof (hb_set_t*);
+ }
+
+ inline hb_array_t<hb_set_t*> sets_iter ()
+ {
+ return hb_array_t<hb_set_t*> (set_ptrs, num_sets ());
+ }
+
+ bool in_error () const
+ {
+ for (unsigned i = 0; i < num_sets (); i++)
+ {
+ if (unlikely (set_ptrs[i]->in_error ()))
+ return true;
+ }
+ return false;
+ }
};
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.cc b/thirdparty/harfbuzz/src/hb-subset-plan.cc
index d055783a4d..677df35fad 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.cc
@@ -35,10 +35,12 @@
#include "hb-ot-layout-gsub-table.hh"
#include "hb-ot-cff1-table.hh"
#include "hb-ot-color-colr-table.hh"
+#include "hb-ot-color-colrv1-closure.hh"
#include "hb-ot-var-fvar-table.hh"
#include "hb-ot-stat-table.hh"
+typedef hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> script_langsys_map;
#ifndef HB_NO_SUBSET_CFF
static inline void
_add_cff_seac_components (const OT::cff1::accelerator_t &cff,
@@ -54,7 +56,23 @@ _add_cff_seac_components (const OT::cff1::accelerator_t &cff,
}
#endif
-#ifndef HB_NO_SUBSET_LAYOUT
+static void
+_remap_palette_indexes (const hb_set_t *palette_indexes,
+ hb_map_t *mapping /* OUT */)
+{
+ unsigned new_idx = 0;
+ for (unsigned palette_index : palette_indexes->iter ())
+ {
+ if (palette_index == 0xFFFF)
+ {
+ mapping->set (palette_index, palette_index);
+ continue;
+ }
+ mapping->set (palette_index, new_idx);
+ new_idx++;
+ }
+}
+
static void
_remap_indexes (const hb_set_t *indexes,
hb_map_t *mapping /* OUT */)
@@ -66,73 +84,100 @@ _remap_indexes (const hb_set_t *indexes,
}
-static inline void
-_gsub_closure_glyphs_lookups_features (hb_face_t *face,
- hb_set_t *gids_to_retain,
- hb_map_t *gsub_lookups,
- hb_map_t *gsub_features)
+#ifndef HB_NO_SUBSET_LAYOUT
+typedef void (*layout_collect_func_t) (hb_face_t *face, hb_tag_t table_tag, const hb_tag_t *scripts, const hb_tag_t *languages, const hb_tag_t *features, hb_set_t *lookup_indexes /* OUT */);
+
+
+template <typename T>
+static void _collect_layout_indices (hb_face_t *face,
+ const T& table,
+ const hb_set_t *layout_features_to_retain,
+ layout_collect_func_t layout_collect_func,
+ hb_set_t *indices /* OUT */)
{
- hb_set_t lookup_indices;
- hb_ot_layout_collect_lookups (face,
- HB_OT_TAG_GSUB,
- nullptr,
- nullptr,
- nullptr,
- &lookup_indices);
- hb_ot_layout_lookups_substitute_closure (face,
- &lookup_indices,
- gids_to_retain);
- hb_blob_ptr_t<OT::GSUB> gsub = hb_sanitize_context_t ().reference_table<OT::GSUB> (face);
- gsub->closure_lookups (face,
- gids_to_retain,
- &lookup_indices);
- _remap_indexes (&lookup_indices, gsub_lookups);
+ hb_vector_t<hb_tag_t> features;
+ if (!features.alloc (table.get_feature_count () + 1))
+ return;
- // Collect and prune features
- hb_set_t feature_indices;
- hb_ot_layout_collect_features (face,
- HB_OT_TAG_GSUB,
- nullptr,
- nullptr,
- nullptr,
- &feature_indices);
- gsub->prune_features (gsub_lookups, &feature_indices);
- _remap_indexes (&feature_indices, gsub_features);
-
- gsub.destroy ();
+ for (unsigned i = 0; i < table.get_feature_count (); i++)
+ {
+ hb_tag_t tag = table.get_feature_tag (i);
+ if (tag && layout_features_to_retain->has (tag))
+ features.push (tag);
+ }
+
+ if (!features)
+ return;
+
+ // The collect function needs a null element to signal end of the array.
+ features.push (0);
+
+ if (features.get_size () == table.get_feature_count () + 1)
+ {
+ // Looking for all features, trigger the faster collection method.
+ layout_collect_func (face,
+ T::tableTag,
+ nullptr,
+ nullptr,
+ nullptr,
+ indices);
+ return;
+ }
+
+ layout_collect_func (face,
+ T::tableTag,
+ nullptr,
+ nullptr,
+ features.arrayZ,
+ indices);
}
+template <typename T>
static inline void
-_gpos_closure_lookups_features (hb_face_t *face,
- const hb_set_t *gids_to_retain,
- hb_map_t *gpos_lookups,
- hb_map_t *gpos_features)
+_closure_glyphs_lookups_features (hb_face_t *face,
+ hb_set_t *gids_to_retain,
+ const hb_set_t *layout_features_to_retain,
+ hb_map_t *lookups,
+ hb_map_t *features,
+ script_langsys_map *langsys_map)
{
+ hb_blob_ptr_t<T> table = hb_sanitize_context_t ().reference_table<T> (face);
+ hb_tag_t table_tag = table->tableTag;
hb_set_t lookup_indices;
- hb_ot_layout_collect_lookups (face,
- HB_OT_TAG_GPOS,
- nullptr,
- nullptr,
- nullptr,
- &lookup_indices);
- hb_blob_ptr_t<OT::GPOS> gpos = hb_sanitize_context_t ().reference_table<OT::GPOS> (face);
- gpos->closure_lookups (face,
- gids_to_retain,
+ _collect_layout_indices<T> (face,
+ *table,
+ layout_features_to_retain,
+ hb_ot_layout_collect_lookups,
+ &lookup_indices);
+
+ if (table_tag == HB_OT_TAG_GSUB)
+ hb_ot_layout_lookups_substitute_closure (face,
+ &lookup_indices,
+ gids_to_retain);
+ table->closure_lookups (face,
+ gids_to_retain,
&lookup_indices);
- _remap_indexes (&lookup_indices, gpos_lookups);
+ _remap_indexes (&lookup_indices, lookups);
// Collect and prune features
hb_set_t feature_indices;
- hb_ot_layout_collect_features (face,
- HB_OT_TAG_GPOS,
- nullptr,
- nullptr,
- nullptr,
- &feature_indices);
- gpos->prune_features (gpos_lookups, &feature_indices);
- _remap_indexes (&feature_indices, gpos_features);
- gpos.destroy ();
+ _collect_layout_indices<T> (face,
+ *table,
+ layout_features_to_retain,
+ hb_ot_layout_collect_features,
+ &feature_indices);
+
+ table->prune_features (lookups, &feature_indices);
+ hb_map_t duplicate_feature_map;
+ table->find_duplicate_features (lookups, &feature_indices, &duplicate_feature_map);
+
+ feature_indices.clear ();
+ table->prune_langsys (&duplicate_feature_map, langsys_map, &feature_indices);
+ _remap_indexes (&feature_indices, features);
+
+ table.destroy ();
}
+
#endif
#ifndef HB_NO_VAR
@@ -166,9 +211,9 @@ static inline void
#endif
static inline void
-_cmap_closure (hb_face_t *face,
- const hb_set_t *unicodes,
- hb_set_t *glyphset)
+_cmap_closure (hb_face_t *face,
+ const hb_set_t *unicodes,
+ hb_set_t *glyphset)
{
OT::cmap::accelerator_t cmap;
cmap.init (face);
@@ -189,20 +234,74 @@ _remove_invalid_gids (hb_set_t *glyphs,
}
static void
+_populate_unicodes_to_retain (const hb_set_t *unicodes,
+ const hb_set_t *glyphs,
+ hb_subset_plan_t *plan)
+{
+ OT::cmap::accelerator_t cmap;
+ cmap.init (plan->source);
+
+ constexpr static const int size_threshold = 4096;
+
+ if (glyphs->is_empty () && unicodes->get_population () < size_threshold)
+ {
+ /* This is the fast path if it's anticipated that size of unicodes
+ * is << than the number of codepoints in the font. */
+ for (hb_codepoint_t cp : *unicodes)
+ {
+ hb_codepoint_t gid;
+ if (!cmap.get_nominal_glyph (cp, &gid))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Drop U+%04X; no gid", cp);
+ continue;
+ }
+
+ plan->codepoint_to_glyph->set (cp, gid);
+ }
+ }
+ else
+ {
+ hb_map_t unicode_glyphid_map;
+ cmap.collect_mapping (hb_set_get_empty (), &unicode_glyphid_map);
+
+ for (hb_pair_t<hb_codepoint_t, hb_codepoint_t> cp_gid :
+ + unicode_glyphid_map.iter ())
+ {
+ if (!unicodes->has (cp_gid.first) && !glyphs->has (cp_gid.second))
+ continue;
+
+ plan->codepoint_to_glyph->set (cp_gid.first, cp_gid.second);
+ }
+
+ /* Add gids which where requested, but not mapped in cmap */
+ // TODO(garretrieger):
+ // Once https://github.com/harfbuzz/harfbuzz/issues/3169
+ // is implemented, this can be done with union and del_range
+ for (hb_codepoint_t gid : glyphs->iter ())
+ {
+ if (gid >= plan->source->get_num_glyphs ())
+ break;
+ plan->_glyphset_gsub->add (gid);
+ }
+ }
+
+ + plan->codepoint_to_glyph->keys () | hb_sink (plan->unicodes);
+ + plan->codepoint_to_glyph->values () | hb_sink (plan->_glyphset_gsub);
+
+ cmap.fini ();
+}
+
+static void
_populate_gids_to_retain (hb_subset_plan_t* plan,
- const hb_set_t *unicodes,
- const hb_set_t *input_glyphs_to_retain,
bool close_over_gsub,
bool close_over_gpos,
bool close_over_gdef)
{
- OT::cmap::accelerator_t cmap;
OT::glyf::accelerator_t glyf;
#ifndef HB_NO_SUBSET_CFF
OT::cff1::accelerator_t cff;
#endif
OT::COLR::accelerator_t colr;
- cmap.init (plan->source);
glyf.init (plan->source);
#ifndef HB_NO_SUBSET_CFF
cff.init (plan->source);
@@ -210,73 +309,88 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
colr.init (plan->source);
plan->_glyphset_gsub->add (0); // Not-def
- hb_set_union (plan->_glyphset_gsub, input_glyphs_to_retain);
-
- hb_codepoint_t cp = HB_SET_VALUE_INVALID;
- while (unicodes->next (&cp))
- {
- hb_codepoint_t gid;
- if (!cmap.get_nominal_glyph (cp, &gid))
- {
- DEBUG_MSG(SUBSET, nullptr, "Drop U+%04X; no gid", cp);
- continue;
- }
- plan->unicodes->add (cp);
- plan->codepoint_to_glyph->set (cp, gid);
- plan->_glyphset_gsub->add (gid);
- }
_cmap_closure (plan->source, plan->unicodes, plan->_glyphset_gsub);
#ifndef HB_NO_SUBSET_LAYOUT
if (close_over_gsub)
// closure all glyphs/lookups/features needed for GSUB substitutions.
- _gsub_closure_glyphs_lookups_features (plan->source, plan->_glyphset_gsub, plan->gsub_lookups, plan->gsub_features);
+ _closure_glyphs_lookups_features<OT::GSUB> (
+ plan->source,
+ plan->_glyphset_gsub,
+ plan->layout_features,
+ plan->gsub_lookups,
+ plan->gsub_features,
+ plan->gsub_langsys);
if (close_over_gpos)
- _gpos_closure_lookups_features (plan->source, plan->_glyphset_gsub, plan->gpos_lookups, plan->gpos_features);
+ _closure_glyphs_lookups_features<OT::GPOS> (
+ plan->source,
+ plan->_glyphset_gsub,
+ plan->layout_features,
+ plan->gpos_lookups,
+ plan->gpos_features,
+ plan->gpos_langsys);
#endif
_remove_invalid_gids (plan->_glyphset_gsub, plan->source->get_num_glyphs ());
+ // Collect all glyphs referenced by COLRv0
+ hb_set_t* cur_glyphset = plan->_glyphset_gsub;
+ hb_set_t glyphset_colrv0;
+ if (colr.is_valid ())
+ {
+ glyphset_colrv0.union_ (*cur_glyphset);
+ for (hb_codepoint_t gid : cur_glyphset->iter ())
+ colr.closure_glyphs (gid, &glyphset_colrv0);
+ cur_glyphset = &glyphset_colrv0;
+ }
+
+ hb_set_t palette_indices;
+ colr.closure_V0palette_indices (cur_glyphset, &palette_indices);
+
+ hb_set_t layer_indices;
+ colr.closure_forV1 (cur_glyphset, &layer_indices, &palette_indices);
+ _remap_indexes (&layer_indices, plan->colrv1_layers);
+ _remap_palette_indexes (&palette_indices, plan->colr_palettes);
+ colr.fini ();
+ _remove_invalid_gids (cur_glyphset, plan->source->get_num_glyphs ());
+
// Populate a full set of glyphs to retain by adding all referenced
// composite glyphs.
- hb_codepoint_t gid = HB_SET_VALUE_INVALID;
- while (plan->_glyphset_gsub->next (&gid))
+ for (hb_codepoint_t gid : cur_glyphset->iter ())
{
glyf.add_gid_and_children (gid, plan->_glyphset);
#ifndef HB_NO_SUBSET_CFF
if (cff.is_valid ())
_add_cff_seac_components (cff, gid, plan->_glyphset);
#endif
- if (colr.is_valid ())
- colr.closure_glyphs (gid, plan->_glyphset);
}
_remove_invalid_gids (plan->_glyphset, plan->source->get_num_glyphs ());
+
#ifndef HB_NO_VAR
if (close_over_gdef)
_collect_layout_variation_indices (plan->source,
- plan->_glyphset_gsub,
- plan->gpos_lookups,
- plan->layout_variation_indices,
- plan->layout_variation_idx_map);
+ plan->_glyphset_gsub,
+ plan->gpos_lookups,
+ plan->layout_variation_indices,
+ plan->layout_variation_idx_map);
#endif
#ifndef HB_NO_SUBSET_CFF
cff.fini ();
#endif
glyf.fini ();
- cmap.fini ();
}
static void
_create_old_gid_to_new_gid_map (const hb_face_t *face,
- bool retain_gids,
- const hb_set_t *all_gids_to_retain,
- hb_map_t *glyph_map, /* OUT */
- hb_map_t *reverse_glyph_map, /* OUT */
- unsigned int *num_glyphs /* OUT */)
+ bool retain_gids,
+ const hb_set_t *all_gids_to_retain,
+ hb_map_t *glyph_map, /* OUT */
+ hb_map_t *reverse_glyph_map, /* OUT */
+ unsigned int *num_glyphs /* OUT */)
{
if (!retain_gids)
{
@@ -319,33 +433,36 @@ _nameid_closure (hb_face_t *face,
/**
* hb_subset_plan_create:
+ * @face: font face to create the plan for.
+ * @input: a #hb_subset_input_t input.
+ *
* Computes a plan for subsetting the supplied face according
* to a provided input. The plan describes
* which tables and glyphs should be retained.
*
- * Return value: New subset plan.
+ * Return value: (transfer full): New subset plan. Destroy with
+ * hb_subset_plan_destroy().
*
* Since: 1.7.5
**/
hb_subset_plan_t *
-hb_subset_plan_create (hb_face_t *face,
- hb_subset_input_t *input)
+hb_subset_plan_create (hb_face_t *face,
+ const hb_subset_input_t *input)
{
hb_subset_plan_t *plan;
if (unlikely (!(plan = hb_object_create<hb_subset_plan_t> ())))
return const_cast<hb_subset_plan_t *> (&Null (hb_subset_plan_t));
plan->successful = true;
- plan->drop_hints = input->drop_hints;
- plan->desubroutinize = input->desubroutinize;
- plan->retain_gids = input->retain_gids;
- plan->name_legacy = input->name_legacy;
+ plan->flags = input->flags;
plan->unicodes = hb_set_create ();
- plan->name_ids = hb_set_reference (input->name_ids);
+ plan->name_ids = hb_set_copy (input->sets.name_ids);
_nameid_closure (face, plan->name_ids);
- plan->name_languages = hb_set_reference (input->name_languages);
- plan->glyphs_requested = hb_set_reference (input->glyphs);
- plan->drop_tables = hb_set_reference (input->drop_tables);
+ plan->name_languages = hb_set_copy (input->sets.name_languages);
+ plan->layout_features = hb_set_copy (input->sets.layout_features);
+ plan->glyphs_requested = hb_set_copy (input->sets.glyphs);
+ plan->drop_tables = hb_set_copy (input->sets.drop_tables);
+ plan->no_subset_tables = hb_set_copy (input->sets.no_subset_tables);
plan->source = hb_face_reference (face);
plan->dest = hb_face_builder_create ();
@@ -356,20 +473,32 @@ hb_subset_plan_create (hb_face_t *face,
plan->reverse_glyph_map = hb_map_create ();
plan->gsub_lookups = hb_map_create ();
plan->gpos_lookups = hb_map_create ();
+
+ if (plan->check_success (plan->gsub_langsys = hb_object_create<script_langsys_map> ()))
+ plan->gsub_langsys->init_shallow ();
+ if (plan->check_success (plan->gpos_langsys = hb_object_create<script_langsys_map> ()))
+ plan->gpos_langsys->init_shallow ();
+
plan->gsub_features = hb_map_create ();
plan->gpos_features = hb_map_create ();
+ plan->colrv1_layers = hb_map_create ();
+ plan->colr_palettes = hb_map_create ();
plan->layout_variation_indices = hb_set_create ();
plan->layout_variation_idx_map = hb_map_create ();
+ if (plan->in_error ()) {
+ return plan;
+ }
+
+ _populate_unicodes_to_retain (input->sets.unicodes, input->sets.glyphs, plan);
+
_populate_gids_to_retain (plan,
- input->unicodes,
- input->glyphs,
- !input->drop_tables->has (HB_OT_TAG_GSUB),
- !input->drop_tables->has (HB_OT_TAG_GPOS),
- !input->drop_tables->has (HB_OT_TAG_GDEF));
+ !input->sets.drop_tables->has (HB_OT_TAG_GSUB),
+ !input->sets.drop_tables->has (HB_OT_TAG_GPOS),
+ !input->sets.drop_tables->has (HB_OT_TAG_GDEF));
_create_old_gid_to_new_gid_map (face,
- input->retain_gids,
+ input->flags & HB_SUBSET_FLAGS_RETAIN_GIDS,
plan->_glyphset,
plan->glyph_map,
plan->reverse_glyph_map,
@@ -380,6 +509,10 @@ hb_subset_plan_create (hb_face_t *face,
/**
* hb_subset_plan_destroy:
+ * @plan: a #hb_subset_plan_t
+ *
+ * Decreases the reference count on @plan, and if it reaches zero, destroys
+ * @plan, freeing all memory.
*
* Since: 1.7.5
**/
@@ -391,8 +524,10 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_set_destroy (plan->unicodes);
hb_set_destroy (plan->name_ids);
hb_set_destroy (plan->name_languages);
+ hb_set_destroy (plan->layout_features);
hb_set_destroy (plan->glyphs_requested);
hb_set_destroy (plan->drop_tables);
+ hb_set_destroy (plan->no_subset_tables);
hb_face_destroy (plan->source);
hb_face_destroy (plan->dest);
hb_map_destroy (plan->codepoint_to_glyph);
@@ -404,9 +539,30 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_map_destroy (plan->gpos_lookups);
hb_map_destroy (plan->gsub_features);
hb_map_destroy (plan->gpos_features);
+ hb_map_destroy (plan->colrv1_layers);
+ hb_map_destroy (plan->colr_palettes);
hb_set_destroy (plan->layout_variation_indices);
hb_map_destroy (plan->layout_variation_idx_map);
+ if (plan->gsub_langsys)
+ {
+ for (auto _ : plan->gsub_langsys->iter ())
+ hb_set_destroy (_.second);
+
+ hb_object_destroy (plan->gsub_langsys);
+ plan->gsub_langsys->fini_shallow ();
+ hb_free (plan->gsub_langsys);
+ }
+
+ if (plan->gpos_langsys)
+ {
+ for (auto _ : plan->gpos_langsys->iter ())
+ hb_set_destroy (_.second);
+
+ hb_object_destroy (plan->gpos_langsys);
+ plan->gpos_langsys->fini_shallow ();
+ hb_free (plan->gpos_langsys);
+ }
- free (plan);
+ hb_free (plan);
}
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.hh b/thirdparty/harfbuzz/src/hb-subset-plan.hh
index cc9cb7a1a2..92a4e27ccc 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.hh
@@ -39,11 +39,8 @@ struct hb_subset_plan_t
{
hb_object_header_t header;
- bool successful : 1;
- bool drop_hints : 1;
- bool desubroutinize : 1;
- bool retain_gids : 1;
- bool name_legacy : 1;
+ bool successful;
+ unsigned flags;
// For each cp that we'd like to retain maps to the corresponding gid.
hb_set_t *unicodes;
@@ -54,9 +51,15 @@ struct hb_subset_plan_t
// name_languages we would like to retain
hb_set_t *name_languages;
+ //layout features which will be preserved
+ hb_set_t *layout_features;
+
//glyph ids requested to retain
hb_set_t *glyphs_requested;
+ // Tables which should not be processed, just pass them through.
+ hb_set_t *no_subset_tables;
+
// Tables which should be dropped.
hb_set_t *drop_tables;
@@ -79,10 +82,18 @@ struct hb_subset_plan_t
hb_map_t *gsub_lookups;
hb_map_t *gpos_lookups;
- //active features we'd like to retain
+ //active langsys we'd like to retain
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *gsub_langsys;
+ hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *gpos_langsys;
+
+ //active features after removing redundant langsys and prune_features
hb_map_t *gsub_features;
hb_map_t *gpos_features;
+ //active layers/palettes we'd like to retain
+ hb_map_t *colrv1_layers;
+ hb_map_t *colr_palettes;
+
//The set of layout item variation store delta set indices to be retained
hb_set_t *layout_variation_indices;
//Old -> New layout item variation store delta set index mapping
@@ -189,7 +200,7 @@ typedef struct hb_subset_plan_t hb_subset_plan_t;
HB_INTERNAL hb_subset_plan_t *
hb_subset_plan_create (hb_face_t *face,
- hb_subset_input_t *input);
+ const hb_subset_input_t *input);
HB_INTERNAL void
hb_subset_plan_destroy (hb_subset_plan_t *plan);
diff --git a/thirdparty/harfbuzz/src/hb-subset.cc b/thirdparty/harfbuzz/src/hb-subset.cc
index 8b77ecd45a..34f92e0d81 100644
--- a/thirdparty/harfbuzz/src/hb-subset.cc
+++ b/thirdparty/harfbuzz/src/hb-subset.cc
@@ -39,8 +39,10 @@
#include "hb-ot-maxp-table.hh"
#include "hb-ot-color-sbix-table.hh"
#include "hb-ot-color-colr-table.hh"
+#include "hb-ot-color-cpal-table.hh"
#include "hb-ot-os2-table.hh"
#include "hb-ot-post-table.hh"
+#include "hb-ot-post-table-v2subset.hh"
#include "hb-ot-cff1-table.hh"
#include "hb-ot-cff2-table.hh"
#include "hb-ot-vorg-table.hh"
@@ -50,7 +52,28 @@
#include "hb-ot-layout-gpos-table.hh"
#include "hb-ot-var-gvar-table.hh"
#include "hb-ot-var-hvar-table.hh"
+#include "hb-repacker.hh"
+/**
+ * SECTION:hb-subset
+ * @title: hb-subset
+ * @short_description: Subsets font files.
+ * @include: hb-subset.h
+ *
+ * Subsetting reduces the codepoint coverage of font files and removes all data
+ * that is no longer needed. A subset input describes the desired subset. The input is
+ * provided along with a font to the subsetting operation. Output is a new font file
+ * containing only the data specified in the input.
+ *
+ * Currently most outline and bitmap tables are supported: glyf, CFF, CFF2, sbix,
+ * COLR, and CBDT/CBLC. This also includes fonts with variable outlines via OpenType
+ * variations. Notably EBDT/EBLC and SVG are not supported. Layout subsetting is supported
+ * only for OpenType Layout tables (GSUB, GPOS, GDEF). Notably subsetting of graphite or AAT tables
+ * is not yet supported.
+ *
+ * Fonts with graphite or AAT tables may still be subsetted but will likely need to use the
+ * retain glyph ids option and configure the subset to pass through the layout tables untouched.
+ */
static unsigned
_plan_estimate_subset_table_size (hb_subset_plan_t *plan, unsigned table_len)
@@ -64,69 +87,133 @@ _plan_estimate_subset_table_size (hb_subset_plan_t *plan, unsigned table_len)
return 512 + (unsigned) (table_len * sqrt ((double) dst_glyphs / src_glyphs));
}
+/*
+ * Repack the serialization buffer if any offset overflows exist.
+ */
+static hb_blob_t*
+_repack (hb_tag_t tag, const hb_serialize_context_t& c)
+{
+ if (tag != HB_OT_TAG_GPOS
+ && tag != HB_OT_TAG_GSUB)
+ {
+ // Check for overflow in a non-handled table.
+ return c.successful () ? c.copy_blob () : nullptr;
+ }
+
+ if (!c.offset_overflow ())
+ return c.copy_blob ();
+
+ hb_vector_t<char> buf;
+ int buf_size = c.end - c.start;
+ if (unlikely (!buf.alloc (buf_size)))
+ return nullptr;
+
+ hb_serialize_context_t repacked ((void *) buf, buf_size);
+ hb_resolve_overflows (c.object_graph (), &repacked);
+
+ if (unlikely (repacked.in_error ()))
+ // TODO(garretrieger): refactor so we can share the resize/retry logic with the subset
+ // portion.
+ return nullptr;
+
+ return repacked.copy_blob ();
+}
+
+template<typename TableType>
+static
+bool
+_try_subset (const TableType *table,
+ hb_vector_t<char>* buf,
+ unsigned buf_size,
+ hb_subset_context_t* c /* OUT */)
+{
+ c->serializer->start_serialize<TableType> ();
+ if (c->serializer->in_error ()) return false;
+
+ bool needed = table->subset (c);
+ if (!c->serializer->ran_out_of_room ())
+ {
+ c->serializer->end_serialize ();
+ return needed;
+ }
+
+ buf_size += (buf_size >> 1) + 32;
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.",
+ HB_UNTAG (c->table_tag), buf_size);
+
+ if (unlikely (!buf->alloc (buf_size)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.",
+ HB_UNTAG (c->table_tag), buf_size);
+ return needed;
+ }
+
+ c->serializer->reset (buf->arrayZ, buf_size);
+ return _try_subset (table, buf, buf_size, c);
+}
+
template<typename TableType>
static bool
_subset (hb_subset_plan_t *plan)
{
- bool result = false;
hb_blob_t *source_blob = hb_sanitize_context_t ().reference_table<TableType> (plan->source);
const TableType *table = source_blob->as<TableType> ();
hb_tag_t tag = TableType::tableTag;
- if (source_blob->data)
+ if (!source_blob->data)
+ {
+ DEBUG_MSG (SUBSET, nullptr,
+ "OT::%c%c%c%c::subset sanitize failed on source table.", HB_UNTAG (tag));
+ hb_blob_destroy (source_blob);
+ return false;
+ }
+
+ hb_vector_t<char> buf;
+ /* TODO Not all tables are glyph-related. 'name' table size for example should not be
+ * affected by number of glyphs. Accommodate that. */
+ unsigned buf_size = _plan_estimate_subset_table_size (plan, source_blob->length);
+ DEBUG_MSG (SUBSET, nullptr,
+ "OT::%c%c%c%c initial estimated table size: %u bytes.", HB_UNTAG (tag), buf_size);
+ if (unlikely (!buf.alloc (buf_size)))
+ {
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to allocate %u bytes.", HB_UNTAG (tag), buf_size);
+ hb_blob_destroy (source_blob);
+ return false;
+ }
+
+ bool needed = false;
+ hb_serialize_context_t serializer (buf.arrayZ, buf_size);
{
- hb_vector_t<char> buf;
- /* TODO Not all tables are glyph-related. 'name' table size for example should not be
- * affected by number of glyphs. Accommodate that. */
- unsigned buf_size = _plan_estimate_subset_table_size (plan, source_blob->length);
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c initial estimated table size: %u bytes.", HB_UNTAG (tag), buf_size);
- if (unlikely (!buf.alloc (buf_size)))
- {
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to allocate %u bytes.", HB_UNTAG (tag), buf_size);
- hb_blob_destroy (source_blob);
- return false;
- }
- retry:
- hb_serialize_context_t serializer ((void *) buf, buf_size);
- serializer.start_serialize<TableType> ();
hb_subset_context_t c (source_blob, plan, &serializer, tag);
- bool needed = table->subset (&c);
- if (serializer.ran_out_of_room)
- {
- buf_size += (buf_size >> 1) + 32;
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.", HB_UNTAG (tag), buf_size);
- if (unlikely (!buf.alloc (buf_size)))
- {
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.", HB_UNTAG (tag), buf_size);
- hb_blob_destroy (source_blob);
- return false;
- }
- goto retry;
- }
- serializer.end_serialize ();
+ needed = _try_subset (table, &buf, buf_size, &c);
+ }
+ hb_blob_destroy (source_blob);
- result = !serializer.in_error ();
+ if (serializer.in_error () && !serializer.only_offset_overflow ())
+ {
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset FAILED!", HB_UNTAG (tag));
+ return false;
+ }
- if (result)
- {
- if (needed)
- {
- hb_blob_t *dest_blob = serializer.copy_blob ();
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c final subset table size: %u bytes.", HB_UNTAG (tag), dest_blob->length);
- result = c.plan->add_table (tag, dest_blob);
- hb_blob_destroy (dest_blob);
- }
- else
- {
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset table subsetted to empty.", HB_UNTAG (tag));
- }
- }
+ if (!needed)
+ {
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset table subsetted to empty.", HB_UNTAG (tag));
+ return true;
}
- else
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset sanitize failed on source table.", HB_UNTAG (tag));
- hb_blob_destroy (source_blob);
- DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset %s", HB_UNTAG (tag), result ? "success" : "FAILED!");
+ bool result = false;
+ hb_blob_t *dest_blob = _repack (tag, serializer);
+ if (dest_blob)
+ {
+ DEBUG_MSG (SUBSET, nullptr,
+ "OT::%c%c%c%c final subset table size: %u bytes.",
+ HB_UNTAG (tag), dest_blob->length);
+ result = plan->add_table (tag, dest_blob);
+ hb_blob_destroy (dest_blob);
+ }
+
+ DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset %s",
+ HB_UNTAG (tag), result ? "success" : "FAILED!");
return result;
}
@@ -159,7 +246,7 @@ _should_drop_table (hb_subset_plan_t *plan, hb_tag_t tag)
case HB_TAG ('p','r','e','p'): /* hint table, fallthrough */
case HB_TAG ('h','d','m','x'): /* hint table, fallthrough */
case HB_TAG ('V','D','M','X'): /* hint table, fallthrough */
- return plan->drop_hints;
+ return plan->flags & HB_SUBSET_FLAGS_NO_HINTING;
#ifdef HB_NO_SUBSET_LAYOUT
// Drop Layout Tables if requested.
@@ -179,8 +266,21 @@ _should_drop_table (hb_subset_plan_t *plan, hb_tag_t tag)
}
static bool
+_passthrough (hb_subset_plan_t *plan, hb_tag_t tag)
+{
+ hb_blob_t *source_table = hb_face_reference_table (plan->source, tag);
+ bool result = plan->add_table (tag, source_table);
+ hb_blob_destroy (source_table);
+ return result;
+}
+
+static bool
_subset_table (hb_subset_plan_t *plan, hb_tag_t tag)
{
+ if (plan->no_subset_tables->has (tag)) {
+ return _passthrough (plan, tag);
+ }
+
DEBUG_MSG (SUBSET, nullptr, "subset %c%c%c%c", HB_UNTAG (tag));
switch (tag)
{
@@ -202,6 +302,7 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag)
case HB_OT_TAG_OS2 : return _subset<const OT::OS2 > (plan);
case HB_OT_TAG_post: return _subset<const OT::post> (plan);
case HB_OT_TAG_COLR: return _subset<const OT::COLR> (plan);
+ case HB_OT_TAG_CPAL: return _subset<const OT::CPAL> (plan);
case HB_OT_TAG_CBLC: return _subset<const OT::CBLC> (plan);
case HB_OT_TAG_CBDT: return true; /* skip CBDT, handled by CBLC */
@@ -221,28 +322,34 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag)
#endif
default:
- hb_blob_t *source_table = hb_face_reference_table (plan->source, tag);
- bool result = plan->add_table (tag, source_table);
- hb_blob_destroy (source_table);
- return result;
+ if (plan->flags & HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED)
+ return _passthrough (plan, tag);
+
+ // Drop table
+ return true;
}
}
/**
- * hb_subset:
+ * hb_subset_or_fail:
* @source: font face data to be subset.
* @input: input to use for the subsetting.
*
- * Subsets a font according to provided input.
+ * Subsets a font according to provided input. Returns nullptr
+ * if the subset operation fails.
+ *
+ * Since: 2.9.0
**/
hb_face_t *
-hb_subset (hb_face_t *source, hb_subset_input_t *input)
+hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
{
if (unlikely (!input || !source)) return hb_face_get_empty ();
hb_subset_plan_t *plan = hb_subset_plan_create (source, input);
- if (unlikely (plan->in_error ()))
- return hb_face_get_empty ();
+ if (unlikely (plan->in_error ())) {
+ hb_subset_plan_destroy (plan);
+ return nullptr;
+ }
hb_set_t tags_set;
bool success = true;
@@ -262,7 +369,7 @@ hb_subset (hb_face_t *source, hb_subset_input_t *input)
}
end:
- hb_face_t *result = success ? hb_face_reference (plan->dest) : hb_face_get_empty ();
+ hb_face_t *result = success ? hb_face_reference (plan->dest) : nullptr;
hb_subset_plan_destroy (plan);
return result;
diff --git a/thirdparty/harfbuzz/src/hb-subset.h b/thirdparty/harfbuzz/src/hb-subset.h
index ddf4409734..1c65a4da1c 100644
--- a/thirdparty/harfbuzz/src/hb-subset.h
+++ b/thirdparty/harfbuzz/src/hb-subset.h
@@ -31,66 +31,119 @@
HB_BEGIN_DECLS
-/*
- * hb_subset_input_t
+/**
+ * hb_subset_input_t:
*
* Things that change based on the input. Characters to keep, etc.
*/
typedef struct hb_subset_input_t hb_subset_input_t;
+/**
+ * hb_subset_flags_t:
+ * @HB_SUBSET_FLAGS_DEFAULT: all flags at their default value of false.
+ * @HB_SUBSET_FLAGS_NO_HINTING: If set hinting instructions will be dropped in
+ * the produced subset. Otherwise hinting instructions will be retained.
+ * @HB_SUBSET_FLAGS_RETAIN_GIDS: If set glyph indices will not be modified in
+ * the produced subset. If glyphs are dropped their indices will be retained
+ * as an empty glyph.
+ * @HB_SUBSET_FLAGS_DESUBROUTINIZE: If set and subsetting a CFF font the
+ * subsetter will attempt to remove subroutines from the CFF glyphs.
+ * @HB_SUBSET_FLAGS_NAME_LEGACY: If set non-unicode name records will be
+ * retained in the subset.
+ * @HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG: If set the subsetter will set the
+ * OVERLAP_SIMPLE flag on each simple glyph.
+ * @HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED: If set the subsetter will not
+ * drop unrecognized tables and instead pass them through untouched.
+ * @HB_SUBSET_FLAGS_NOTDEF_OUTLINE: If set the notdef glyph outline will be
+ * retained in the final subset.
+ * @HB_SUBSET_FLAGS_GLYPH_NAMES: If set the PS glyph names will be retained
+ * in the final subset.
+ * @HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES: If set then the unicode ranges in
+ * OS/2 will not be recalculated.
+ *
+ * List of boolean properties that can be configured on the subset input.
+ *
+ * Since: 2.9.0
+ **/
+typedef enum { /*< flags >*/
+ HB_SUBSET_FLAGS_DEFAULT = 0x00000000u,
+ HB_SUBSET_FLAGS_NO_HINTING = 0x00000001u,
+ HB_SUBSET_FLAGS_RETAIN_GIDS = 0x00000002u,
+ HB_SUBSET_FLAGS_DESUBROUTINIZE = 0x00000004u,
+ HB_SUBSET_FLAGS_NAME_LEGACY = 0x00000008u,
+ HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG = 0x00000010u,
+ HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED = 0x00000020u,
+ HB_SUBSET_FLAGS_NOTDEF_OUTLINE = 0x00000040u,
+ HB_SUBSET_FLAGS_GLYPH_NAMES = 0x00000080u,
+ HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES = 0x00000100u,
+} hb_subset_flags_t;
+
+/**
+ * hb_subset_sets_t:
+ * @HB_SUBSET_SETS_GLYPH_INDEX: the set of glyph indexes to retain in the subset.
+ * @HB_SUBSET_SETS_UNICODE: the set of unicode codepoints to retain in the subset.
+ * @HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG: the set of table tags which specifies tables that should not be
+ * subsetted.
+ * @HB_SUBSET_SETS_DROP_TABLE_TAG: the set of table tags which specifies tables which will be dropped
+ * in the subset.
+ * @HB_SUBSET_SETS_NAME_ID: the set of name ids that will be retained.
+ * @HB_SUBSET_SETS_NAME_LANG_ID: the set of name lang ids that will be retained.
+ * @HB_SUBSET_SETS_LAYOUT_FEATURE_TAG: the set of layout feature tags that will be retained
+ * in the subset.
+ *
+ * List of sets that can be configured on the subset input.
+ *
+ * Since: 2.9.1
+ **/
+typedef enum {
+ HB_SUBSET_SETS_GLYPH_INDEX = 0,
+ HB_SUBSET_SETS_UNICODE,
+ HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG,
+ HB_SUBSET_SETS_DROP_TABLE_TAG,
+ HB_SUBSET_SETS_NAME_ID,
+ HB_SUBSET_SETS_NAME_LANG_ID,
+ HB_SUBSET_SETS_LAYOUT_FEATURE_TAG,
+} hb_subset_sets_t;
+
HB_EXTERN hb_subset_input_t *
hb_subset_input_create_or_fail (void);
HB_EXTERN hb_subset_input_t *
-hb_subset_input_reference (hb_subset_input_t *subset_input);
+hb_subset_input_reference (hb_subset_input_t *input);
HB_EXTERN void
-hb_subset_input_destroy (hb_subset_input_t *subset_input);
+hb_subset_input_destroy (hb_subset_input_t *input);
-HB_EXTERN hb_set_t *
-hb_subset_input_unicode_set (hb_subset_input_t *subset_input);
+HB_EXTERN hb_bool_t
+hb_subset_input_set_user_data (hb_subset_input_t *input,
+ hb_user_data_key_t *key,
+ void * data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace);
-HB_EXTERN hb_set_t *
-hb_subset_input_glyph_set (hb_subset_input_t *subset_input);
+HB_EXTERN void *
+hb_subset_input_get_user_data (const hb_subset_input_t *input,
+ hb_user_data_key_t *key);
HB_EXTERN hb_set_t *
-hb_subset_input_nameid_set (hb_subset_input_t *subset_input);
+hb_subset_input_unicode_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
-hb_subset_input_namelangid_set (hb_subset_input_t *subset_input);
+hb_subset_input_glyph_set (hb_subset_input_t *input);
HB_EXTERN hb_set_t *
-hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input);
+hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type);
-HB_EXTERN void
-hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input,
- hb_bool_t drop_hints);
-HB_EXTERN hb_bool_t
-hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input);
+HB_EXTERN hb_subset_flags_t
+hb_subset_input_get_flags (hb_subset_input_t *input);
HB_EXTERN void
-hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input,
- hb_bool_t desubroutinize);
-HB_EXTERN hb_bool_t
-hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input);
-
-HB_EXTERN void
-hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input,
- hb_bool_t retain_gids);
-HB_EXTERN hb_bool_t
-hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input);
+hb_subset_input_set_flags (hb_subset_input_t *input,
+ unsigned value);
-HB_EXTERN void
-hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
- hb_bool_t name_legacy);
-HB_EXTERN hb_bool_t
-hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input);
-
-/* hb_subset () */
HB_EXTERN hb_face_t *
-hb_subset (hb_face_t *source, hb_subset_input_t *input);
-
+hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input);
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-ucd-table.hh b/thirdparty/harfbuzz/src/hb-ucd-table.hh
index 88623db338..1a4c89c17f 100644
--- a/thirdparty/harfbuzz/src/hb-ucd-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ucd-table.hh
@@ -4,7 +4,7 @@
*
* ./gen-ucd-table.py ucd.nounihan.grouped.xml
*
- * on file with this description: Unicode 13.0.0
+ * on file with this description: Unicode 14.0.0
*/
#ifndef HB_UCD_TABLE_HH
@@ -13,7 +13,7 @@
#include "hb.hh"
static const hb_script_t
-_hb_ucd_sc_map[157] =
+_hb_ucd_sc_map[162] =
{
HB_SCRIPT_COMMON, HB_SCRIPT_INHERITED,
HB_SCRIPT_UNKNOWN, HB_SCRIPT_ARABIC,
@@ -93,7 +93,9 @@ _hb_ucd_sc_map[157] =
HB_SCRIPT_NANDINAGARI, HB_SCRIPT_NYIAKENG_PUACHUE_HMONG,
HB_SCRIPT_WANCHO, HB_SCRIPT_CHORASMIAN,
HB_SCRIPT_DIVES_AKURU, HB_SCRIPT_KHITAN_SMALL_SCRIPT,
- HB_SCRIPT_YEZIDI,
+ HB_SCRIPT_YEZIDI, HB_SCRIPT_CYPRO_MINOAN,
+ HB_SCRIPT_OLD_UYGHUR, HB_SCRIPT_TANGSA,
+ HB_SCRIPT_TOTO, HB_SCRIPT_VITHKUQI,
};
static const uint16_t
_hb_ucd_dm1_p0_map[825] =
@@ -1065,144 +1067,144 @@ _hb_ucd_dm2_u64_map[388] =
#ifndef HB_OPTIMIZE_SIZE
static const uint8_t
-_hb_ucd_u8[32480] =
+_hb_ucd_u8[33120] =
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28,
- 29, 26, 30, 31, 32, 33, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 26, 57, 58, 59, 59, 59, 59, 59, 26, 26, 60, 59, 59, 59, 59, 59,
- 59, 59, 26, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 26, 62, 59, 63, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 64, 26, 26, 65, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 66, 67, 59, 59, 59, 59, 68, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 69, 70, 71, 72, 73, 74, 59, 59,
- 75, 76, 59, 59, 77, 59, 78, 79, 80, 81, 73, 82, 83, 84, 59, 59,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 28, 26, 29, 30, 31, 32, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 33, 34, 34, 34, 34,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 26, 56, 57, 58, 58, 58, 58, 59, 26, 26, 60, 58, 58, 58, 58, 58,
+ 58, 58, 26, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 26, 62, 58, 63, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 64, 26, 26, 65, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 66, 67, 68, 58, 58, 58, 58, 69, 58,
+ 58, 58, 58, 58, 58, 58, 58, 70, 71, 72, 73, 74, 75, 76, 58, 77,
+ 78, 79, 58, 80, 81, 58, 82, 83, 84, 85, 75, 86, 87, 88, 58, 58,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 85, 26, 26, 26, 26, 26, 26, 26, 86, 87, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 88, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 89, 59, 59, 59, 59, 59, 59, 26, 90, 59, 59,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 91, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 92, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 93,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 94,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 89, 26, 26, 26, 26, 26, 26, 26, 90, 91, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 92, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 93, 58, 58, 58, 58, 58, 58, 26, 94, 58, 58,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 95, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 96, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 97,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 98,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
29, 21, 21, 21, 23, 21, 21, 21, 22, 18, 21, 25, 21, 17, 21, 21,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 25, 25, 25, 21,
@@ -1255,7 +1257,7 @@ _hb_ucd_u8[32480] =
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 7,
7, 7, 7, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 25, 25, 25, 21, 21, 23, 21, 21, 26, 26,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 1, 2, 21, 21,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 1, 21, 21, 21,
6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, 7, 7,
12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@@ -1275,10 +1277,9 @@ _hb_ucd_u8[32480] =
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 2, 2, 21, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 7, 7, 7, 7, 7, 7, 7, 7, 24, 7, 7, 7, 7, 7, 7, 2,
+ 1, 1, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 12, 12, 12, 12, 12, 12,
12, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 7, 10, 10,
@@ -1320,14 +1321,14 @@ _hb_ucd_u8[32480] =
15, 15, 15, 26, 26, 26, 26, 26, 26, 23, 26, 2, 2, 2, 2, 2,
12, 10, 10, 10, 12, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7,
7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 7, 12, 12,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 12, 7, 12, 12,
12, 10, 10, 10, 10, 2, 12, 12, 12, 2, 12, 12, 12, 12, 2, 2,
- 2, 2, 2, 2, 2, 12, 12, 2, 7, 7, 7, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 12, 12, 2, 7, 7, 7, 2, 2, 7, 2, 2,
2, 2, 2, 2, 2, 2, 2, 21, 15, 15, 15, 15, 15, 15, 15, 26,
7, 12, 10, 10, 21, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7,
7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 2, 2, 12, 7, 10, 12,
10, 10, 10, 10, 10, 2, 12, 10, 10, 2, 10, 10, 12, 12, 2, 2,
- 2, 2, 2, 2, 2, 10, 10, 2, 2, 2, 2, 2, 2, 2, 7, 2,
+ 2, 2, 2, 2, 2, 10, 10, 2, 2, 2, 2, 2, 2, 7, 7, 2,
2, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
12, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 7, 10, 10,
@@ -1344,6 +1345,7 @@ _hb_ucd_u8[32480] =
7, 12, 7, 7, 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 23,
7, 7, 7, 7, 7, 7, 6, 12, 12, 12, 12, 12, 12, 12, 12, 21,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 7, 7, 2, 7, 2, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7,
7, 7, 7, 7, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 12, 7, 7, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 2, 2,
@@ -1387,17 +1389,17 @@ _hb_ucd_u8[32480] =
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 22, 18, 2, 2, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 21, 21, 14, 14,
14, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7,
- 7, 7, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 7, 7, 12, 12, 12, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 12, 12, 12, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7,
+ 7, 7, 12, 12, 10, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2,
7, 7, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7,
7, 2, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
7, 7, 7, 7, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 10, 10,
10, 10, 10, 10, 10, 10, 12, 10, 10, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 21, 21, 21, 6, 21, 21, 21, 23, 7, 12, 2, 2,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2,
- 21, 21, 21, 21, 21, 21, 17, 21, 21, 21, 21, 12, 12, 12, 1, 2,
+ 21, 21, 21, 21, 21, 21, 17, 21, 21, 21, 21, 12, 12, 12, 1, 12,
7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2,
7, 7, 7, 7, 7, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7,
@@ -1419,12 +1421,12 @@ _hb_ucd_u8[32480] =
10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 12,
21, 21, 21, 21, 21, 21, 21, 6, 21, 21, 21, 21, 21, 21, 2, 2,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12,
- 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2,
12, 12, 12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 12, 10, 12, 12, 12, 12, 12, 10, 12, 10, 10, 10,
- 10, 10, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2,
+ 10, 10, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2,
21, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2,
+ 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 21, 21, 2,
12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 10, 12, 12, 12, 12, 10, 10, 12, 12, 10, 12, 12, 12, 7, 7,
7, 7, 7, 7, 7, 7, 12, 10, 12, 12, 10, 10, 10, 12, 10, 12,
@@ -1443,7 +1445,6 @@ _hb_ucd_u8[32480] =
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12,
9, 5, 9, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5,
5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 9, 9, 9,
5, 5, 5, 5, 5, 5, 2, 2, 9, 9, 9, 9, 9, 9, 2, 2,
@@ -1466,8 +1467,10 @@ _hb_ucd_u8[32480] =
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 25, 25, 25, 22, 18, 2,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11,
11, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
26, 26, 9, 26, 26, 26, 26, 9, 26, 26, 5, 9, 9, 9, 5, 5,
9, 9, 9, 5, 26, 9, 26, 26, 25, 9, 9, 9, 9, 9, 26, 26,
26, 26, 26, 26, 9, 26, 9, 26, 9, 26, 9, 9, 9, 9, 26, 5,
@@ -1509,8 +1512,6 @@ _hb_ucd_u8[32480] =
25, 25, 25, 25, 25, 26, 26, 25, 25, 25, 25, 25, 25, 26, 26, 26,
26, 26, 26, 26, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
9, 5, 9, 9, 9, 5, 5, 9, 5, 9, 5, 9, 5, 9, 9, 9,
9, 5, 9, 5, 5, 9, 5, 5, 5, 5, 5, 5, 6, 6, 9, 9,
9, 5, 9, 5, 5, 26, 26, 26, 26, 26, 26, 9, 5, 9, 5, 12,
@@ -1525,7 +1526,7 @@ _hb_ucd_u8[32480] =
20, 19, 22, 18, 22, 18, 22, 18, 22, 18, 21, 21, 21, 21, 21, 6,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 17, 17, 21, 21, 21, 21,
17, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 26, 26, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 26, 26, 21, 21, 21, 22, 18, 22, 18, 22, 18, 22, 18, 17, 2, 2,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26,
26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1558,8 +1559,9 @@ _hb_ucd_u8[32480] =
9, 5, 9, 5, 5, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5,
9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 9, 9, 9, 9, 5,
9, 9, 9, 9, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5,
- 2, 2, 9, 5, 9, 9, 9, 9, 5, 9, 5, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 9, 5, 7, 6, 6, 5, 7, 7, 7, 7, 7,
+ 9, 5, 9, 5, 9, 9, 9, 9, 5, 9, 5, 2, 2, 2, 2, 2,
+ 9, 5, 2, 5, 2, 5, 9, 5, 9, 5, 2, 2, 2, 2, 2, 2,
+ 2, 2, 6, 6, 6, 9, 5, 7, 6, 6, 5, 7, 7, 7, 7, 7,
7, 7, 12, 7, 7, 7, 12, 7, 7, 7, 7, 12, 7, 7, 7, 7,
7, 7, 7, 10, 10, 12, 12, 10, 26, 26, 26, 26, 12, 2, 2, 2,
15, 15, 15, 15, 15, 15, 26, 26, 23, 26, 2, 2, 2, 2, 2, 2,
@@ -1601,16 +1603,18 @@ _hb_ucd_u8[32480] =
7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 2, 7, 2,
7, 7, 2, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 24, 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 22,
2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 26, 2, 2,
+ 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 26,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 26, 26, 26,
21, 21, 21, 21, 21, 21, 21, 22, 18, 21, 2, 2, 2, 2, 2, 2,
21, 17, 17, 16, 16, 22, 18, 22, 18, 22, 18, 22, 18, 22, 18, 22,
18, 22, 18, 22, 18, 21, 21, 22, 18, 21, 21, 21, 21, 16, 16, 16,
21, 21, 21, 2, 21, 21, 21, 21, 17, 22, 18, 22, 18, 22, 18, 21,
21, 21, 25, 17, 25, 25, 25, 2, 21, 23, 21, 21, 2, 2, 2, 2,
+ 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 1,
2, 21, 21, 21, 23, 21, 21, 21, 22, 18, 21, 25, 21, 17, 21, 21,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 25, 18, 25, 22,
@@ -1641,7 +1645,14 @@ _hb_ucd_u8[32480] =
9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5,
9, 9, 9, 9, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2,
+ 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2,
7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9,
+ 9, 9, 9, 2, 9, 9, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 2, 5, 5, 2, 2, 2,
+ 6, 6, 6, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2,
7, 7, 7, 7, 7, 7, 2, 2, 7, 2, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 2, 7, 7, 2, 2, 2, 7, 2, 2, 7,
7, 7, 7, 7, 7, 7, 2, 21, 15, 15, 15, 15, 15, 15, 15, 15,
@@ -1675,14 +1686,15 @@ _hb_ucd_u8[32480] =
7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15, 15, 15, 15, 15, 15, 15, 7, 2, 2, 2, 2, 2, 2, 2, 2,
12, 15, 15, 15, 15, 21, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2,
+ 7, 7, 12, 12, 12, 12, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2,
7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2,
10, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 21, 21, 21, 21, 21, 21, 21, 2, 2,
15, 15, 15, 15, 15, 15, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12,
+ 12, 7, 7, 12, 12, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12,
10, 10, 10, 12, 12, 12, 12, 10, 10, 12, 12, 21, 21, 1, 21, 21,
- 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
+ 21, 21, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
12, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12, 10, 12, 12, 12,
12, 12, 12, 12, 12, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
@@ -1719,7 +1731,7 @@ _hb_ucd_u8[32480] =
12, 21, 21, 21, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 10, 10,
- 12, 12, 12, 12, 12, 12, 10, 12, 7, 2, 2, 2, 2, 2, 2, 2,
+ 12, 12, 12, 12, 12, 12, 10, 12, 7, 21, 2, 2, 2, 2, 2, 2,
10, 10, 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 2, 2, 2, 2,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 15, 21, 21, 21, 26,
12, 12, 12, 12, 12, 12, 12, 12, 10, 12, 12, 21, 2, 2, 2, 2,
@@ -1756,6 +1768,7 @@ _hb_ucd_u8[32480] =
26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2,
21, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 7, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
12, 12, 12, 12, 12, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
12, 12, 12, 12, 12, 12, 12, 21, 21, 21, 21, 21, 26, 26, 26, 26,
@@ -1771,16 +1784,18 @@ _hb_ucd_u8[32480] =
12, 12, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 21, 6, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
10, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 6, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 6, 2, 6, 6, 2,
7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 26, 12, 12, 21,
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2,
+ 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
26, 26, 26, 26, 26, 26, 26, 2, 2, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 10, 10, 12, 12, 12, 26, 26, 26, 10, 10, 10,
10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12,
12, 12, 12, 26, 26, 12, 12, 12, 12, 12, 12, 12, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 12, 12, 12, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2,
26, 26, 12, 12, 12, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5,
@@ -1818,15 +1833,18 @@ _hb_ucd_u8[32480] =
26, 26, 26, 26, 26, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 12, 26, 26, 21, 21, 21, 21, 21, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 12, 12, 12, 12, 12,
12, 12, 2, 12, 12, 2, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2,
12, 12, 12, 12, 12, 12, 12, 6, 6, 6, 6, 6, 6, 6, 2, 2,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 7, 26,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 2,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 23,
+ 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 2, 7, 7, 2,
7, 7, 7, 7, 7, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2,
5, 5, 5, 5, 12, 12, 12, 12, 12, 12, 12, 6, 2, 2, 2, 2,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 26, 15, 15, 15,
23, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1847,12 +1865,12 @@ _hb_ucd_u8[32480] =
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2,
2, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2,
26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 24, 24, 24, 24, 24,
+ 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26,
- 26, 26, 26, 26, 26, 2, 2, 2, 26, 26, 26, 2, 2, 2, 2, 2,
+ 26, 26, 26, 26, 26, 2, 2, 2, 26, 26, 26, 26, 26, 2, 2, 2,
26, 26, 26, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1891,9 +1909,9 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0,
0, 0, 0, 51, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 0, 0, 57, 58, 0,
- 59, 60, 61, 62, 63, 64, 65, 0, 66, 67, 0, 68, 69, 70, 71, 0,
- 60, 0, 72, 73, 74, 75, 0, 0, 69, 0, 76, 77, 0, 0, 0, 0,
+ 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 0, 0, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 0, 67, 68, 0, 69, 70, 71, 72, 0,
+ 61, 0, 73, 74, 75, 76, 0, 0, 70, 0, 77, 78, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1903,7 +1921,7 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80,
+ 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 81,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1913,13 +1931,13 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 85, 0, 79, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 86, 0, 80, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0,
@@ -1928,86 +1946,87 @@ _hb_ucd_u8[32480] =
28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 13, 35, 36, 0, 0, 26, 37, 38, 39, 0, 0, 0, 0, 0, 40,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1,
- 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 48, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0,
- 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 50, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 43, 1,
+ 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0,
+ 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 59, 0, 0, 0, 0,
- 0, 0, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 61, 0, 0, 0, 0,
+ 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 0, 0, 0, 0,
0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,
- 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 68,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 0, 66, 74, 0, 0, 0, 0, 0, 0, 75, 76, 72, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 67, 0, 0, 0,
- 0, 77, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0,
- 80, 0, 79, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82,
- 83, 84, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, 89, 1,
- 1, 1, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 93,
- 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 71, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 71,100,101, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 86, 0,102, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0,
- 1, 1, 86, 0, 0, 0, 0, 0, 0,103, 0, 0, 0, 0,104, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 73, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106,107,108, 0, 0, 0,
- 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 0, 0, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,110,111, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,
+ 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 71,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 0, 68, 77, 0, 0, 0, 0, 0, 0, 78, 79, 80, 81, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 70, 0, 0, 0,
+ 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0,
+ 85, 0, 84, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 87,
+ 88, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 92, 93, 94, 1,
+ 1, 1, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98,
+ 99,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 74, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0,103, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 74,105,106, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 91, 0,107, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
+ 1, 1, 91, 0, 0, 0, 0, 0, 0,108, 0, 0, 0, 0,109, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 0, 76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,112,113, 0, 0, 0,
+ 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 49, 0, 0, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,115,116, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 26,112, 0,113, 0, 0, 0, 0, 0,114, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 115, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,118, 72, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0,
- 0, 0, 0, 0,112, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0,
- 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,120, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0,123, 0, 47, 0, 0,
- 26,124,124, 0, 0, 0, 0, 0, 0, 0, 0, 0,125, 0, 0, 49,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,127, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129,105, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 97, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,132, 0, 0, 0, 0, 0, 0, 0,133, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,134, 0, 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 136,137,138,139,140,141, 0, 0, 0,142, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 0, 0, 0,
- 0, 0, 0, 0,133, 1, 1,144,145,112, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,147, 0, 0,
+ 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 26,117, 0,118, 0, 0, 0, 0, 0,119, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 120, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,123, 75, 0,
+ 0, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0, 0, 0,
+ 0, 0, 76,102, 0, 0, 0, 0, 0, 0, 0,125, 0, 0, 0, 0,
+ 0, 0, 0, 0,117, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0,
+ 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,126, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 0, 49, 0, 0,
+ 26,130,130, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 0, 0, 51,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,133, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,110, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0,102, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,138, 0, 0, 0, 0, 0, 0, 0,139, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,140, 0, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 142,143,144,145,146,147, 0, 0, 0,148, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 0, 0, 0,
+ 0, 0, 0, 0,139, 1, 1,150,151,117, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0,
+ 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,153, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230,
230,230,230,230,230,230,230,230,230,232,220,220,220,220,232,216,
220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220,
@@ -2028,7 +2047,8 @@ _hb_ucd_u8[32480] =
220,230,220,230,220,230,230, 0, 0, 0, 0, 0,230,230,220,230,
0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0,230,230, 0,230,
230,230,230,230,230,230,230,230, 0,230,230,230, 0,230,230,230,
- 230,230, 0, 0, 0,220,220,220, 0, 0, 0, 0, 0, 0, 0,220,
+ 230,230, 0, 0, 0,220,220,220, 0, 0, 0, 0,230,220,220,220,
+ 230,230,230,230, 0, 0,230,230,230,230,230,220,220,220,220,220,
230,230,230,230,230,230, 0,220,230,230,220,230,230,220,230,230,
230,220,220,220, 27, 28, 29,230,230,230,220,230,230,220,220,230,
230,230,230,230, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
@@ -2042,32 +2062,34 @@ _hb_ucd_u8[32480] =
130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0, 0, 0,
0, 0,220, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230, 0, 0, 0, 0,
- 9, 0, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0,228, 0, 0,
- 0, 0, 0, 0, 0,222,230,220, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,230,220, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
- 0, 0, 0, 0,230,230,230,230,230, 0, 0,220,230,230,230,230,
- 230,220,220,220,220,220,220,230,230,220, 0,220, 0, 0, 0,230,
- 220,230,230,230,230,230,230,230, 0, 0, 0, 0, 0, 0, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,230,230,230, 0,
- 1,220,220,220,220,220,230,230,220,220,220,220,230, 0, 1, 1,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,220, 0, 0, 0, 0, 0, 0,
- 230, 0, 0, 0,230,230, 0, 0, 0, 0, 0, 0,230,230,220,230,
- 230,230,230,230,230,230,220,230,230,234,214,220,202,230,230,230,
- 230,230,230,230,230,230,230,230,230,230,232,228,228,220, 0,230,
- 233,220,230,220,230,230, 1, 1,230,230,230,230, 1, 1, 1,230,
- 230, 0, 0, 0, 0,230, 0, 0, 0, 1, 1,230,220,230, 1, 1,
- 220,220,220,220,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 9, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230,230,230,230,230,
- 230,230, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,220,
- 220,220, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0,230, 0,230,230,220, 0, 0,230,230, 0, 0, 0,
- 0, 0,230,230, 0,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 26, 0,230,230,230,230,230,230,230,220,220,220,220,220,
- 220,220,230,230,230,230,230, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,220, 0,230,230, 1,220, 0, 0, 0, 0, 9, 0, 0, 0, 0,
- 0,230,220, 0, 0, 0, 0,230,230, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,220,220,230,230,230,220,230,220,220,220, 0, 9, 7, 0,
+ 9, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,
+ 0,230, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,222,230,220,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,220, 0, 0, 0,
+ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,230,230,230,230,
+ 230, 0, 0,220,230,230,230,230,230,220,220,220,220,220,220,230,
+ 230,220, 0,220,220,230,230,220,220,230,230,230,230,230,220,230,
+ 230,230,230, 0, 0, 0, 0,230,220,230,230,230,230,230,230,230,
+ 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 7, 0,230,230,230, 0, 1,220,220,220,220,220,230,230,
+ 220,220,220,220,230, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0,220, 0, 0, 0, 0, 0, 0,230, 0, 0, 0,230,230, 0, 0,
+ 0, 0, 0, 0,230,230,220,230,230,230,230,230,230,230,220,230,
+ 230,234,214,220,202,230,230,230,230,230,230,230,230,230,230,230,
+ 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1,
+ 230,230,230,230, 1, 1, 1,230,230, 0, 0, 0, 0,230, 0, 0,
+ 0, 1, 1,230,220,230, 1, 1,220,220,220,220,230, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,218,228,
+ 232,222,224,224, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 230,230,230,230,230,230,230,230,230,230, 0, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 0, 0, 0,220,220,220, 0, 0, 0, 0, 0, 9,
+ 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,230, 0,230,230,
+ 220, 0, 0,230,230, 0, 0, 0, 0, 0,230,230, 0,230, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0,230,230,230,230,
+ 230,230,230,220,220,220,220,220,220,220,230,230,230,230,230, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,230,230, 1,220, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0, 0,230,220, 0, 0, 0, 0,230,
+ 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,220,230,230,230,220,
+ 230,220,220,220, 0, 0,230,220,230,220, 0, 0, 0, 9, 7, 0,
0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 9, 7, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7,
7, 0, 0, 0,230,230,230,230,230, 0, 0, 0, 0, 0, 9, 0,
@@ -2135,7 +2157,7 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 20, 20, 1, 20, 20, 0, 0, 0, 0, 0,
@@ -2155,114 +2177,114 @@ _hb_ucd_u8[32480] =
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 27, 28, 28, 29, 30, 31, 32, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 35, 35, 35, 35, 35, 59, 59, 60, 35,
- 35, 35, 35, 35, 35, 35, 61, 62, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 63, 64, 35, 65, 66, 66, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 67, 66, 68, 69, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 70, 71, 35, 35,
- 35, 35, 72, 35, 35, 35, 35, 35, 35, 35, 35, 35, 73, 74, 75, 76,
- 77, 78, 35, 35, 79, 80, 35, 35, 81, 35, 82, 83, 84, 85, 17, 86,
- 87, 88, 35, 35, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 27, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 34, 34, 34, 34, 58, 59, 59, 60, 34,
+ 34, 34, 34, 34, 34, 34, 61, 62, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 63, 64, 34, 65, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 67, 66, 68, 69, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 70, 71, 72, 34, 34,
+ 34, 34, 73, 34, 34, 34, 34, 34, 34, 34, 34, 74, 75, 76, 77, 78,
+ 79, 80, 34, 81, 82, 83, 34, 84, 85, 34, 86, 87, 88, 89, 17, 90,
+ 91, 92, 34, 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 89, 25, 25, 25, 25, 25, 25, 25, 90,
- 91, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 92, 25, 25, 25, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 93, 35, 35, 35, 35, 35, 35,
- 25, 94, 35, 35, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 25, 25, 25, 25, 25, 25, 25, 93, 25, 25, 25, 25, 25, 25, 25, 94,
+ 95, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 96, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 97, 34, 34, 34, 34, 34, 34,
+ 25, 98, 34, 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, 99, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2289,7 +2311,7 @@ _hb_ucd_u8[32480] =
14, 2, 2, 2, 2, 14, 14, 14, 14, 14, 14, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 0, 3, 2, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
@@ -2307,10 +2329,8 @@ _hb_ucd_u8[32480] =
90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
95, 95, 2, 2, 95, 2, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 37, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 7,
@@ -2359,9 +2379,9 @@ _hb_ucd_u8[32480] =
23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
- 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2,
+ 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2,
23, 23, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 23, 2, 23, 23,
- 23, 2, 2, 2, 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 23, 23,
+ 23, 2, 2, 23, 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 23, 23,
23, 23, 23, 23, 23, 23, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 2, 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16,
@@ -2369,7 +2389,7 @@ _hb_ucd_u8[32480] =
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16,
2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2,
16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, 2, 2,
- 2, 2, 2, 2, 16, 2, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16,
+ 2, 2, 2, 16, 16, 2, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 2, 20, 20, 20, 2, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -2389,7 +2409,8 @@ _hb_ucd_u8[32480] =
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 2, 2, 2, 2, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18,
+ 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18,
18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 18, 2, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
@@ -2424,8 +2445,8 @@ _hb_ucd_u8[32480] =
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 2,
2, 2, 2, 2, 2, 2, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 2, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 2, 2, 2,
2, 2, 2, 2, 2, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 2, 2, 2, 2, 2, 2,
@@ -2435,7 +2456,7 @@ _hb_ucd_u8[32480] =
31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
31, 31, 31, 31, 2, 2, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
2, 2, 2, 2, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 2,
2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
@@ -2458,11 +2479,11 @@ _hb_ucd_u8[32480] =
91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
91, 91, 91, 2, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
- 91, 91, 91, 91, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 91, 91, 91, 91, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 2, 2, 2, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
+ 62, 62, 62, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 2, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 2, 2, 2, 2, 2, 2,
2, 2, 93, 93, 93, 93, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
@@ -2480,8 +2501,7 @@ _hb_ucd_u8[32480] =
19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 9, 9, 9, 9,
9, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 6, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9,
+ 19, 19, 19, 19, 19, 9, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9,
9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9,
2, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9,
@@ -2492,7 +2512,9 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 0, 19, 2, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 2, 2, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
+ 19, 19, 19, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
19, 19, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0,
@@ -2502,16 +2524,15 @@ _hb_ucd_u8[32480] =
27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 2, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 2, 2, 2, 2, 2, 55,
55, 55, 55, 55, 55, 55, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 2, 2,
2, 2, 2, 2, 2, 61, 61, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 61, 30, 30, 30, 30, 30, 30, 30, 2, 2, 2,
2, 2, 2, 2, 2, 2, 30, 30, 30, 30, 30, 30, 30, 2, 30, 30,
- 30, 30, 30, 30, 30, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 30, 30, 30, 30, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2,
@@ -2533,8 +2554,7 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0,
- 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 2, 2, 2, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 0, 0, 0, 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
39, 39, 39, 2, 2, 2, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2,
2, 2, 2, 2, 2, 2, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86,
@@ -2544,8 +2564,9 @@ _hb_ucd_u8[32480] =
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 2, 2,
2, 2, 2, 2, 2, 2, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0,
- 0, 19, 19, 19, 19, 19, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19,
+ 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 2, 2, 2, 2, 2, 19, 19, 2, 19, 2, 19, 19, 19, 19, 19,
+ 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
60, 60, 60, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2587,14 +2608,16 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2,
2, 2, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14,
14, 14, 14, 2, 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 14, 14, 14, 14, 14, 14, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 3, 3, 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
+ 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
@@ -2642,11 +2665,17 @@ _hb_ucd_u8[32480] =
106,106,106,106,106,106,106,106,106,106,106,106,106,106, 2, 2,
2, 2, 2, 2, 2, 2,104,104,104,104,104,104,104,104,104,104,
104,104,104,104,104,104,104,104,104,104, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2,104,110,110,110,110,110,110,110,110,110,110,
+ 2, 2, 2, 2, 2,104,161,161,161,161,161,161,161,161,161,161,
+ 161, 2,161,161,161,161,161,161,161, 2,161,161, 2,161,161,161,
+ 161,161,161,161,161,161,161,161, 2,161,161,161,161,161,161,161,
+ 161,161,161,161,161,161,161,161, 2,161,161,161,161,161,161,161,
+ 2,161,161, 2, 2, 2,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110, 2, 2, 2,
2, 2, 2, 2, 2, 2,110,110,110,110,110,110, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,110,110,110,110,110,110,110,110, 2, 2,
- 2, 2, 2, 2, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2,
+ 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 2, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 2, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 2, 2, 2, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 2, 47, 47, 2,
2, 2, 47, 2, 2, 47, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
@@ -2692,14 +2721,15 @@ _hb_ucd_u8[32480] =
130,130,130,130,130,130,144,144,144,144,144,144,144,144,144,144,
144,144,144,144,144,144,144,144,144,144,144,144,144,144, 2, 2,
2, 2, 2, 2, 2, 2,144,144,144,144,144,144,144,144,144,144,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 2,156,156,156,156,156,156,156,156,156,156,
+ 2, 2, 2, 2, 2, 2,156,156,156,156,156,156,156,156,156,156,
156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
2,156,156,156, 2, 2,156,156, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,147,147,147,147,147,147,147,147,147,147,
147,147,147,147,147,147,147,147,147,147,147,147,147,147, 2, 2,
2, 2, 2, 2, 2, 2,148,148,148,148,148,148,148,148,148,148,
148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+ 2, 2, 2, 2, 2, 2,158,158,158,158,158,158,158,158,158,158,
+ 158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
2, 2, 2, 2, 2, 2,153,153,153,153,153,153,153,153,153,153,
153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
153,153, 2, 2, 2, 2,149,149,149,149,149,149,149,149,149,149,
@@ -2707,9 +2737,9 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
94, 94, 94, 94, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2,
2, 2, 2, 2, 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2, 2, 2, 2, 2, 2,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 85, 2, 2,101,101,101,101,101,101,101,101,101,101,
101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, 2,
2, 2, 2, 2, 2, 2,101,101,101,101,101,101,101,101,101,101,
@@ -2752,12 +2782,12 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2,114,114,114,114,114,114,114,114,114,114,
2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 2, 2, 2,102,102,102,102,102,102,102,102,102,102,
- 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 2,
- 2, 2, 2, 2, 2, 2,102,102,102,102,102,102,102,102,102,102,
+ 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
2, 2, 2, 2, 2, 2,126,126,126,126,126,126,126,126,126,126,
126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
126, 2, 2,126,126,126,126,126,126,126,126,126,126,126,126,126,
- 126,126, 2, 2, 2, 2,142,142,142,142,142,142,142,142,142,142,
+ 126,126, 2, 2, 2, 2,126,126,126,126,126,126,126, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2,142,142,142,142,142,142,142,142,142,142,
142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
142,142, 2, 2, 2, 2,125,125,125,125,125,125,125,125,125,125,
125,125,125,125,125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2,
@@ -2805,6 +2835,8 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
63, 63, 63, 63, 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2,157,157,157,157,157,157,157,157,157,157,
+ 157,157,157,157,157,157,157,157,157, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 80, 80, 80, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 2,
@@ -2814,7 +2846,10 @@ _hb_ucd_u8[32480] =
2, 2, 2, 2, 2, 2,115,115,115,115,115,115,115,115,115,115,
115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
115,115,115,115,115, 2,115,115,115,115,115,115,115,115,115,115,
- 2, 2, 2, 2,115,115,103,103,103,103,103,103,103,103,103,103,
+ 2, 2, 2, 2,115,115,159,159,159,159,159,159,159,159,159,159,
+ 159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+ 159,159,159,159,159, 2,159,159,159,159,159,159,159,159,159,159,
+ 2, 2, 2, 2, 2, 2,103,103,103,103,103,103,103,103,103,103,
103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
103,103,103,103, 2, 2,103,103,103,103,103,103, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,119,119,119,119,119,119,119,119,119,119,
@@ -2827,16 +2862,17 @@ _hb_ucd_u8[32480] =
146, 2, 2, 2, 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 2, 2, 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2,
- 2, 2, 2, 2, 2, 99,136,139, 0, 0,155, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 99,136,139, 13, 13,155, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 13, 13, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,136,136,136,136,136,136,136,136,136,136,
136,136,136,136,136,136,136,136,136,136,136,136,136,136, 2, 2,
2, 2, 2, 2, 2, 2,155,155,155,155,155,155,155,155,155,155,
155,155,155,155,155,155,155,155,155,155,155,155, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2,136,136,136,136,136,136,136,136,136, 2,
- 2, 2, 2, 2, 2, 2, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 2, 17, 17, 17, 17, 17,
+ 17, 17, 2, 17, 17, 2, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 17, 17, 17, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 2, 2,
2, 2, 2, 2, 2, 2,139,139,139,139,139,139,139,139,139,139,
139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
@@ -2845,14 +2881,16 @@ _hb_ucd_u8[32480] =
105, 2, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105,
105,105,105, 2, 2, 2,105,105,105,105,105,105,105,105,105, 2,
2, 2, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105,
- 2, 2,105,105,105,105, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
+ 2, 2,105,105,105,105, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2,
+ 1, 1, 1, 1, 0, 0, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0,
0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2868,24 +2906,28 @@ _hb_ucd_u8[32480] =
131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
131,131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,131,131,131,131,131, 2,131,131,131,131,131,131,131,131,131,
- 131,131,131,131,131,131, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56,
+ 131,131,131,131,131,131, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56,
56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 2,
2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, 2, 56, 56, 56, 56,
56, 2, 2, 2, 2, 2,151,151,151,151,151,151,151,151,151,151,
151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
151,151,151, 2, 2, 2,151,151,151,151,151,151,151,151,151,151,
151,151,151,151, 2, 2,151,151,151,151,151,151,151,151,151,151,
- 2, 2, 2, 2,151,151,152,152,152,152,152,152,152,152,152,152,
+ 2, 2, 2, 2,151,151,160,160,160,160,160,160,160,160,160,160,
+ 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+ 160,160,160,160,160, 2,152,152,152,152,152,152,152,152,152,152,
152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
- 2, 2, 2, 2, 2,152,113,113,113,113,113,113,113,113,113,113,
+ 2, 2, 2, 2, 2,152, 30, 30, 30, 30, 30, 30, 30, 2, 30, 30,
+ 30, 30, 2, 30, 30, 2, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 2,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113, 2, 2,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113, 2, 2, 2,
2, 2, 2, 2, 2, 2,132,132,132,132,132,132,132,132,132,132,
132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
132,132, 2, 2, 2, 2,132,132,132,132,132,132,132,132,132,132,
2, 2, 2, 2,132,132, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3,
2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3,
@@ -2895,14 +2937,14 @@ _hb_ucd_u8[32480] =
3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, 3,
- 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
+ 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 15, 0, 0, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0,
- 0, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2,
+ 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
+ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0,
+ 0, 0, 0, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2,
2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -3099,7 +3141,7 @@ _hb_ucd_u8[32480] =
0, 0, 0, 0, 0, 0, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0,
};
static const uint16_t
-_hb_ucd_u16[11328] =
+_hb_ucd_u16[11584] =
{
0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
@@ -3109,14 +3151,14 @@ _hb_ucd_u16[11328] =
13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50,
51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58,
59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66,
- 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 74, 75, 76, 32,
- 77, 48, 48, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 84, 85, 92, 93, 94, 95, 96, 97, 98, 85, 99, 100, 101, 89, 102,
- 103, 84, 85, 104, 105, 106, 89, 107, 108, 109, 110, 111, 112, 113, 95, 114,
- 115, 116, 85, 117, 118, 119, 89, 120, 121, 116, 85, 122, 123, 124, 89, 125,
- 126, 116, 48, 127, 128, 129, 89, 130, 131, 132, 48, 133, 134, 135, 95, 136,
- 137, 48, 48, 138, 139, 140, 72, 72, 141, 48, 142, 143, 144, 145, 72, 72,
- 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 72, 72,
+ 48, 67, 68, 69, 48, 70, 71, 48, 72, 73, 48, 48, 74, 32, 75, 32,
+ 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101,
+ 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113,
+ 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124,
+ 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135,
+ 136, 48, 48, 137, 138, 139, 140, 140, 141, 48, 142, 143, 144, 145, 140, 140,
+ 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 140, 140,
48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 168, 169, 48, 48, 168, 48, 48, 170, 171, 172, 48, 48,
@@ -3124,51 +3166,49 @@ _hb_ucd_u16[11328] =
178, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183,
- 184, 185, 48, 186, 48, 187, 184, 188, 48, 48, 48, 189, 190, 191, 192, 193,
+ 48, 184, 48, 185, 48, 186, 187, 188, 48, 48, 48, 189, 190, 191, 192, 193,
194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199,
48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209,
- 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 72, 72, 72,
+ 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 140, 140, 140,
217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225,
48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235,
- 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 240,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 241, 13, 13, 13, 13, 13, 13,
- 242, 243, 242, 242, 243, 244, 242, 245, 246, 246, 246, 247, 248, 249, 250, 251,
- 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 262, 72, 263, 264, 216,
- 265, 266, 267, 268, 269, 270, 271, 271, 272, 273, 274, 209, 275, 276, 209, 277,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 279, 209, 280, 209, 209, 209, 209, 281, 209, 282, 278, 283, 209, 284, 285, 209,
- 209, 209, 286, 72, 287, 72, 270, 270, 270, 288, 209, 209, 209, 209, 289, 270,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 290, 291, 209, 209, 292,
- 209, 209, 209, 209, 209, 209, 293, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 209, 209, 209, 294, 295, 270, 296, 209, 209, 297, 278, 298, 278,
+ 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 32,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 240, 13, 13, 13, 13, 13, 13,
+ 241, 242, 241, 241, 242, 243, 241, 244, 245, 245, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 272, 273, 274, 275, 209, 276, 277, 209, 278,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 280, 209, 281, 209, 209, 209, 209, 282, 209, 283, 279, 284, 209, 285, 286, 209,
+ 209, 209, 287, 140, 288, 140, 271, 271, 271, 289, 209, 209, 209, 209, 290, 271,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 291, 292, 209, 209, 293,
+ 209, 209, 209, 209, 209, 209, 294, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 209, 209, 209, 295, 296, 271, 297, 209, 209, 298, 279, 299, 279,
209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 278, 278, 278, 278, 278, 278, 278, 278, 299, 300, 278, 278, 278, 301, 278, 302,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 209, 209, 209, 278, 303, 209, 209, 304, 209, 305, 209, 209, 209, 209, 209, 209,
- 9, 9, 306, 11, 11, 307, 308, 309, 13, 13, 13, 13, 13, 13, 310, 311,
- 11, 11, 312, 48, 48, 48, 313, 314, 48, 315, 316, 316, 316, 316, 32, 32,
- 317, 318, 319, 320, 321, 322, 72, 72, 209, 323, 209, 209, 209, 209, 209, 324,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 325, 72, 326,
- 327, 328, 329, 330, 137, 48, 48, 48, 48, 331, 178, 48, 48, 48, 48, 332,
- 333, 48, 48, 137, 48, 48, 48, 48, 200, 334, 48, 48, 209, 209, 324, 48,
- 209, 335, 336, 209, 337, 338, 209, 209, 336, 209, 209, 338, 209, 209, 209, 209,
+ 279, 279, 279, 279, 279, 279, 279, 279, 300, 301, 279, 279, 279, 302, 279, 303,
+ 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+ 209, 209, 209, 279, 304, 209, 209, 305, 209, 306, 209, 209, 209, 209, 209, 209,
+ 9, 9, 9, 11, 11, 11, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310,
+ 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32,
+ 316, 317, 318, 319, 320, 321, 140, 140, 209, 322, 209, 209, 209, 209, 209, 323,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 324, 140, 325,
+ 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331,
+ 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48,
+ 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209,
209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 209, 209, 209, 209,
+ 48, 338, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 151,
- 48, 339, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 287, 48, 48, 229,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 286, 48, 48, 229,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 340, 48, 341, 72, 13, 13, 342, 343, 13, 344, 48, 48, 48, 48, 345, 346,
- 31, 347, 348, 349, 13, 13, 13, 350, 351, 352, 353, 354, 355, 72, 72, 356,
+ 339, 48, 340, 140, 13, 13, 341, 342, 13, 343, 48, 48, 48, 48, 344, 345,
+ 31, 346, 347, 348, 13, 13, 13, 349, 350, 351, 352, 353, 354, 355, 140, 356,
357, 48, 358, 359, 48, 48, 48, 360, 361, 48, 48, 362, 363, 192, 32, 364,
- 64, 48, 365, 48, 366, 367, 48, 151, 77, 48, 48, 368, 369, 370, 371, 372,
+ 64, 48, 365, 48, 366, 367, 48, 151, 76, 48, 48, 368, 369, 370, 371, 372,
48, 48, 373, 374, 375, 376, 48, 377, 48, 48, 48, 378, 379, 380, 381, 382,
- 383, 384, 316, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192,
+ 383, 384, 315, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 388, 48, 389, 48, 48, 206,
390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390,
@@ -3177,120 +3217,130 @@ _hb_ucd_u16[11328] =
391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 72, 72,
+ 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 140, 140,
392, 393, 394, 395, 396, 48, 48, 48, 48, 48, 48, 397, 398, 399, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 400, 72, 48, 48, 48, 48, 401, 48, 48, 74, 72, 72, 402,
- 32, 403, 32, 404, 405, 406, 407, 73, 48, 48, 48, 48, 48, 48, 48, 408,
- 409, 2, 3, 4, 5, 410, 411, 412, 48, 413, 48, 200, 414, 415, 416, 417,
- 418, 48, 172, 419, 204, 204, 72, 72, 48, 48, 48, 48, 48, 48, 48, 71,
- 420, 270, 270, 421, 271, 271, 271, 422, 423, 424, 425, 72, 72, 209, 209, 426,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 151, 48, 48, 48, 101, 427, 428,
- 48, 48, 429, 48, 430, 48, 48, 431, 48, 432, 48, 48, 433, 434, 72, 72,
- 9, 9, 435, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 436, 11, 437,
- 48, 48, 74, 48, 48, 48, 438, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 48, 48, 48, 400, 209, 48, 48, 48, 48, 401, 48, 48, 402, 140, 140, 403,
+ 32, 404, 32, 405, 406, 407, 408, 409, 48, 48, 48, 48, 48, 48, 48, 410,
+ 411, 2, 3, 4, 5, 412, 413, 414, 48, 415, 48, 200, 416, 417, 418, 419,
+ 420, 48, 172, 421, 204, 204, 140, 140, 48, 48, 48, 48, 48, 48, 48, 71,
+ 422, 271, 271, 423, 272, 272, 272, 424, 425, 426, 427, 140, 140, 209, 209, 428,
+ 140, 140, 140, 140, 140, 140, 140, 140, 48, 151, 48, 48, 48, 100, 429, 430,
+ 48, 48, 431, 48, 432, 48, 48, 433, 48, 434, 48, 48, 435, 436, 140, 140,
+ 9, 9, 437, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 438, 11, 439,
+ 48, 48, 440, 48, 48, 48, 441, 442, 442, 443, 444, 445, 140, 140, 140, 140,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 315, 48, 199, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 439, 48, 48, 440, 48, 441, 48, 442, 48, 200, 443, 72, 72, 72, 48, 444,
- 48, 445, 48, 446, 72, 72, 72, 72, 48, 48, 48, 447, 270, 448, 270, 270,
- 449, 450, 48, 451, 452, 453, 48, 454, 48, 455, 72, 72, 456, 48, 457, 458,
- 48, 48, 48, 459, 48, 460, 48, 461, 48, 462, 463, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 196, 72, 72, 72, 9, 9, 9, 464, 11, 11, 11, 465,
- 48, 48, 466, 192, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 270, 467, 48, 48, 468, 469, 72, 72, 72, 72,
- 48, 455, 470, 48, 62, 471, 72, 72, 72, 72, 72, 48, 472, 72, 48, 315,
- 473, 48, 48, 474, 475, 448, 476, 477, 222, 48, 48, 478, 479, 48, 196, 192,
- 480, 48, 481, 482, 483, 48, 48, 484, 222, 48, 48, 485, 486, 487, 488, 489,
- 48, 98, 490, 491, 72, 72, 72, 72, 492, 493, 494, 48, 48, 495, 496, 192,
- 497, 84, 85, 498, 499, 500, 501, 502, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 503, 504, 505, 469, 72, 48, 48, 48, 506, 507, 192, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 508, 509, 510, 511, 72, 72,
- 48, 48, 48, 512, 513, 192, 514, 72, 48, 48, 515, 516, 192, 72, 72, 72,
- 48, 173, 517, 518, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 490, 519, 72, 72, 72, 72, 72, 72, 9, 9, 11, 11, 148, 520,
- 521, 522, 48, 523, 524, 192, 72, 72, 72, 72, 525, 48, 48, 526, 527, 72,
- 528, 48, 48, 529, 530, 531, 48, 48, 532, 533, 534, 72, 48, 48, 48, 196,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 85, 48, 508, 535, 536, 148, 175, 537, 48, 538, 539, 540, 72, 72, 72, 72,
- 541, 48, 48, 542, 543, 192, 544, 48, 545, 546, 192, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 547,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 101, 270, 548, 549, 550,
+ 48, 48, 48, 314, 48, 199, 440, 140, 446, 27, 27, 447, 140, 140, 140, 140,
+ 448, 48, 48, 449, 48, 450, 48, 451, 48, 200, 452, 140, 140, 140, 48, 453,
+ 48, 454, 48, 455, 140, 140, 140, 140, 48, 48, 48, 456, 271, 457, 271, 271,
+ 458, 459, 48, 460, 461, 462, 48, 463, 48, 464, 140, 140, 465, 48, 466, 467,
+ 48, 48, 48, 468, 48, 469, 48, 470, 48, 471, 472, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 196, 140, 140, 140, 9, 9, 9, 473, 11, 11, 11, 474,
+ 48, 48, 475, 192, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 271, 476, 48, 48, 477, 478, 140, 140, 140, 140,
+ 48, 464, 479, 48, 62, 480, 140, 48, 481, 140, 140, 48, 482, 140, 48, 314,
+ 483, 48, 48, 484, 485, 457, 486, 487, 222, 48, 48, 488, 489, 48, 196, 192,
+ 490, 48, 491, 492, 493, 48, 48, 494, 222, 48, 48, 495, 496, 497, 498, 499,
+ 48, 97, 500, 501, 140, 140, 140, 140, 502, 503, 504, 48, 48, 505, 506, 192,
+ 507, 83, 84, 508, 509, 510, 511, 512, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 513, 514, 515, 478, 140, 48, 48, 48, 516, 517, 192, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 48, 48, 518, 519, 520, 521, 140, 140,
+ 48, 48, 48, 522, 523, 192, 524, 140, 48, 48, 525, 526, 192, 140, 140, 140,
+ 48, 173, 527, 528, 314, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 500, 529, 140, 140, 140, 140, 140, 140, 9, 9, 11, 11, 148, 530,
+ 531, 532, 48, 533, 534, 192, 140, 140, 140, 140, 535, 48, 48, 536, 537, 140,
+ 538, 48, 48, 539, 540, 541, 48, 48, 542, 543, 544, 48, 48, 48, 48, 196,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 84, 48, 518, 545, 546, 148, 175, 547, 48, 548, 549, 550, 140, 140, 140, 140,
+ 551, 48, 48, 552, 553, 192, 554, 48, 555, 556, 192, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 557,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 100, 271, 558, 559, 560,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 207, 72, 72, 72, 72, 72, 72,
- 271, 271, 271, 271, 271, 271, 551, 552, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 388, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 200, 553, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 315, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 196, 48, 200, 370, 72, 72, 72, 72, 72, 72, 48, 204, 554,
- 48, 48, 48, 555, 556, 557, 558, 559, 48, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 9, 9, 11, 11, 270, 560, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 561, 562, 563, 563, 564, 565, 72, 72, 72, 72, 566, 567,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 207, 140, 140, 140, 140, 140, 140,
+ 272, 272, 272, 272, 272, 272, 561, 562, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 388, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 563,
+ 48, 48, 200, 564, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 314, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 196, 48, 200, 370, 48, 48, 48, 48, 200, 192, 48, 204, 565,
+ 48, 48, 48, 566, 567, 568, 569, 570, 48, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 9, 9, 11, 11, 271, 571, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 572, 573, 574, 574, 575, 576, 140, 140, 140, 140, 577, 578,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 74,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 199, 72, 72,
- 196, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 440,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 199, 140, 140,
+ 196, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 579,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 200, 72, 72, 72, 568, 569, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 580, 140, 140, 580, 581, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 206,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 71, 151, 196, 570, 571, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 325,
- 209, 209, 572, 209, 209, 209, 573, 574, 575, 209, 576, 209, 209, 209, 577, 72,
- 209, 209, 209, 209, 578, 72, 72, 72, 72, 72, 72, 72, 72, 72, 270, 579,
- 209, 209, 209, 209, 209, 286, 270, 452, 72, 72, 72, 72, 72, 72, 72, 72,
- 9, 580, 11, 581, 582, 583, 242, 9, 584, 585, 586, 587, 588, 9, 580, 11,
- 589, 590, 11, 591, 592, 593, 594, 9, 595, 11, 9, 580, 11, 581, 582, 11,
- 242, 9, 584, 594, 9, 595, 11, 9, 580, 11, 596, 9, 597, 598, 599, 600,
- 11, 601, 9, 602, 603, 604, 605, 11, 606, 9, 607, 11, 608, 609, 609, 609,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 48, 48, 71, 151, 196, 582, 583, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 32, 32, 584, 32, 585, 209, 209, 209, 209, 209, 209, 209, 323, 140, 140, 140,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 324,
+ 209, 209, 586, 209, 209, 209, 587, 588, 589, 209, 590, 209, 209, 209, 288, 140,
+ 209, 209, 209, 209, 591, 140, 140, 140, 140, 140, 140, 140, 140, 140, 271, 592,
+ 209, 209, 209, 209, 209, 287, 271, 461, 140, 140, 140, 140, 140, 140, 140, 140,
+ 9, 593, 11, 594, 595, 596, 241, 9, 597, 598, 599, 600, 601, 9, 593, 11,
+ 602, 603, 11, 604, 605, 606, 607, 9, 608, 11, 9, 593, 11, 594, 595, 11,
+ 241, 9, 597, 607, 9, 608, 11, 9, 593, 11, 609, 9, 610, 611, 612, 613,
+ 11, 614, 9, 615, 616, 617, 618, 11, 619, 9, 620, 11, 621, 622, 622, 622,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
+ 32, 32, 32, 623, 32, 32, 624, 625, 626, 627, 45, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 628, 629, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 630, 631, 632, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 48, 48, 151, 633, 634, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 635, 140, 48, 48, 636, 637,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 638, 200,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 639, 585, 140, 140,
+ 9, 9, 597, 11, 640, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 498, 271, 271, 641, 642, 140, 140, 140, 140,
+ 498, 271, 643, 644, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 645, 48, 646, 647, 648, 649, 650, 651, 652, 206, 653, 206, 140, 140, 140, 654,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 655, 655, 655, 209, 324,
+ 656, 209, 209, 209, 209, 209, 209, 209, 209, 209, 657, 140, 140, 140, 658, 209,
+ 659, 209, 209, 325, 660, 661, 324, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 662,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 663, 426, 426,
+ 209, 209, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 660, 325, 427,
+ 325, 209, 209, 209, 664, 176, 209, 209, 664, 209, 657, 661, 140, 140, 140, 140,
209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
- 32, 32, 32, 610, 32, 32, 611, 612, 613, 614, 45, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 615, 616, 617, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 151, 618, 619, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 620, 621,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 622, 623, 72, 72,
- 9, 9, 584, 11, 624, 370, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 488, 270, 270, 625, 626, 72, 72, 72, 72,
- 488, 270, 627, 628, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 629, 48, 630, 631, 632, 633, 634, 635, 636, 206, 637, 206, 72, 72, 72, 638,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 209, 209, 326, 209, 209, 209, 209, 209, 209, 324, 335, 639, 639, 639, 209, 325,
- 640, 209, 209, 209, 209, 209, 209, 209, 209, 209, 641, 72, 72, 72, 642, 209,
- 643, 209, 209, 326, 577, 644, 325, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 645,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 646, 424, 424,
- 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 577, 326, 72,
- 326, 209, 209, 209, 646, 176, 209, 209, 646, 209, 641, 644, 72, 72, 72, 72,
- 209, 209, 209, 209, 209, 209, 209, 647, 209, 209, 209, 209, 648, 209, 209, 209,
- 209, 209, 209, 209, 209, 324, 641, 649, 286, 209, 577, 286, 643, 286, 72, 72,
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 650, 209, 209, 287, 72, 72, 192,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 204, 72, 72,
+ 209, 209, 209, 209, 209, 323, 657, 665, 287, 209, 426, 288, 324, 176, 664, 287,
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 666, 209, 209, 288, 140, 140, 192,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 205, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 196, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 469, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 101, 72,
- 48, 204, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 100, 140,
+ 48, 204, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 651, 72, 652, 652, 652, 652, 652, 652, 72, 72, 72, 72, 72, 72, 72, 72,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72,
+ 48, 48, 48, 48, 71, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 667, 140, 668, 668, 668, 668, 668, 668, 140, 140, 140, 140, 140, 140, 140, 140,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140,
391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
- 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 653,
+ 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 669,
391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
- 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 654,
+ 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 670,
0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 3, 3, 4, 5, 4, 5,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 0, 0, 7, 0,
@@ -3299,191 +3349,199 @@ _hb_ucd_u16[11328] =
14, 14, 14, 16, 17, 18, 17, 17, 19, 20, 21, 21, 22, 21, 23, 24,
25, 26, 27, 27, 28, 29, 27, 30, 27, 27, 27, 27, 27, 31, 27, 27,
32, 33, 33, 33, 34, 27, 27, 27, 35, 35, 35, 36, 37, 37, 37, 38,
- 39, 39, 40, 41, 42, 43, 44, 45, 45, 45, 27, 46, 47, 48, 49, 27,
- 50, 50, 50, 50, 50, 51, 52, 50, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 111, 112, 113, 114, 111, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 124, 125, 124, 126, 45, 45, 127, 128, 129, 130, 131, 132, 45, 45,
- 133, 133, 133, 133, 134, 133, 135, 136, 133, 134, 133, 137, 137, 138, 45, 45,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 141, 140, 140, 142,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 144, 144, 144, 144, 145, 146, 144, 144, 145, 144, 144, 147, 148, 149, 144, 144,
- 144, 148, 144, 144, 144, 150, 144, 151, 144, 152, 153, 153, 153, 153, 153, 154,
- 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
- 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
- 155, 155, 155, 155, 155, 155, 155, 155, 156, 157, 158, 158, 158, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 169, 169, 169, 169, 170, 171, 171,
- 172, 173, 174, 174, 174, 174, 174, 175, 174, 174, 176, 155, 155, 155, 155, 177,
- 178, 179, 180, 180, 181, 182, 183, 184, 185, 185, 186, 185, 187, 188, 169, 169,
- 189, 190, 191, 191, 191, 192, 191, 193, 194, 194, 195, 8, 196, 45, 45, 45,
- 197, 197, 197, 197, 198, 197, 197, 199, 200, 200, 200, 200, 201, 201, 201, 202,
- 203, 203, 203, 204, 205, 206, 206, 206, 207, 140, 140, 208, 209, 210, 211, 212,
- 4, 4, 213, 4, 4, 214, 215, 216, 4, 4, 4, 217, 8, 8, 8, 218,
+ 39, 39, 40, 41, 42, 43, 44, 27, 45, 46, 27, 27, 27, 27, 47, 27,
+ 48, 48, 48, 48, 48, 49, 50, 48, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 109, 110, 111, 112, 109, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 122, 123, 122, 124, 125, 125, 126, 127, 128, 129, 130, 131, 125, 125,
+ 132, 132, 132, 132, 133, 132, 134, 135, 132, 133, 132, 136, 136, 137, 125, 125,
+ 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 140, 139, 139, 141,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 143, 143, 143, 143, 144, 145, 143, 143, 144, 143, 143, 146, 147, 148, 143, 143,
+ 143, 147, 143, 143, 143, 149, 143, 150, 143, 151, 152, 152, 152, 152, 152, 153,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 155, 156, 157, 157, 157, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 168, 168, 168, 168, 169, 170, 170,
+ 171, 172, 173, 173, 173, 173, 173, 174, 173, 173, 175, 154, 154, 154, 154, 176,
+ 177, 178, 179, 179, 180, 181, 182, 183, 184, 184, 185, 184, 186, 187, 168, 168,
+ 188, 189, 190, 190, 190, 191, 190, 192, 193, 193, 194, 8, 195, 125, 125, 125,
+ 196, 196, 196, 196, 197, 196, 196, 198, 199, 199, 199, 199, 200, 200, 200, 201,
+ 202, 202, 202, 203, 204, 205, 205, 205, 206, 139, 139, 207, 208, 209, 210, 211,
+ 4, 4, 212, 4, 4, 213, 214, 215, 4, 4, 4, 216, 8, 8, 8, 8,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 11, 219, 11, 11, 219, 220, 11, 221, 11, 11, 11, 222, 222, 223, 11, 224,
- 225, 0, 0, 0, 0, 0, 226, 227, 228, 229, 0, 0, 45, 8, 8, 196,
+ 11, 217, 11, 11, 217, 218, 11, 219, 11, 11, 11, 220, 220, 221, 11, 222,
+ 223, 0, 0, 0, 0, 0, 224, 225, 226, 227, 0, 0, 228, 8, 8, 229,
0, 0, 230, 231, 232, 0, 4, 4, 233, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 234, 45, 235, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 234, 125, 235, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0,
- 239, 239, 240, 239, 239, 240, 4, 4, 241, 241, 241, 241, 241, 241, 241, 242,
- 140, 140, 141, 243, 243, 243, 244, 245, 144, 246, 247, 247, 247, 247, 14, 14,
- 0, 0, 0, 0, 0, 248, 45, 45, 249, 250, 249, 249, 249, 249, 249, 251,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 252, 45, 253,
- 254, 0, 255, 256, 257, 258, 258, 258, 258, 259, 260, 261, 261, 261, 261, 262,
- 263, 264, 264, 265, 143, 143, 143, 143, 266, 0, 264, 264, 0, 0, 267, 261,
- 143, 266, 0, 0, 0, 0, 143, 268, 0, 0, 0, 0, 0, 261, 261, 269,
- 261, 261, 261, 261, 261, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, 0, 0,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 271,
- 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
- 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272,
- 272, 272, 272, 272, 272, 272, 272, 272, 273, 272, 272, 272, 274, 275, 275, 275,
- 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
- 276, 276, 277, 45, 14, 14, 14, 14, 14, 14, 278, 278, 278, 278, 278, 279,
- 0, 0, 280, 4, 4, 4, 4, 4, 281, 4, 4, 4, 282, 45, 45, 283,
- 284, 284, 285, 286, 287, 287, 287, 288, 289, 289, 289, 289, 290, 291, 50, 50,
- 292, 292, 293, 294, 294, 295, 143, 296, 297, 297, 297, 297, 298, 299, 139, 300,
- 301, 301, 301, 302, 303, 304, 139, 139, 305, 305, 305, 305, 306, 307, 308, 309,
- 310, 311, 247, 4, 4, 312, 313, 153, 153, 153, 153, 153, 308, 308, 314, 315,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
- 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 316, 143, 317, 143, 143, 318,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 319, 249, 249, 249, 249, 249, 249, 320, 45, 45,
- 321, 322, 21, 323, 324, 27, 27, 27, 27, 27, 27, 27, 325, 48, 27, 27,
+ 239, 239, 239, 239, 239, 239, 4, 4, 240, 240, 240, 240, 240, 240, 240, 241,
+ 139, 139, 140, 242, 242, 242, 243, 244, 143, 245, 246, 246, 246, 246, 14, 14,
+ 0, 0, 0, 0, 0, 247, 125, 125, 248, 249, 248, 248, 248, 248, 248, 250,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 251, 125, 252,
+ 253, 0, 254, 255, 256, 257, 257, 257, 257, 258, 259, 260, 260, 260, 260, 261,
+ 262, 263, 263, 264, 142, 142, 142, 142, 265, 0, 263, 263, 0, 0, 266, 260,
+ 142, 265, 0, 0, 0, 0, 142, 267, 0, 0, 0, 0, 0, 260, 260, 268,
+ 260, 260, 260, 260, 260, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 0, 0, 0, 0,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
+ 270, 270, 270, 270, 270, 270, 270, 270, 271, 270, 270, 270, 272, 273, 273, 273,
+ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+ 274, 274, 275, 125, 14, 14, 14, 14, 14, 14, 276, 276, 276, 276, 276, 277,
+ 0, 0, 278, 4, 4, 4, 4, 4, 279, 4, 4, 4, 280, 281, 125, 282,
+ 283, 283, 284, 285, 286, 286, 286, 287, 288, 288, 288, 288, 289, 290, 48, 48,
+ 291, 291, 292, 293, 293, 294, 142, 295, 296, 296, 296, 296, 297, 298, 138, 299,
+ 300, 300, 300, 301, 302, 303, 138, 138, 304, 304, 304, 304, 305, 306, 307, 308,
+ 309, 310, 246, 4, 4, 311, 312, 152, 152, 152, 152, 152, 307, 307, 313, 314,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 315, 142, 316, 142, 142, 317,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 318, 248, 248, 248, 248, 248, 248, 319, 125, 125,
+ 320, 321, 21, 322, 323, 27, 27, 27, 27, 27, 27, 27, 324, 325, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 326, 45, 27, 27, 27, 27, 327, 27, 27, 47, 45, 45, 328,
- 8, 286, 329, 0, 0, 330, 331, 46, 27, 27, 27, 27, 27, 27, 27, 332,
- 333, 0, 1, 2, 1, 2, 334, 260, 261, 335, 143, 266, 336, 337, 338, 339,
- 340, 341, 342, 343, 344, 344, 45, 45, 341, 341, 341, 341, 341, 341, 341, 345,
- 346, 0, 0, 347, 11, 11, 11, 11, 348, 349, 350, 45, 45, 0, 0, 351,
- 45, 45, 45, 45, 45, 45, 45, 45, 352, 353, 354, 354, 354, 355, 356, 253,
- 357, 357, 358, 359, 360, 361, 361, 362, 363, 364, 365, 365, 366, 367, 45, 45,
- 368, 368, 368, 368, 368, 369, 369, 369, 370, 371, 372, 373, 373, 374, 373, 375,
- 376, 376, 377, 378, 378, 378, 379, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380,
- 380, 380, 380, 381, 380, 382, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 384, 385, 385, 386, 387, 388, 389, 389, 390, 391, 392, 45, 45, 45, 393, 394,
- 395, 396, 397, 398, 45, 45, 45, 45, 399, 399, 400, 401, 400, 402, 400, 400,
- 403, 404, 405, 406, 407, 407, 408, 408, 409, 409, 45, 45, 410, 410, 411, 412,
- 413, 413, 413, 414, 415, 416, 417, 418, 419, 420, 421, 45, 45, 45, 45, 45,
- 422, 422, 422, 422, 423, 45, 45, 45, 424, 424, 424, 425, 424, 424, 424, 426,
- 427, 427, 428, 429, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 27, 430, 431, 431, 432, 433, 45, 45, 45, 45,
- 434, 434, 435, 436, 436, 437, 45, 45, 45, 45, 45, 438, 439, 45, 440, 441,
- 442, 442, 442, 442, 443, 444, 442, 445, 446, 446, 446, 446, 447, 448, 449, 450,
- 451, 451, 451, 452, 453, 454, 454, 455, 456, 456, 456, 456, 456, 456, 457, 458,
- 459, 460, 459, 461, 45, 45, 45, 45, 462, 463, 464, 465, 465, 465, 466, 467,
- 468, 469, 470, 471, 472, 473, 474, 475, 45, 45, 45, 45, 45, 45, 45, 45,
- 476, 476, 476, 476, 476, 477, 478, 45, 479, 479, 479, 479, 480, 481, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 482, 482, 482, 483, 482, 484, 45, 45,
- 485, 485, 485, 485, 486, 487, 488, 45, 489, 489, 489, 490, 491, 45, 45, 45,
- 492, 493, 494, 492, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 495, 495, 495, 496, 45, 45, 45, 45, 45, 45, 497, 497, 497, 497, 497, 498,
- 499, 500, 501, 502, 503, 504, 45, 45, 45, 45, 505, 506, 506, 505, 507, 45,
- 508, 508, 508, 508, 509, 510, 510, 510, 510, 510, 511, 45, 512, 512, 512, 513,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 514, 515, 515, 516, 517, 515, 518, 519, 519, 520, 521, 522, 45, 45, 45, 45,
- 523, 524, 524, 525, 526, 527, 528, 529, 530, 531, 532, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 533, 534,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 535, 536, 536, 536, 537,
- 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538,
- 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538,
- 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538,
- 538, 538, 538, 538, 538, 538, 538, 538, 538, 539, 45, 45, 45, 45, 45, 45,
- 538, 538, 538, 538, 538, 538, 540, 541, 538, 538, 538, 538, 538, 538, 538, 538,
- 538, 538, 538, 538, 542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
- 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
- 543, 543, 544, 545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 27, 27, 27, 326, 27, 27, 27, 27, 27, 327, 27, 27, 328, 125, 125, 27,
+ 8, 285, 329, 0, 0, 330, 331, 332, 27, 27, 27, 27, 27, 27, 27, 333,
+ 334, 0, 1, 2, 1, 2, 335, 259, 260, 336, 142, 265, 337, 338, 339, 340,
+ 341, 342, 343, 344, 345, 345, 125, 125, 342, 342, 342, 342, 342, 342, 342, 346,
+ 347, 0, 0, 348, 11, 11, 11, 11, 349, 350, 351, 125, 125, 0, 0, 352,
+ 125, 125, 125, 125, 125, 125, 125, 125, 353, 354, 355, 355, 355, 356, 357, 252,
+ 358, 358, 359, 360, 361, 362, 362, 363, 364, 365, 366, 366, 367, 368, 125, 125,
+ 369, 369, 369, 369, 369, 370, 370, 370, 371, 372, 373, 374, 374, 375, 374, 376,
+ 377, 377, 378, 379, 379, 379, 380, 381, 381, 382, 383, 384, 125, 125, 125, 125,
+ 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385,
+ 385, 385, 385, 386, 385, 387, 388, 125, 389, 4, 4, 390, 125, 125, 125, 125,
+ 391, 392, 392, 393, 394, 395, 396, 396, 397, 398, 399, 125, 125, 125, 400, 401,
+ 402, 403, 404, 405, 125, 125, 125, 125, 406, 406, 407, 408, 407, 409, 407, 407,
+ 410, 411, 412, 413, 414, 414, 415, 415, 416, 416, 125, 125, 417, 417, 418, 419,
+ 420, 420, 420, 421, 422, 423, 424, 425, 426, 427, 428, 125, 125, 125, 125, 125,
+ 429, 429, 429, 429, 430, 125, 125, 125, 431, 431, 431, 432, 431, 431, 431, 433,
+ 434, 434, 435, 436, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 27, 45, 437, 437, 438, 439, 125, 125, 125, 125,
+ 440, 440, 441, 442, 442, 443, 125, 444, 445, 125, 125, 446, 447, 125, 448, 449,
+ 450, 450, 450, 450, 451, 452, 450, 453, 454, 454, 454, 454, 455, 456, 457, 458,
+ 459, 459, 459, 460, 461, 462, 462, 463, 464, 464, 464, 464, 464, 464, 465, 466,
+ 467, 468, 467, 469, 125, 125, 125, 125, 470, 471, 472, 473, 473, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 125, 125, 125, 125, 125, 125, 125, 125,
+ 484, 484, 484, 484, 484, 485, 486, 125, 487, 487, 487, 487, 488, 489, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 490, 490, 490, 491, 490, 492, 125, 125,
+ 493, 493, 493, 493, 494, 495, 496, 125, 497, 497, 497, 498, 498, 125, 125, 125,
+ 499, 500, 501, 499, 502, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 503, 503, 503, 504, 125, 125, 125, 125, 125, 125, 505, 505, 505, 505, 505, 506,
+ 507, 508, 509, 510, 511, 512, 125, 125, 125, 125, 513, 514, 514, 513, 515, 125,
+ 516, 516, 516, 516, 517, 518, 518, 518, 518, 518, 519, 154, 520, 520, 520, 521,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 522, 523, 523, 524, 525, 523, 526, 527, 527, 528, 529, 530, 125, 125, 125, 125,
+ 531, 532, 532, 533, 534, 535, 536, 537, 538, 539, 540, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 541, 542,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 543, 544, 544, 544, 545,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
- 546, 546, 546, 546, 547, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 548, 549, 550, 551, 45, 45, 45, 45, 45, 45, 552, 553, 554,
- 555, 555, 555, 555, 556, 557, 558, 559, 555, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 560, 560, 560, 560, 560, 561, 45, 45, 45, 45, 45, 45,
- 562, 562, 562, 562, 563, 562, 562, 562, 564, 562, 45, 45, 45, 45, 565, 566,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 568,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
- 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569,
- 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 570, 45, 45,
- 571, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 572, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258,
- 258, 573, 45, 45, 45, 574, 575, 576, 576, 576, 576, 576, 576, 576, 576, 576,
- 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 577,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 578, 578, 578, 578, 578, 578, 579, 580, 581, 582, 267, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583,
- 0, 0, 584, 0, 0, 0, 585, 586, 587, 0, 588, 0, 0, 0, 589, 45,
- 11, 11, 11, 11, 590, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 267,
- 0, 0, 0, 0, 0, 234, 0, 589, 45, 45, 45, 45, 45, 45, 45, 45,
- 0, 0, 0, 0, 0, 226, 0, 0, 0, 591, 592, 593, 594, 0, 0, 0,
- 595, 596, 0, 597, 598, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0,
- 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
- 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
- 602, 602, 602, 602, 602, 602, 602, 602, 603, 604, 605, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 606, 607, 608, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 609, 609, 610, 611, 612, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 613, 613, 613, 614,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 616, 617, 45, 45,
- 618, 618, 618, 618, 619, 620, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 333, 0, 0, 0, 621, 45, 45, 45, 45,
- 333, 0, 0, 622, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 623, 27, 624, 625, 626, 627, 628, 629, 630, 631, 632, 631, 45, 45, 45, 325,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 0, 0, 253, 0, 0, 0, 0, 0, 0, 267, 228, 333, 333, 333, 0, 583,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 45, 45, 45, 633, 0,
- 634, 0, 0, 253, 589, 635, 583, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 349, 349,
- 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 589, 253, 45,
- 253, 0, 0, 0, 636, 286, 0, 0, 636, 0, 622, 635, 45, 45, 45, 45,
- 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0,
- 0, 0, 0, 0, 0, 267, 622, 639, 234, 0, 589, 234, 248, 234, 45, 45,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 235, 45, 45, 286,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 319, 45, 45,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 640, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 319, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 566, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 641, 45,
- 249, 319, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 642, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 643, 45, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45,
+ 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546,
+ 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, 125, 125, 125, 125, 125, 125,
+ 546, 546, 546, 546, 546, 546, 548, 549, 546, 546, 546, 546, 546, 546, 546, 546,
+ 546, 546, 546, 546, 550, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 551, 551, 551, 551, 551, 551, 552,
+ 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553,
+ 553, 553, 554, 555, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,
+ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,
+ 556, 556, 556, 556, 557, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 558, 559, 560, 561, 562, 562, 562, 562, 563, 564, 565, 566, 567,
+ 568, 568, 568, 568, 569, 570, 571, 572, 568, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 573, 573, 573, 573, 573, 574, 125, 125, 125, 125, 125, 125,
+ 575, 575, 575, 575, 576, 575, 575, 575, 577, 575, 125, 125, 125, 125, 578, 579,
+ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,
+ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,
+ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,
+ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 581,
+ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,
+ 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582,
+ 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 583, 125, 125,
+ 584, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 585,
+ 586, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
+ 257, 257, 587, 125, 125, 588, 589, 590, 590, 590, 590, 590, 590, 590, 590, 590,
+ 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 591,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 592, 592, 592, 592, 592, 592, 593, 594, 595, 596, 266, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 8, 8, 597, 8, 598, 0, 0, 0, 0, 0, 0, 0, 266, 125, 125, 125,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599,
+ 0, 0, 600, 0, 0, 0, 601, 602, 603, 0, 604, 0, 0, 0, 235, 125,
+ 11, 11, 11, 11, 605, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 266,
+ 0, 0, 0, 0, 0, 234, 0, 606, 125, 125, 125, 125, 125, 125, 125, 125,
+ 0, 0, 0, 0, 0, 224, 0, 0, 0, 607, 608, 609, 610, 0, 0, 0,
+ 611, 612, 0, 613, 614, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0,
+ 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618,
+ 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618,
+ 618, 618, 618, 618, 618, 618, 618, 618, 619, 620, 621, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 4, 622, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 623, 624, 625, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 626, 626, 627, 628, 629, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 630, 631, 125, 632, 632, 632, 633,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 634, 635,
+ 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 637, 638, 125, 125,
+ 639, 639, 639, 639, 640, 641, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 334, 0, 0, 0, 642, 125, 125, 125, 125,
+ 334, 0, 0, 247, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 643, 27, 644, 645, 646, 647, 648, 649, 650, 651, 652, 651, 125, 125, 125, 653,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 0, 0, 252, 0, 0, 0, 0, 0, 0, 266, 226, 334, 334, 334, 0, 599,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 125, 125, 125, 654, 0,
+ 655, 0, 0, 252, 606, 656, 599, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 350, 350,
+ 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 606, 252, 228,
+ 252, 0, 0, 0, 658, 285, 0, 0, 658, 0, 247, 656, 125, 125, 125, 125,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 266, 247, 659, 234, 0, 350, 235, 599, 285, 658, 234,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 235, 125, 125, 285,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 125, 125,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 660, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 318, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 579, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 661, 125,
+ 248, 318, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
+ 248, 248, 248, 248, 662, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
+ 663, 125, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -3836,7 +3894,7 @@ _hb_ucd_gc (unsigned u)
static inline uint_fast8_t
_hb_ucd_ccc (unsigned u)
{
- return u<125259u?_hb_ucd_u8[15060+(((_hb_ucd_u8[13636+(((_hb_ucd_u8[12656+(u>>3>>4)])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:0;
+ return u<125259u?_hb_ucd_u8[15332+(((_hb_ucd_u8[13892+(((_hb_ucd_u8[12912+(u>>3>>4)])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:0;
}
static inline unsigned
_hb_ucd_b4 (const uint8_t* a, unsigned i)
@@ -3846,59 +3904,59 @@ _hb_ucd_b4 (const uint8_t* a, unsigned i)
static inline int_fast16_t
_hb_ucd_bmg (unsigned u)
{
- return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[16372+(((_hb_ucd_b4(16244+_hb_ucd_u8,u>>2>>6))<<6)+((u>>2)&63u))])<<2)+((u)&3u)]:0;
+ return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[16692+(((_hb_ucd_b4(16564+_hb_ucd_u8,u>>2>>6))<<6)+((u>>2)&63u))])<<2)+((u)&3u)]:0;
}
static inline uint_fast8_t
_hb_ucd_sc (unsigned u)
{
- return u<918000u?_hb_ucd_u8[19126+(((_hb_ucd_u16[3040+(((_hb_ucd_u8[17332+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:2;
+ return u<918000u?_hb_ucd_u8[19446+(((_hb_ucd_u16[3168+(((_hb_ucd_u8[17652+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:2;
}
static inline uint_fast16_t
_hb_ucd_dm (unsigned u)
{
- return u<195102u?_hb_ucd_u16[6144+(((_hb_ucd_u8[29430+(u>>6)])<<6)+((u)&63u))]:0;
+ return u<195102u?_hb_ucd_u16[6400+(((_hb_ucd_u8[30070+(u>>6)])<<6)+((u)&63u))]:0;
}
#elif !defined(HB_NO_UCD_UNASSIGNED)
static const uint8_t
-_hb_ucd_u8[17508] =
+_hb_ucd_u8[17936] =
{
0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 14, 14, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 21, 23, 21, 21, 21, 21, 24, 7, 7,
- 25, 26, 21, 21, 21, 21, 27, 28, 21, 21, 29, 30, 31, 32, 33, 34,
+ 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 11, 12, 13, 13, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 22, 22, 22, 22, 24, 7, 7,
+ 25, 26, 22, 22, 22, 27, 28, 29, 22, 30, 31, 32, 33, 34, 35, 36,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 21, 40,
- 7, 7, 41, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 42, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 43,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 44,
+ 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 22, 42,
+ 7, 7, 43, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 44, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 45,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 46,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 34, 35, 36, 37, 38, 39, 34, 34, 34, 40, 41, 42, 43,
@@ -3908,42 +3966,44 @@ _hb_ucd_u8[17508] =
84, 85, 86, 87, 88, 89, 69, 69, 34, 34, 34, 34, 34, 34, 34, 34,
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 90, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 91,
- 92, 34, 34, 34, 34, 34, 34, 34, 34, 93, 34, 34, 94, 95, 96, 97,
- 98, 99,100,101,102,103,104,105, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,106,
+ 91, 34, 34, 34, 34, 34, 34, 34, 34, 92, 34, 34, 93, 94, 95, 96,
+ 97, 98, 99,100,101,102,103,104, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,105,
+ 106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
- 108,108, 34, 34,109,110,111,112, 34, 34,113,114,115,116,117,118,
- 119,120,121,122,123,124,125,126,127,128,129,123, 34, 34,130,123,
- 131,132,133,134,135,136,137,138,139,140,141,123,142,143,144,145,
- 146,147,148,149,150,151,152,123,153,154,123,155,156,157,158,123,
- 159,160,161,162,163,164,123,123,165,166,167,168,123,169,123,170,
- 34, 34, 34, 34, 34, 34, 34,171,172, 34,173,123,123,123,123,123,
- 123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
- 34, 34, 34, 34, 34, 34, 34, 34,174,123,123,123,123,123,123,123,
- 123,123,123,123,123,123,123,123, 34, 34, 34, 34,175,123,123,123,
- 34, 34, 34, 34,176,177,178,179,123,123,123,123,180,181,182,183,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,184,
- 34, 34, 34, 34, 34, 34, 34, 34, 34,185,186,123,123,123,123,123,
- 34, 34,187, 34, 34,188,123,123,123,123,123,123,123,123,123,123,
- 123,123,123,123,123,123,123,123,189,190,123,123,123,123,123,123,
- 69,191,192,193,194,195,196,123,197,198,199,200,201,202,203,204,
- 69, 69, 69, 69,205,206,123,123,123,123,123,123,123,123,123,123,
- 207,123,208,123,123,209,123,123,123,123,123,123,123,123,123,123,
- 34,210,211,123,123,123,123,123,212,213,214,123,215,216,123,123,
- 217,218,219,220,221,123, 69,222, 69, 69, 69, 69, 69,223,224,225,
- 226,227,228,229,230,231, 69,232,123,123,123,123,123,123,123,123,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,233, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,234, 34,
- 235, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,236, 34, 34,
- 34, 34, 34, 34, 34, 34, 34,237,123,123,123,123,123,123,123,123,
- 34, 34, 34, 34,238,123,123,123,123,123,123,123,123,123,123,123,
- 34, 34, 34, 34, 34, 34,239,123,123,123,123,123,123,123,123,123,
- 240,123,241,242,123,123,123,123,123,123,123,123,123,123,123,123,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,243,
- 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,244,
+ 107,107, 34, 34,108,109,110,111, 34, 34,112,113,114,115,116,117,
+ 118,119,120,121,122,123,124,125,126,127,128,129, 34, 34,130,131,
+ 132,133,134,135,136,137,138,139,140,141,142,122,143,144,145,146,
+ 147,148,149,150,151,152,153,122,154,155,122,156,157,158,159,122,
+ 160,161,162,163,164,165,122,122,166,167,168,169,122,170,122,171,
+ 34, 34, 34, 34, 34, 34, 34,172,173, 34,174,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,175,
+ 34, 34, 34, 34, 34, 34, 34, 34,176,122,122,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122, 34, 34, 34, 34,177,122,122,122,
+ 34, 34, 34, 34,178,179,180,181,122,122,122,122,182,183,184,185,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,186,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34,187,188,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,189,
+ 34, 34,190, 34, 34,191,122,122,122,122,122,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122,192,193,122,122,122,122,122,122,
+ 122,122,122,122,122,122,122,122,122,122,122,122,122,122,194,195,
+ 69,196,197,198,199,200,201,122,202,203,204,205,206,207,208,209,
+ 69, 69, 69, 69,210,211,122,122,122,122,122,122,122,122,212,122,
+ 213,122,214,122,122,215,122,122,122,122,122,122,122,122,122,216,
+ 34,217,218,122,122,122,122,122,219,220,221,122,222,223,122,122,
+ 224,225,226,227,228,122, 69,229, 69, 69, 69, 69, 69,230,231,232,
+ 233,234, 69, 69,235,236, 69,237,122,122,122,122,122,122,122,122,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,238, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,239, 34,
+ 240, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,241, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34,242,122,122,122,122,122,122,122,122,
+ 34, 34, 34, 34,243,122,122,122,122,122,122,122,122,122,122,122,
+ 34, 34, 34, 34, 34, 34,244,122,122,122,122,122,122,122,122,122,
+ 245,122,246,247,122,122,122,122,122,122,122,122,122,122,122,122,
+ 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,248,
+ 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,249,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2,
7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16,
@@ -3980,298 +4040,306 @@ _hb_ucd_u8[17508] =
43, 43, 40, 21, 2, 81, 57, 20, 36, 36, 36, 43, 43, 75, 43, 43,
43, 43, 75, 43, 75, 43, 43, 44, 2, 2, 2, 2, 2, 2, 2, 64,
36, 36, 36, 36, 70, 43, 44, 64, 36, 36, 36, 36, 36, 61, 44, 44,
- 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 44, 44, 44, 44, 44, 57, 43, 43, 43, 43, 43, 43,
- 43, 82, 43, 43, 43, 43, 43, 43, 43, 83, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 83, 71, 84, 85, 43, 43, 43, 83, 84, 85, 84,
- 70, 43, 43, 43, 36, 36, 36, 36, 36, 43, 2, 7, 7, 7, 7, 7,
- 86, 36, 36, 36, 36, 36, 36, 36, 70, 84, 62, 36, 36, 36, 61, 62,
- 61, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36, 36, 36,
- 61, 61, 44, 36, 36, 44, 71, 84, 85, 43, 80, 87, 88, 87, 85, 61,
- 44, 44, 44, 87, 44, 44, 36, 62, 36, 43, 44, 7, 7, 7, 7, 7,
- 36, 20, 27, 27, 27, 56, 63, 80, 57, 83, 62, 36, 36, 61, 44, 62,
- 61, 36, 62, 61, 36, 44, 80, 84, 85, 80, 44, 57, 80, 57, 43, 44,
- 57, 44, 44, 44, 62, 36, 61, 61, 44, 44, 44, 7, 7, 7, 7, 7,
- 43, 36, 70, 64, 44, 44, 44, 44, 57, 83, 62, 36, 36, 36, 36, 62,
- 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62, 36, 36, 44, 71, 84,
- 85, 43, 43, 57, 83, 87, 85, 44, 61, 44, 44, 44, 44, 44, 44, 44,
- 66, 44, 44, 44, 62, 43, 43, 43, 57, 84, 62, 36, 36, 36, 61, 62,
- 61, 36, 62, 36, 36, 44, 71, 85, 85, 43, 80, 87, 88, 87, 85, 44,
- 44, 44, 57, 83, 44, 44, 36, 62, 78, 27, 27, 27, 44, 44, 44, 44,
- 44, 71, 62, 36, 36, 61, 44, 36, 61, 36, 36, 44, 62, 61, 61, 36,
- 44, 62, 61, 44, 36, 61, 44, 36, 36, 36, 36, 36, 36, 44, 44, 84,
- 83, 88, 44, 84, 88, 84, 85, 44, 61, 44, 44, 87, 44, 44, 44, 44,
- 27, 89, 67, 67, 56, 90, 44, 44, 83, 84, 71, 36, 36, 36, 61, 36,
- 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 62, 43,
- 83, 84, 88, 43, 80, 43, 43, 44, 44, 44, 57, 80, 36, 61, 44, 44,
- 44, 44, 44, 91, 27, 27, 27, 89, 70, 84, 72, 36, 36, 36, 61, 36,
- 36, 36, 62, 36, 36, 44, 71, 85, 84, 84, 88, 83, 88, 84, 43, 44,
- 44, 44, 87, 88, 44, 44, 44, 61, 62, 61, 44, 44, 44, 44, 44, 44,
- 43, 84, 36, 36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 70, 71, 84,
- 85, 43, 80, 84, 88, 84, 85, 77, 44, 44, 36, 92, 27, 27, 27, 93,
- 27, 27, 27, 27, 89, 36, 36, 36, 57, 84, 62, 36, 36, 36, 36, 36,
- 36, 36, 36, 61, 44, 36, 36, 36, 36, 62, 36, 36, 36, 36, 62, 44,
- 36, 36, 36, 61, 44, 80, 44, 87, 84, 43, 80, 80, 84, 84, 84, 84,
- 44, 84, 64, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36, 36,
- 70, 36, 43, 43, 43, 80, 44, 94, 36, 36, 36, 75, 43, 43, 43, 60,
- 7, 7, 7, 7, 7, 2, 44, 44, 62, 61, 61, 36, 36, 61, 36, 36,
+ 36, 36, 36, 36, 82, 36, 36, 61, 65, 44, 44, 44, 43, 43, 43, 43,
+ 36, 36, 36, 36, 83, 43, 43, 43, 43, 84, 43, 43, 43, 43, 43, 43,
+ 43, 85, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 85, 71, 86,
+ 87, 43, 43, 43, 85, 86, 87, 86, 70, 43, 43, 43, 36, 36, 36, 36,
+ 36, 43, 2, 7, 7, 7, 7, 7, 88, 36, 36, 36, 36, 36, 36, 36,
+ 70, 86, 62, 36, 36, 36, 61, 62, 61, 62, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 61, 36, 36, 36, 61, 61, 44, 36, 36, 44, 71, 86,
+ 87, 43, 80, 89, 90, 89, 87, 61, 44, 44, 44, 89, 44, 44, 36, 62,
+ 36, 43, 44, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 56, 63, 80,
+ 57, 85, 62, 36, 36, 61, 44, 62, 61, 36, 62, 61, 36, 44, 80, 86,
+ 87, 80, 44, 57, 80, 57, 43, 44, 57, 44, 44, 44, 62, 36, 61, 61,
+ 44, 44, 44, 7, 7, 7, 7, 7, 43, 36, 70, 64, 44, 44, 44, 44,
+ 57, 85, 62, 36, 36, 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36,
+ 61, 36, 62, 36, 36, 44, 71, 86, 87, 43, 43, 57, 85, 89, 87, 44,
+ 61, 44, 44, 44, 44, 44, 44, 44, 66, 44, 44, 44, 62, 43, 43, 43,
+ 57, 86, 62, 36, 36, 36, 61, 62, 61, 36, 62, 36, 36, 44, 71, 87,
+ 87, 43, 80, 89, 90, 89, 87, 44, 44, 44, 57, 85, 44, 44, 36, 62,
+ 78, 27, 27, 27, 44, 44, 44, 44, 44, 71, 62, 36, 36, 61, 44, 36,
+ 61, 36, 36, 44, 62, 61, 61, 36, 44, 62, 61, 44, 36, 61, 44, 36,
+ 36, 36, 36, 36, 36, 44, 44, 86, 85, 90, 44, 86, 90, 86, 87, 44,
+ 61, 44, 44, 89, 44, 44, 44, 44, 27, 91, 67, 67, 56, 92, 44, 44,
+ 85, 86, 71, 36, 36, 36, 61, 36, 61, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 44, 71, 43, 85, 86, 90, 43, 80, 43, 43, 44,
+ 44, 44, 57, 80, 36, 61, 62, 44, 44, 44, 44, 93, 27, 27, 27, 91,
+ 70, 86, 72, 36, 36, 36, 61, 36, 36, 36, 62, 36, 36, 44, 71, 87,
+ 86, 86, 90, 85, 90, 86, 43, 44, 44, 44, 89, 90, 44, 44, 62, 61,
+ 62, 61, 44, 44, 44, 44, 44, 44, 43, 86, 36, 36, 36, 36, 61, 36,
+ 36, 36, 36, 36, 36, 70, 71, 86, 87, 43, 80, 86, 90, 86, 87, 77,
+ 44, 44, 36, 94, 27, 27, 27, 95, 27, 27, 27, 27, 91, 36, 36, 36,
+ 57, 86, 62, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 36, 36, 36,
+ 36, 62, 36, 36, 36, 36, 62, 44, 36, 36, 36, 61, 44, 80, 44, 89,
+ 86, 43, 80, 80, 86, 86, 86, 86, 44, 86, 64, 44, 44, 44, 44, 44,
+ 62, 36, 36, 36, 36, 36, 36, 36, 70, 36, 43, 43, 43, 80, 44, 96,
+ 36, 36, 36, 75, 43, 43, 43, 60, 7, 7, 7, 7, 7, 2, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44, 62, 61, 61, 36, 36, 61, 36, 36,
36, 36, 62, 62, 36, 36, 36, 36, 70, 36, 43, 43, 43, 43, 71, 44,
36, 36, 61, 81, 43, 43, 43, 44, 7, 7, 7, 7, 7, 44, 36, 36,
- 77, 67, 2, 2, 2, 2, 2, 2, 2, 95, 95, 67, 43, 67, 67, 67,
- 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 50, 50, 50, 4, 4, 84,
+ 77, 67, 2, 2, 2, 2, 2, 2, 2, 97, 97, 67, 43, 67, 67, 67,
+ 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 50, 50, 50, 4, 4, 86,
36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44,
- 57, 43, 43, 43, 43, 43, 43, 83, 43, 43, 60, 43, 36, 36, 70, 43,
+ 57, 43, 43, 43, 43, 43, 43, 85, 43, 43, 60, 43, 36, 36, 70, 43,
43, 43, 43, 43, 57, 43, 43, 43, 43, 43, 43, 43, 43, 43, 80, 67,
- 67, 67, 67, 76, 67, 67, 90, 67, 2, 2, 95, 67, 21, 64, 44, 44,
- 36, 36, 36, 36, 36, 92, 85, 43, 83, 43, 43, 43, 85, 83, 85, 71,
- 7, 7, 7, 7, 7, 2, 2, 2, 36, 36, 36, 84, 43, 36, 36, 43,
- 71, 84, 96, 92, 84, 84, 84, 36, 70, 43, 71, 36, 36, 36, 36, 36,
- 36, 83, 85, 83, 84, 84, 85, 92, 7, 7, 7, 7, 7, 84, 85, 67,
+ 67, 67, 67, 76, 67, 67, 92, 67, 2, 2, 97, 67, 21, 64, 44, 44,
+ 36, 36, 36, 36, 36, 94, 87, 43, 85, 43, 43, 43, 87, 85, 87, 71,
+ 7, 7, 7, 7, 7, 2, 2, 2, 36, 36, 36, 86, 43, 36, 36, 43,
+ 71, 86, 98, 94, 86, 86, 86, 36, 70, 43, 71, 36, 36, 36, 36, 36,
+ 36, 85, 87, 85, 86, 86, 87, 94, 7, 7, 7, 7, 7, 86, 87, 67,
11, 11, 11, 48, 44, 44, 48, 44, 16, 16, 16, 16, 16, 53, 45, 16,
36, 36, 36, 36, 61, 36, 36, 44, 36, 36, 36, 61, 61, 36, 36, 44,
61, 36, 36, 44, 36, 36, 36, 61, 61, 36, 36, 44, 36, 36, 36, 36,
36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 57, 43,
- 2, 2, 2, 2, 97, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44,
+ 2, 2, 2, 2, 99, 27, 27, 27, 27, 27, 27, 27, 27, 27,100, 44,
67, 67, 67, 67, 67, 44, 44, 44, 11, 11, 11, 44, 16, 16, 16, 44,
- 99, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 72,
- 100, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,101,102, 44,
- 36, 36, 36, 36, 36, 63, 2,103,104, 36, 36, 36, 61, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 61, 36, 36, 43, 80, 44, 44, 44, 44, 44,
- 36, 43, 60, 64, 44, 44, 44, 44, 36, 43, 44, 44, 44, 44, 44, 44,
- 61, 43, 44, 44, 44, 44, 44, 44, 36, 36, 43, 85, 43, 43, 43, 84,
- 84, 84, 84, 83, 85, 43, 43, 43, 43, 43, 2, 86, 2, 66, 70, 44,
+ 101, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 72,
+ 102, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,103,104, 44,
+ 36, 36, 36, 36, 36, 63, 2,105,106, 36, 36, 36, 61, 44, 44, 44,
+ 36, 43, 85, 44, 44, 44, 44, 62, 36, 43,107, 64, 44, 44, 44, 44,
+ 36, 43, 44, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 61, 36,
+ 61, 43, 44, 44, 44, 44, 44, 44, 36, 36, 43, 87, 43, 43, 43, 86,
+ 86, 86, 86, 85, 87, 43, 43, 43, 43, 43, 2, 88, 2, 66, 70, 44,
7, 7, 7, 7, 7, 44, 44, 44, 27, 27, 27, 27, 27, 44, 44, 44,
- 2, 2, 2,105, 2, 59, 43, 68, 36,106, 36, 36, 36, 36, 36, 36,
+ 2, 2, 2,108, 2, 59, 43, 84, 36, 83, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 61, 44, 44, 44, 36, 36, 70, 71, 36, 36, 36, 36,
36, 36, 36, 36, 70, 61, 44, 44, 36, 36, 36, 44, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 61, 43, 83, 84, 85, 83, 84, 44, 44,
- 84, 83, 84, 84, 85, 43, 44, 44, 90, 44, 2, 7, 7, 7, 7, 7,
+ 36, 36, 36, 36, 36, 36, 36, 61, 43, 85, 86, 87, 85, 86, 44, 44,
+ 86, 85, 86, 86, 87, 43, 44, 44, 92, 44, 2, 7, 7, 7, 7, 7,
36, 36, 36, 36, 36, 36, 36, 44, 36, 36, 61, 44, 44, 44, 44, 44,
36, 36, 36, 36, 36, 36, 44, 44, 36, 36, 36, 36, 36, 44, 44, 44,
- 7, 7, 7, 7, 7, 98, 44, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 36, 36, 36, 70, 83, 85, 44, 2, 36, 36, 92, 83, 43, 43, 43, 80,
- 83, 83, 85, 43, 43, 43, 83, 84, 84, 85, 43, 43, 43, 43, 80, 57,
- 2, 2, 2, 86, 2, 2, 2, 44, 43, 43, 43, 43, 43, 43, 43,107,
- 80, 44, 44, 44, 44, 44, 44, 44, 43, 43, 96, 36, 36, 36, 36, 36,
- 36, 36, 83, 43, 43, 83, 83, 84, 84, 83, 96, 36, 36, 36, 44, 44,
- 95, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 90, 44,
- 43, 96, 36, 36, 36, 36, 36, 36, 92, 43, 43, 84, 43, 85, 43, 36,
- 36, 36, 36, 83, 43, 84, 85, 85, 43, 84, 44, 44, 44, 44, 2, 2,
- 36, 36, 84, 84, 84, 84, 43, 43, 43, 43, 84, 43, 44, 91, 2, 2,
+ 7, 7, 7, 7, 7,100, 44, 67, 67, 67, 67, 67, 67, 67, 67, 67,
+ 36, 36, 36, 70, 85, 87, 44, 2, 36, 36, 94, 85, 43, 43, 43, 80,
+ 85, 85, 87, 43, 43, 43, 85, 86, 86, 87, 43, 43, 43, 43, 80, 57,
+ 2, 2, 2, 88, 2, 2, 2, 44, 43, 43, 43, 43, 43, 43, 43,109,
+ 43, 43, 43, 43, 43, 43, 43, 80, 43, 43, 98, 36, 36, 36, 36, 36,
+ 36, 36, 85, 43, 43, 85, 85, 86, 86, 85, 98, 36, 36, 36, 61, 44,
+ 97, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 21, 64,
+ 43, 98, 36, 36, 36, 36, 36, 36, 94, 43, 43, 86, 43, 87, 43, 36,
+ 36, 36, 36, 85, 43, 86, 87, 87, 43, 86, 44, 44, 44, 44, 2, 2,
+ 36, 36, 86, 86, 86, 86, 43, 43, 43, 43, 86, 43, 44, 93, 2, 2,
7, 7, 7, 7, 7, 44, 62, 36, 36, 36, 36, 36, 40, 40, 40, 2,
- 16, 16, 16, 16,108, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11,
+ 16, 16, 16, 16,110, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11,
2, 2, 2, 2, 44, 44, 44, 44, 43, 60, 43, 43, 43, 43, 43, 43,
- 83, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 92, 43, 61, 44, 44,
+ 85, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 94, 43, 61, 44, 44,
16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 45, 16, 16,
- 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16,109, 40, 40,
- 43, 43, 43, 43, 43, 57, 43, 43, 32, 32, 32, 16, 16, 16, 16, 32,
- 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 44, 11, 11, 11, 44,
- 16, 16, 16, 16, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 44,
- 16, 16, 16, 16,110,110,110,110, 16, 16,108, 16, 11, 11,111,112,
- 41, 16,108, 16, 11, 11,111, 41, 16, 16, 44, 16, 11, 11,113, 41,
- 16, 16, 16, 16, 11, 11,114, 41, 44, 16,108, 16, 11, 11,111,115,
- 116,116,116,116,116,117, 65, 65,118,118,118, 2,119,120,119,120,
- 2, 2, 2, 2,121, 65, 65,122, 2, 2, 2, 2,123,124, 2,125,
- 126, 2,127,128, 2, 2, 2, 2, 2, 9,126, 2, 2, 2, 2,129,
- 65, 65, 68, 65, 65, 65, 65, 65,130, 44, 27, 27, 27, 8,127,131,
- 27, 27, 27, 27, 27, 8,127,102, 40, 40, 40, 40, 40, 40, 81, 44,
- 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43,132, 51,
- 107, 51,107, 43, 43, 43, 43, 43, 67,133, 67,134, 67, 34, 11, 16,
- 11, 32,134, 67, 49, 11, 11, 67, 67, 67,133,133,133, 11, 11,135,
- 11, 11, 35, 36, 39, 67, 16, 11, 8, 8, 49, 16, 16, 26, 67,136,
- 27, 27, 27, 27, 27, 27, 27, 27,103,103,103,103,103,103,103,103,
- 103,137,138,103,139, 67, 44, 44, 8, 8,140, 67, 67, 8, 67, 67,
- 140, 26, 67,140, 67, 67, 67,140, 67, 67, 67, 67, 67, 67, 67, 8,
- 67,140,140, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 67, 67, 67, 67, 4, 4, 67, 67,
- 8, 67, 67, 67,141,142, 67, 67, 67, 67, 67, 67, 67, 67,140, 67,
- 67, 67, 67, 67, 67, 26, 8, 8, 8, 8, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 8, 8, 8, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 90, 44, 44, 44, 44, 67, 67, 67, 67, 67, 90, 44, 44,
- 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27,
- 67, 67, 67, 26, 67, 67, 67, 67, 26, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 8, 8, 8, 8, 67, 67, 67, 67, 67, 67, 67, 26,
- 67, 67, 67, 67, 4, 4, 4, 4, 4, 4, 4, 27, 27, 27, 27, 27,
- 27, 27, 67, 67, 67, 67, 67, 67, 8, 8,127,143, 8, 8, 8, 8,
- 8, 8, 8, 4, 4, 4, 4, 4, 8,127,144,144,144,144,144,144,
- 144,144,144,144,143, 8, 8, 8, 8, 8, 8, 8, 4, 4, 8, 8,
- 8, 8, 8, 8, 8, 8, 4, 8, 8, 8,140, 26, 8, 8,140, 67,
- 67, 67, 44, 67, 67, 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 67,
- 11, 11, 11, 11, 11, 11, 11, 47, 16, 16, 16, 16, 16, 16, 16,108,
- 32, 11, 32, 34, 34, 34, 34, 11, 32, 32, 34, 16, 16, 16, 40, 11,
- 32, 32,136, 67, 67,134, 34,145, 43, 32, 44, 44, 91, 2, 97, 2,
- 16, 16, 16,146, 44, 44,146, 44, 36, 36, 36, 36, 44, 44, 44, 52,
- 64, 44, 44, 44, 44, 44, 44, 57, 36, 36, 36, 61, 44, 44, 44, 44,
- 36, 36, 36, 61, 36, 36, 36, 61, 2,119,119, 2,123,124,119, 2,
- 2, 2, 2, 6, 2,105,119, 2,119, 4, 4, 4, 4, 2, 2, 86,
- 2, 2, 2, 2, 2,118, 2, 2,105,147, 2, 2, 2, 2, 2, 2,
- 67, 64, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 55, 67, 67,
- 67, 67, 44, 44, 44, 44, 44, 44, 67, 67, 67, 44, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 67, 44, 44, 1, 2,148,149, 4, 4, 4, 4,
- 4, 67, 4, 4, 4, 4,150,151,152,103,103,103,103, 43, 43, 84,
- 153, 40, 40, 67,103,154, 63, 67, 36, 36, 36, 61, 57,155,156, 69,
- 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36,
- 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90,
- 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27,
- 157, 27, 27, 27, 27, 27, 27, 27, 36, 36,106, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36,158, 2, 7, 7, 7, 7, 7, 36, 44, 44,
- 32, 32, 32, 32, 32, 32, 32, 70, 51,159, 43, 43, 43, 43, 43, 86,
- 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36,103,103,103,103,103,
- 43, 2, 2, 2, 44, 44, 44, 44, 41, 41, 41,156, 40, 40, 40, 40,
- 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32,
- 45, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,160, 34, 35,
- 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32,
- 11, 11, 32, 32, 32, 32, 32, 32, 44, 32, 11, 11, 34,108, 44, 44,
- 44, 44, 48, 35, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36,
- 36, 92, 85, 83, 67, 67, 80, 44, 27, 27, 27, 67,161, 44, 44, 44,
- 36, 36, 2, 2, 44, 44, 44, 44, 84, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 84, 84, 84, 84, 84, 84, 84, 84, 43, 44, 44, 44, 44, 2,
+ 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16,111, 40, 40,
+ 32, 32, 32, 16, 16, 16, 16, 32, 16, 16, 16, 16, 11, 11, 11, 11,
+ 16, 16, 16, 44, 11, 11, 11, 44, 16, 16, 16, 16, 48, 48, 48, 48,
+ 16, 16, 16, 16, 16, 16, 16, 44, 16, 16, 16, 16,112,112,112,112,
+ 16, 16,110, 16, 11, 11,113,114, 41, 16,110, 16, 11, 11,113, 41,
+ 16, 16, 44, 16, 11, 11,115, 41, 16, 16, 16, 16, 11, 11,116, 41,
+ 44, 16,110, 16, 11, 11,113,117,118,118,118,118,118,119, 65, 65,
+ 120,120,120, 2,121,122,121,122, 2, 2, 2, 2,123, 65, 65,124,
+ 2, 2, 2, 2,125,126, 2,127,128, 2,129,130, 2, 2, 2, 2,
+ 2, 9,128, 2, 2, 2, 2,131, 65, 65,132, 65, 65, 65, 65, 65,
+ 133, 44, 27, 27, 27, 8,129,134, 27, 27, 27, 27, 27, 8,129,104,
+ 40, 40, 40, 40, 40, 40, 81, 44, 20, 20, 20, 20, 20, 20, 20, 20,
+ 135, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 43,136, 51,
+ 109, 51,109, 43, 43, 43, 43, 43, 80, 44, 44, 44, 44, 44, 44, 44,
+ 67,137, 67,138, 67, 34, 11, 16, 11, 32,138, 67, 49, 11, 11, 67,
+ 67, 67,137,137,137, 11, 11,139, 11, 11, 35, 36, 39, 67, 16, 11,
+ 8, 8, 49, 16, 16, 26, 67,140, 27, 27, 27, 27, 27, 27, 27, 27,
+ 105,105,105,105,105,105,105,105,105,141,142,105,143, 67, 44, 44,
+ 8, 8,144, 67, 67, 8, 67, 67,144, 26, 67,144, 67, 67, 67,144,
+ 67, 67, 67, 67, 67, 67, 67, 8, 67,144,144, 67, 67, 67, 67, 67,
+ 67, 67, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 67, 67, 67, 67, 4, 4, 67, 67, 8, 67, 67, 67,145,146, 67, 67,
+ 67, 67, 67, 67, 67, 67,144, 67, 67, 67, 67, 67, 67, 26, 8, 8,
+ 8, 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8,
+ 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44,
+ 67, 67, 67, 67, 67, 92, 44, 44, 27, 27, 27, 27, 27, 27, 67, 67,
+ 67, 67, 67, 67, 67, 27, 27, 27, 67, 67, 67, 26, 67, 67, 67, 67,
+ 26, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8,
+ 67, 67, 67, 67, 67, 67, 67, 26, 67, 67, 67, 67, 4, 4, 4, 4,
+ 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67,
+ 8, 8,129,147, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4,
+ 8,129,148,148,148,148,148,148,148,148,148,148,147, 8, 8, 8,
+ 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8,
+ 8, 8,144, 26, 8, 8,144, 67, 67, 67, 44, 67, 67, 67, 67, 67,
+ 67, 67, 67, 55, 67, 67, 67, 67, 32, 11, 32, 34, 34, 34, 34, 11,
+ 32, 32, 34, 16, 16, 16, 40, 11, 32, 32,140, 67, 67,138, 34,149,
+ 43, 32, 44, 44, 93, 2, 99, 2, 16, 16, 16,150, 44, 44,150, 44,
+ 36, 36, 36, 36, 44, 44, 44, 52, 64, 44, 44, 44, 44, 44, 44, 57,
+ 36, 36, 36, 61, 44, 44, 44, 44, 36, 36, 36, 61, 36, 36, 36, 61,
+ 2,121,121, 2,125,126,121, 2, 2, 2, 2, 6, 2,108,121, 2,
+ 121, 4, 4, 4, 4, 2, 2, 88, 2, 2, 2, 2, 2,120, 2, 2,
+ 108,151, 2, 2, 2, 2, 2, 2, 67, 2,152,148,148,148,153, 44,
+ 67, 67, 67, 67, 67, 55, 67, 67, 67, 67, 44, 44, 44, 44, 44, 44,
+ 67, 67, 67, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44,
+ 1, 2,154,155, 4, 4, 4, 4, 4, 67, 4, 4, 4, 4,156,157,
+ 158,105,105,105,105, 43, 43, 86,159, 40, 40, 67,105,160, 63, 67,
+ 36, 36, 36, 61, 57,161,162, 69, 36, 36, 36, 36, 36, 63, 40, 69,
+ 44, 44, 62, 36, 36, 36, 36, 36, 67, 27, 27, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 92, 27, 27, 27, 27, 27, 67, 67, 67,
+ 67, 67, 67, 67, 27, 27, 27, 27,163, 27, 27, 27, 27, 27, 27, 27,
+ 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,164, 2,
+ 7, 7, 7, 7, 7, 36, 44, 44, 32, 32, 32, 32, 32, 32, 32, 70,
+ 51,165, 43, 43, 43, 43, 43, 88, 32, 32, 32, 32, 32, 32, 40, 43,
+ 36, 36, 36,105,105,105,105,105, 43, 2, 2, 2, 44, 44, 44, 44,
+ 41, 41, 41,162, 40, 40, 40, 40, 41, 32, 32, 32, 32, 32, 32, 32,
+ 16, 32, 32, 32, 32, 32, 32, 32, 45, 16, 16, 16, 34, 34, 34, 32,
+ 32, 32, 32, 32, 42,166, 34, 35, 32, 32, 16, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 11, 11, 32, 11, 11, 32, 32, 32, 32, 32, 32,
+ 32, 32, 11, 11, 34,110, 44, 44, 32,150,150, 32, 32, 44, 44, 44,
+ 44, 40,167, 35, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36,
+ 36, 94, 87, 85, 67, 67, 80, 44, 27, 27, 27, 67,168, 44, 44, 44,
+ 36, 36, 2, 2, 44, 44, 44, 44, 86, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 86, 86, 86, 86, 86, 86, 86, 86, 43, 44, 44, 44, 44, 2,
43, 36, 36, 36, 2, 72, 72, 70, 36, 36, 36, 43, 43, 43, 43, 2,
- 36, 36, 36, 70, 43, 43, 43, 43, 43, 84, 44, 44, 44, 44, 44, 91,
- 36, 70, 84, 43, 43, 84, 43, 84,162, 2, 2, 2, 2, 2, 2, 52,
+ 36, 36, 36, 70, 43, 43, 43, 43, 43, 86, 44, 44, 44, 44, 44, 93,
+ 36, 70, 86, 43, 43, 86, 43, 86,107, 2, 2, 2, 2, 2, 2, 52,
7, 7, 7, 7, 7, 44, 44, 2, 36, 36, 70, 69, 36, 36, 36, 36,
- 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 83,
- 85, 83, 85, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 83, 44,
- 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 92, 83, 36,
+ 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 85,
+ 87, 85, 87, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 85, 44,
+ 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 94, 85, 36,
71, 43, 71, 70, 71, 36, 36, 43, 70, 61, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 44, 44, 62,106, 2, 36, 36, 36, 36, 36, 92, 43, 84,
- 2,106,163, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61,
- 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16,112, 40, 40,
- 16, 16, 16, 16,109, 41, 44, 44, 36, 92, 85, 84, 83,162, 85, 44,
+ 44, 44, 44, 44, 44, 62, 83, 2, 36, 36, 36, 36, 36, 94, 43, 86,
+ 2, 83,169, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61,
+ 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16,114, 40, 40,
+ 16, 16, 16, 16,111, 41, 44, 44, 36, 94, 87, 86, 85,107, 87, 44,
36, 36, 44, 44, 44, 44, 44, 44, 36, 36, 36, 61, 44, 62, 36, 36,
- 164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165,
- 16, 16, 16,108, 44, 44, 44, 44, 44,146, 16, 16, 44, 44, 62, 71,
- 36, 36, 36, 36,166, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61,
+ 170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171,
+ 16, 16, 16,110, 44, 44, 44, 44, 44,150, 16, 16, 44, 44, 62, 71,
+ 36, 36, 36, 36,172, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61,
36, 62, 61, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41,
- 41, 44, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36,144, 44, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36,161, 44, 2, 2, 2,167,128, 44, 44, 44,
- 6,168,169,144,144,144,144,144,144,144,128,167,128, 2,125,170,
- 2, 64, 2, 2,150,144,144,128, 2,171, 8,172, 66, 2, 44, 44,
- 36, 36, 36, 36, 36, 36, 61, 79, 91, 2, 3, 2, 4, 5, 6, 2,
- 16, 16, 16, 16, 16, 17, 18,127,128, 4, 2, 36, 36, 36, 36, 36,
+ 41,117, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36,148, 44, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 44, 44, 44, 55, 36, 36, 36, 36, 36, 36,168, 67,
+ 2, 2, 2,152,130, 44, 44, 44, 6,173,174,148,148,148,148,148,
+ 148,148,130,152,130, 2,127,175, 2, 64, 2, 2,156,148,148,130,
+ 2,176, 8,177, 66, 2, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 61, 79, 93, 2, 3, 2, 4, 5, 6, 2,
+ 16, 16, 16, 16, 16, 17, 18,129,130, 4, 2, 36, 36, 36, 36, 36,
69, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40,
44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 61, 44,
- 20,173, 56,174, 26, 8,140, 90, 44, 44, 44, 44, 79, 65, 67, 44,
+ 20,178, 56,135, 26, 8,144, 92, 44, 44, 44, 44, 79, 65, 67, 44,
36, 36, 36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62,
- 2, 64, 44,175, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67,
- 103,103,139, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 90,
- 67, 67, 67, 67, 67, 67, 90, 44, 90, 44, 44, 44, 44, 44, 44, 44,
- 67, 67, 67, 67, 67, 67, 50, 44,176, 27, 27, 27, 27, 27, 27, 27,
+ 2, 64, 44,179, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67,
+ 105,105,143, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 92,
+ 67, 67, 67, 67, 67, 67, 92, 44, 92, 44, 44, 44, 44, 44, 44, 44,
+ 67, 67, 67, 67, 67, 67, 50, 44,180, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 44, 44, 27, 27, 44, 44, 44, 44, 62, 36,
- 149, 36, 36, 36, 36,177, 44, 44, 36, 36, 36, 43, 43, 80, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 91, 36, 36, 44, 44, 36, 36, 36, 36,
- 178,103,103, 44, 44, 44, 44, 44, 11, 11, 11, 11, 16, 16, 16, 16,
+ 155, 36, 36, 36, 36,181, 44, 44, 36, 36, 36, 43, 43, 80, 44, 44,
+ 36, 36, 36, 36, 36, 36, 36, 93, 36, 36, 44, 44, 36, 36, 36, 36,
+ 182,105,105, 44, 44, 44, 44, 44, 11, 11, 11, 11, 16, 16, 16, 16,
11, 11, 44, 44, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 44, 44,
- 36, 36, 44, 44, 44, 44, 44, 91, 36, 36, 36, 44, 61, 36, 36, 36,
- 36, 36, 36, 62, 61, 44, 61, 62, 36, 36, 36, 91, 27, 27, 27, 27,
- 36, 36, 36, 77,157, 27, 27, 27, 44, 44, 44,175, 27, 27, 27, 27,
- 36, 61, 36, 44, 44,175, 27, 27, 36, 36, 36, 27, 27, 27, 44, 91,
- 36, 36, 36, 36, 36, 44, 44, 91, 36, 36, 36, 36, 44, 44, 27, 36,
- 44, 27, 27, 27, 27, 27, 27, 27, 70, 43, 57, 80, 44, 44, 43, 43,
- 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36, 44, 43, 80, 44, 57,
- 27, 27, 27, 27, 98, 44, 44, 44, 2, 2, 2, 2, 64, 44, 44, 44,
- 36, 36, 36, 36, 36, 36,179, 30, 36, 36, 36, 36, 36, 36,179, 27,
- 36, 36, 36, 36, 78, 36, 36, 36, 36, 36, 70, 80, 44,175, 27, 27,
- 2, 2, 2, 64, 44, 44, 44, 44, 36, 36, 36, 44, 91, 2, 2, 2,
- 36, 36, 36, 44, 27, 27, 27, 27, 36, 61, 44, 44, 27, 27, 27, 27,
- 36, 44, 44, 44, 91, 2, 64, 44, 44, 44, 44, 44,175, 27, 27, 27,
- 11, 47, 44, 44, 44, 44, 44, 44, 16,108, 44, 44, 44, 27, 27, 27,
- 36, 36, 43, 43, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27, 98,
- 36, 36, 36, 36, 36, 57,180, 44, 36, 44, 44, 44, 44, 44, 44, 44,
- 27, 27, 27, 93, 44, 44, 44, 44,176, 27, 30, 2, 2, 44, 44, 44,
- 36, 36,179, 27, 27, 27, 44, 44, 85, 96, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 44, 44, 44, 44, 36, 36, 44, 44, 44, 44, 44, 93,
+ 11, 11, 11, 11, 11, 47, 11, 11, 11, 47, 11,150, 16, 16, 16, 16,
+ 16,150, 16, 16, 16, 16, 16, 16, 16,150, 16, 16, 16,150,110, 44,
+ 40, 40, 40, 52, 40, 40, 40, 40, 81, 40, 40, 40, 40, 81, 44, 44,
+ 36, 36, 36, 44, 61, 36, 36, 36, 36, 36, 36, 62, 61, 44, 61, 62,
+ 36, 36, 36, 93, 27, 27, 27, 27, 36, 36, 36, 77,163, 27, 27, 27,
+ 44, 44, 44,179, 27, 27, 27, 27, 36, 61, 36, 44, 44,179, 27, 27,
+ 36, 36, 36, 27, 27, 27, 44, 93, 36, 36, 36, 36, 36, 44, 44, 93,
+ 36, 36, 36, 36, 44, 44, 27, 36, 44, 27, 27, 27, 27, 27, 27, 27,
+ 70, 43, 57, 80, 44, 44, 43, 43, 36, 36, 62, 36, 62, 36, 36, 36,
+ 36, 36, 36, 44, 43, 80, 44, 57, 27, 27, 27, 27,100, 44, 44, 44,
+ 2, 2, 2, 2, 64, 44, 44, 44, 36, 36, 36, 36, 36, 36,183, 30,
+ 36, 36, 36, 36, 36, 36,183, 27, 36, 36, 36, 36, 78, 36, 36, 36,
+ 36, 36, 70, 80, 44,179, 27, 27, 2, 2, 2, 64, 44, 44, 44, 44,
+ 36, 36, 36, 44, 93, 2, 2, 2, 36, 36, 36, 44, 27, 27, 27, 27,
+ 36, 61, 44, 44, 27, 27, 27, 27, 36, 44, 44, 44, 93, 2, 64, 44,
+ 44, 44, 44, 44,179, 27, 27, 27, 11, 47, 44, 44, 44, 44, 44, 44,
+ 16,110, 44, 44, 44, 27, 27, 27, 36, 36, 43, 43, 44, 44, 44, 44,
+ 27, 27, 27, 27, 27, 27, 27,100, 36, 36, 36, 36, 36, 57,184, 44,
+ 36, 44, 44, 44, 44, 44, 44, 44, 27, 27, 27, 95, 44, 44, 44, 44,
+ 180, 27, 30, 2, 2, 44, 44, 44, 36, 43, 43, 2, 2, 44, 44, 44,
+ 36, 36,183, 27, 27, 27, 44, 44, 87, 98, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 43, 60, 2, 2, 2, 44,
- 27, 27, 27, 7, 7, 7, 7, 7, 44, 44, 44, 44, 44, 44, 44, 57,
- 84, 85, 43, 83, 85, 60,181, 2, 2, 44, 44, 44, 44, 44, 79, 44,
- 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 85, 43,
- 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 92, 96, 44, 44, 44, 44,
- 36, 70, 2, 61, 44, 44, 44, 44, 36, 92, 84, 43, 43, 43, 43, 83,
- 96, 36, 63, 2, 59, 43, 60, 85, 7, 7, 7, 7, 7, 63, 63, 2,
- 175, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 84, 85, 43, 84, 83, 43, 2, 2, 2, 80,
+ 27, 27, 27, 7, 7, 7, 7, 7, 71, 70, 71, 44, 44, 44, 44, 57,
+ 86, 87, 43, 85, 87, 60,185, 2, 2, 80, 44, 44, 44, 44, 79, 44,
+ 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 87, 43,
+ 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 94, 98, 44, 44, 44, 44,
+ 36, 70, 2, 61, 44, 44, 44, 44, 36, 94, 86, 43, 43, 43, 43, 85,
+ 98, 36, 63, 2, 59, 43, 60, 87, 7, 7, 7, 7, 7, 63, 63, 2,
+ 179, 27, 27, 27, 27, 27, 27, 27, 27, 27,100, 44, 44, 44, 44, 44,
+ 36, 36, 36, 36, 36, 36, 86, 87, 43, 86, 85, 43, 2, 2, 2, 80,
36, 36, 36, 61, 61, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 62,
36, 36, 36, 36, 63, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 70,
- 84, 85, 43, 43, 43, 80, 44, 44, 43, 84, 62, 36, 36, 36, 61, 62,
- 61, 36, 62, 36, 36, 57, 71, 84, 83, 84, 88, 87, 88, 87, 84, 44,
- 61, 44, 44, 87, 44, 44, 62, 36, 36, 84, 44, 43, 43, 43, 80, 44,
- 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 92, 84, 43, 43, 43, 43,
- 84, 43, 83, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 2, 91, 71,
- 84, 85, 43, 43, 83, 83, 84, 85, 83, 43, 36, 72, 44, 44, 44, 44,
- 36, 36, 36, 36, 36, 36, 36, 92, 84, 43, 43, 44, 84, 84, 43, 85,
+ 86, 87, 43, 43, 43, 80, 44, 44, 43, 86, 62, 36, 36, 36, 61, 62,
+ 61, 36, 62, 36, 36, 57, 71, 86, 85, 86, 90, 89, 90, 89, 86, 44,
+ 61, 44, 44, 89, 44, 44, 62, 36, 36, 86, 44, 43, 43, 43, 80, 44,
+ 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 94, 86, 43, 43, 43, 43,
+ 86, 43, 85, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 2, 93, 71,
+ 86, 87, 43, 43, 85, 85, 86, 87, 85, 43, 36, 72, 44, 44, 44, 44,
+ 36, 36, 36, 36, 36, 36, 36, 94, 86, 43, 43, 44, 86, 86, 43, 87,
60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 44,
- 84, 85, 43, 43, 43, 83, 85, 85, 60, 2, 61, 44, 44, 44, 44, 44,
- 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 85, 84,
- 43, 43, 43, 85, 61, 44, 44, 44, 84, 43, 43, 85, 43, 43, 44, 44,
- 7, 7, 7, 7, 7, 27, 2, 95, 43, 43, 43, 43, 85, 60, 44, 44,
- 27, 98, 44, 44, 44, 44, 44, 62, 36, 36, 36, 61, 62, 44, 36, 36,
- 36, 36, 62, 61, 36, 36, 36, 36, 84, 84, 84, 87, 88, 57, 83, 71,
- 96, 85, 2, 64, 44, 44, 44, 44, 36, 36, 36, 36, 44, 36, 36, 36,
- 92, 84, 43, 43, 44, 43, 84, 84, 71, 72, 88, 44, 44, 44, 44, 44,
- 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 83, 70, 43, 60,
- 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 83, 85, 43, 36, 36,
- 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 83, 43, 2, 72, 2,
- 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 85,
+ 86, 87, 43, 43, 43, 85, 87, 87, 60, 2, 61, 44, 44, 44, 44, 44,
+ 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 87, 86,
+ 43, 43, 43, 87, 63, 44, 44, 44, 86, 43, 43, 87, 43, 43, 44, 44,
+ 7, 7, 7, 7, 7, 27, 2, 97, 43, 43, 43, 43, 87, 60, 44, 44,
+ 27,100, 44, 44, 44, 44, 44, 62, 36, 36, 36, 61, 62, 44, 36, 36,
+ 36, 36, 62, 61, 36, 36, 36, 36, 86, 86, 86, 89, 90, 57, 85, 71,
+ 98, 87, 2, 64, 44, 44, 44, 44, 36, 36, 36, 36, 44, 36, 36, 36,
+ 94, 86, 43, 43, 44, 43, 86, 86, 71, 72, 90, 44, 44, 44, 44, 44,
+ 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 85, 70, 43, 60,
+ 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 85, 87, 43, 36, 36,
+ 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 85, 43, 2, 72, 2,
+ 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 87,
63, 2, 2, 44, 44, 44, 44, 44, 2, 36, 36, 36, 36, 36, 36, 36,
- 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 87, 43, 43, 43,
- 83, 43, 85, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36,
+ 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 89, 43, 43, 43,
+ 85, 43, 87, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36,
70, 43, 43, 80, 44, 80, 43, 57, 43, 43, 43, 70, 44, 44, 44, 44,
- 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 84, 84, 88,
- 43, 87, 85, 85, 61, 44, 44, 44, 36, 70, 83,162, 64, 44, 44, 44,
- 27, 27, 89, 67, 67, 67, 56, 20,161, 67, 67, 67, 67, 67, 67, 67,
- 67, 44, 44, 44, 44, 44, 44, 91,103,103,103,103,103,103,103,177,
- 2, 2, 64, 44, 44, 44, 44, 44, 65, 65, 65, 65, 68, 44, 44, 44,
- 43, 43, 60, 44, 44, 44, 44, 44, 43, 43, 43, 60, 2, 2, 67, 67,
- 40, 40, 95, 44, 44, 44, 44, 44, 7, 7, 7, 7, 7,175, 27, 27,
- 27, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 62, 36,
- 27, 27, 27, 30, 2, 64, 44, 44, 36, 36, 36, 36, 36, 61, 44, 57,
- 92, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
- 84, 84, 84, 84, 44, 44, 44, 57, 43, 74, 40, 40, 40, 40, 40, 40,
- 40, 86, 80, 44, 44, 44, 44, 44, 84, 44, 44, 44, 44, 44, 44, 44,
+ 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 86, 86, 90,
+ 43, 89, 87, 87, 61, 44, 44, 44, 36, 70, 85,107, 64, 44, 44, 44,
+ 27, 27, 91, 67, 67, 67, 56, 20,168, 67, 67, 67, 67, 67, 67, 67,
+ 67, 44, 44, 44, 44, 44, 44, 93,105,105,105,105,105,105,105,181,
+ 2, 2, 64, 44, 44, 44, 44, 44, 63, 64, 44, 44, 44, 44, 44, 44,
+ 65, 65, 65, 65,132, 44, 44, 44, 43, 43, 60, 44, 44, 44, 44, 44,
+ 43, 43, 43, 60, 2, 2, 67, 67, 40, 40, 97, 44, 44, 44, 44, 44,
+ 7, 7, 7, 7, 7,179, 27, 27, 27, 62, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 44, 44, 62, 36, 27, 27, 27, 30, 2, 64, 44, 44,
+ 36, 36, 36, 36, 36, 61, 44, 57, 94, 86, 86, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 44, 44, 44, 57,
+ 43, 74, 40, 40, 40, 40, 40, 40, 40, 88, 80, 44, 44, 44, 44, 44,
+ 86, 44, 44, 44, 44, 44, 44, 44, 40, 40, 52, 40, 40, 40, 52, 81,
36, 61, 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 44, 44, 44, 44,
36, 36, 36, 36, 36, 44, 50, 60, 65, 65, 44, 44, 44, 44, 44, 44,
- 67, 67, 67, 90, 55, 67, 67, 67, 67, 67,182, 85, 43, 67,182, 84,
- 84,183, 65, 65, 65, 82, 43, 43, 43, 76, 50, 43, 43, 43, 67, 67,
- 67, 67, 67, 67, 67, 43, 43, 67, 67, 67, 67, 67, 90, 44, 44, 44,
- 67, 43, 76, 44, 44, 44, 44, 44, 27, 27, 44, 44, 44, 44, 44, 44,
- 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 16, 16, 16,108, 16, 16, 16, 16, 16,
- 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 11,
- 44, 47, 48, 47, 48, 11, 47, 11, 11, 11, 11, 16, 16,146,146, 16,
- 16, 16,146, 16, 16, 16, 16, 16, 16, 16, 11, 48, 11, 47, 48, 11,
- 11, 11, 47, 11, 11, 11, 47, 16, 16, 16, 16, 16, 11, 48, 11, 47,
- 11, 11, 47, 47, 44, 11, 11, 11, 47, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16,
- 16, 16, 16, 44, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11,
- 11, 11, 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33,
- 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31,
- 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16,
- 16, 33, 16, 16, 16, 32, 44, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 43, 43, 43, 76, 67, 50, 43, 43, 43, 43, 43, 43, 43, 43, 76, 67,
- 67, 67, 50, 67, 67, 67, 67, 67, 67, 67, 76, 21, 2, 2, 44, 44,
- 44, 44, 44, 44, 44, 57, 43, 43, 43, 43, 43, 80, 43, 43, 43, 43,
- 43, 43, 43, 43, 80, 57, 43, 43, 43, 57, 80, 43, 43, 80, 44, 44,
- 43, 43, 43, 74, 40, 40, 40, 44, 7, 7, 7, 7, 7, 44, 44, 77,
- 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 44, 44, 94,
- 36, 36, 61,175, 27, 27, 27, 27, 43, 43, 43, 80, 44, 44, 44, 44,
- 16, 16, 43, 43, 43, 74, 44, 44, 27, 27, 27, 27, 27, 27,157, 27,
- 184, 27, 98, 44, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27,157,
+ 43, 43, 43, 43, 43, 43, 43, 44, 43, 43, 43, 80, 44, 44, 44, 44,
+ 67, 67, 67, 92, 55, 67, 67, 67, 67, 67,186, 87, 43, 67,186, 86,
+ 86,187, 65, 65, 65, 84, 43, 43, 43, 76, 50, 43, 43, 43, 67, 67,
+ 67, 67, 67, 67, 67, 43, 43, 67, 67, 43, 76, 44, 44, 44, 44, 44,
+ 27, 27, 44, 44, 44, 44, 44, 44, 11, 11, 11, 11, 11, 16, 16, 16,
+ 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16,
+ 16, 16,110, 16, 16, 16, 16, 16, 11, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 47, 11, 44, 47, 48, 47, 48, 11, 47, 11,
+ 11, 11, 11, 16, 16,150,150, 16, 16, 16,150, 16, 16, 16, 16, 16,
+ 16, 16, 11, 48, 11, 47, 48, 11, 11, 11, 47, 11, 11, 11, 47, 16,
+ 16, 16, 16, 16, 11, 48, 11, 47, 11, 11, 47, 47, 44, 11, 11, 11,
+ 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11,
+ 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 44, 11, 11, 11, 11,
+ 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16,
+ 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16,
+ 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16,
+ 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 44, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 43, 43, 43, 76, 67, 50, 43, 43,
+ 43, 43, 43, 43, 43, 43, 76, 67, 67, 67, 50, 67, 67, 67, 67, 67,
+ 67, 67, 76, 21, 2, 2, 44, 44, 44, 44, 44, 44, 44, 57, 43, 43,
+ 16, 16, 16, 16, 16, 39, 16, 16, 16, 16, 16, 16, 16, 16, 16,110,
+ 43, 43, 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, 80, 57, 43, 43,
+ 43, 57, 80, 43, 43, 80, 44, 44, 43, 43, 43, 74, 40, 40, 40, 44,
+ 7, 7, 7, 7, 7, 44, 44, 77, 36, 36, 36, 36, 36, 36, 36, 80,
+ 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 44, 44, 96,
+ 36, 36, 36, 61, 36, 36, 62, 61, 36, 36, 61,179, 27, 27, 27, 27,
+ 16, 16, 43, 43, 43, 74, 44, 44, 27, 27, 27, 27, 27, 27,163, 27,
+ 188, 27,100, 44, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27,163,
27, 27, 27, 27, 27, 27, 27, 44, 36, 36, 62, 36, 36, 36, 36, 36,
62, 61, 61, 62, 62, 36, 36, 36, 36, 61, 36, 36, 62, 62, 44, 44,
44, 61, 44, 62, 62, 62, 62, 36, 62, 61, 61, 62, 62, 62, 62, 62,
62, 61, 61, 62, 36, 61, 36, 36, 36, 61, 36, 36, 62, 36, 61, 61,
36, 36, 36, 36, 36, 62, 36, 36, 62, 36, 62, 36, 36, 62, 36, 36,
8, 44, 44, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67,
- 27, 27, 27, 27, 27, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 44,
- 44, 44, 44, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44, 44, 44,
- 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41,
- 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 90, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 90, 44, 67, 90, 44, 44,
- 67, 90, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44,
- 65, 65, 65, 65, 65, 65, 65, 65,165,165,165,165,165,165,165, 44,
- 165,165,165,165,165,165,165, 0, 0, 0, 29, 21, 21, 21, 23, 21,
+ 27, 27, 27, 27, 27, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 44,
+ 44, 44, 44, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44, 44, 44,
+ 67, 67, 67, 67, 92, 44, 44, 44, 67, 44, 44, 44, 44, 44, 44, 44,
+ 67, 67, 67, 67, 67, 25, 41, 41, 67, 67, 67, 67, 44, 44, 55, 67,
+ 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 92, 44, 67, 67, 92, 44,
+ 67, 92, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44,
+ 65, 65, 65, 65, 65, 65, 65, 65,171,171,171,171,171,171,171, 44,
+ 171,171,171,171,171,171,171, 0, 0, 0, 29, 21, 21, 21, 23, 21,
22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9,
9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0,
23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15,
@@ -4280,2075 +4348,629 @@ _hb_ucd_u8[17508] =
2, 2, 6, 5, 9, 21, 9, 2, 2, 9, 25, 9, 26, 12, 11, 11,
2, 6, 5, 21, 17, 2, 2, 26, 26, 23, 2, 12, 17, 12, 21, 12,
12, 21, 7, 2, 2, 7, 7, 21, 21, 2, 1, 1, 21, 23, 26, 26,
- 1, 2, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12,
- 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 1, 12, 12, 10,
- 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26, 26, 2, 2, 21,
- 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15, 15, 2, 17, 7,
- 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 17, 21, 7, 6, 11, 12,
- 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24, 9, 24, 24, 2,
- 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20,
- 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6, 18, 6,
- 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15,
- 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 2, 5, 22, 21,
- 26, 6, 7, 14, 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24,
- 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 23, 26, 10, 21, 6, 10,
- 4, 4, 3, 3, 7, 25, 21, 22, 17, 16, 16, 22, 16, 16, 25, 17,
- 25, 2, 25, 24, 23, 2, 2, 15, 12, 15, 14, 2, 21, 14, 7, 15,
- 12, 17, 21, 1, 26, 10, 10, 1, 23, 15, 0, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0,
- 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34,
- 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0,
- 9, 0, 10, 11, 0, 0, 12, 13, 14, 15, 16, 0, 0, 0, 0, 17,
- 18, 19, 20, 0, 0, 0, 21, 22, 0, 23, 24, 0, 0, 23, 25, 26,
- 0, 23, 25, 0, 0, 23, 25, 0, 0, 23, 25, 0, 0, 0, 25, 0,
- 0, 0, 27, 0, 0, 23, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0,
- 0, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 36, 37, 0, 38, 0,
- 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 0, 0, 0, 0, 43, 0,
- 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0,
- 46, 0, 0, 47, 0, 48, 49, 0, 0, 50, 51, 52, 0, 53, 0, 54,
- 0, 55, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 59,
- 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64,
- 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 67, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
- 70, 71, 0, 0, 0, 0, 51, 72, 0, 73, 74, 0, 0, 75, 76, 0,
- 0, 0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 25,
- 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 83, 0, 0, 0, 0,
- 84, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0,
- 0, 0, 70, 63, 0, 90, 0, 0, 91, 92, 0, 75, 0, 0, 93, 0,
- 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 25, 97, 0, 0, 0, 0,
- 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 63,100, 0,
- 0, 63, 0, 0, 0,101, 0, 0, 0,102, 0, 0, 0, 0, 0, 0,
- 0, 90, 0, 0, 0, 0, 0, 0, 0,103,104, 0, 0, 0, 0, 76,
- 0, 42,105, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,108, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,109, 0,110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,
- 0, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113,114,115, 0, 0,
- 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 117,118, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,120, 0, 0, 0,121, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4,
- 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17,
- 18, 1, 1, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24, 25, 26, 27, 28,
- 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 31, 0,
- 0, 0, 32, 33, 34, 35, 1, 36, 0, 0, 0, 0, 37, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41, 0, 0, 0, 0,
- 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43, 36, 44, 45,
- 21, 45, 46, 0, 0, 0, 0, 0, 0, 0, 19, 1, 21, 0, 0, 47,
- 0, 0, 0, 0, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 1, 1, 1,
- 53, 21, 43, 54, 55, 21, 35, 1, 0, 0, 0, 0, 0, 0, 0, 56,
- 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 57, 0, 61, 0, 0,
- 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 71, 0,
- 0, 0, 0, 0, 72, 73, 74, 75, 76, 77, 0, 0, 0, 0, 0, 0,
- 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 80, 0,
+ 1, 21, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12,
+ 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 24, 7, 7, 6,
+ 1, 12, 12, 10, 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26,
+ 26, 2, 2, 21, 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15,
+ 15, 2, 17, 7, 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 10, 21,
+ 17, 21, 11, 12, 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24,
+ 9, 24, 24, 2, 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28,
+ 1, 29, 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29,
+ 1, 2, 15, 6, 18, 6, 23, 2, 12, 11, 9, 26, 26, 9, 26, 5,
+ 5, 26, 14, 9, 5, 14, 14, 15, 25, 26, 26, 22, 18, 26, 18, 25,
+ 18, 22, 5, 12, 2, 5, 22, 21, 21, 22, 18, 17, 26, 6, 7, 14,
+ 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6, 26, 15,
+ 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10, 4, 4, 3, 3,
+ 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 25, 2, 25, 24, 2, 15,
+ 12, 15, 14, 2, 21, 14, 7, 15, 12, 17, 21, 1, 26, 10, 10, 1,
+ 23, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12,
+ 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
+ 0, 21, 22, 23, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0,
+ 0, 0, 39, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
+ 0, 0, 0, 0, 6, 7, 8, 0, 9, 0, 10, 11, 0, 0, 12, 13,
+ 14, 15, 16, 0, 0, 0, 0, 17, 18, 19, 20, 0, 21, 0, 22, 23,
+ 0, 24, 25, 0, 0, 24, 26, 27, 0, 24, 26, 0, 0, 24, 26, 0,
+ 0, 24, 26, 0, 0, 0, 26, 0, 0, 24, 28, 0, 0, 24, 26, 0,
+ 0, 29, 26, 0, 0, 0, 30, 0, 0, 31, 32, 0, 0, 33, 34, 0,
+ 35, 36, 0, 37, 38, 0, 39, 0, 0, 40, 0, 0, 41, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 43, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0,
+ 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 50, 51, 0,
+ 0, 52, 53, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 58, 59,
+ 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 62, 63,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,
+ 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 71,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, 0, 0, 0, 0, 53, 74,
+ 0, 75, 76, 0, 0, 77, 78, 0, 0, 0, 0, 0, 0, 79, 80, 81,
+ 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85,
+ 0, 0, 0, 86, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 0, 89,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0,
+ 0, 0, 92, 0, 93, 0, 0, 0, 0, 0, 72, 94, 0, 95, 0, 0,
+ 96, 97, 0, 77, 0, 0, 98, 0, 0, 99, 0, 0, 0, 0, 0,100,
+ 0,101, 26,102, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,104, 0,
+ 0, 0, 0, 0, 0, 65,105, 0, 0, 65, 0, 0, 0,106, 0, 0,
+ 0,107, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0,
+ 0,108,109, 0, 0, 0, 0, 78, 0, 44,110, 0,111, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
+ 0, 0,112, 0,113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114,
+ 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0,117, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,118,119,120, 0, 0, 0, 0,121, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,122,123, 0, 0, 0, 0, 0, 0,
+ 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 0,125,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0,
+ 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10,
+ 1, 11, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 0, 0, 0, 0,
+ 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 1,
+ 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33, 34, 35, 1, 36,
+ 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 1, 39,
+ 14, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0,
+ 0, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 0, 0,
+ 0, 0, 19, 1, 21, 0, 0, 47, 0, 0, 0, 0, 0, 38, 48, 1,
+ 1, 49, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0,
+ 0, 0, 0, 0, 0, 0, 52, 1, 0, 0, 38, 14, 4, 1, 1, 1,
+ 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 0, 0, 0, 0, 55,
+ 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 56, 0, 60, 0, 0,
+ 0, 0, 0, 0, 0, 0, 61, 62, 0, 0, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 70, 0,
+ 0, 0, 0, 0, 71, 72, 73, 74, 75, 76, 0, 0, 0, 0, 0, 0,
+ 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0,
0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,
- 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 81,
- 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
- 0, 0, 0, 0, 0, 19, 84, 0, 63, 0, 0, 0, 0, 49, 1, 85,
- 0, 0, 0, 0, 1, 54, 15, 86, 84, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 56, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
- 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0,
- 0, 88, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0,
- 0, 0, 0, 0, 89, 9, 12, 4, 90, 8, 91, 47, 0, 59, 50, 0,
- 21, 1, 21, 92, 93, 1, 1, 1, 1, 1, 1, 1, 1, 94, 95, 96,
- 0, 0, 0, 0, 97, 1, 98, 59, 81, 99,100, 4, 59, 0, 0, 0,
- 0, 0, 0, 19, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,101,102, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,103, 0, 0, 0, 0, 19, 0, 1, 1, 50,
- 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 50, 0, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0,
- 1, 1, 1, 1, 50, 0, 0, 0, 0, 0, 52, 69, 0, 0, 0, 0,
- 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0,
- 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,105, 59, 38,
- 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,106, 1, 14, 4, 12, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 38, 89, 0,
- 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 62,
- 0,109, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 19, 59, 0, 0, 0, 0, 0,110, 14, 54, 84, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,111, 0, 89, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 62, 63, 0, 0, 63, 0, 88, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,111, 0, 0, 0, 0,112, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 79, 56, 0, 38, 1, 59, 1, 59, 0, 0,
- 64, 88, 0, 0, 0, 0, 0, 60,113, 0, 0, 0, 0, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 0, 0,
- 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
- 79, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 57, 0, 88,114, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 8, 91, 0, 0,
- 0, 0, 0, 0, 1, 89, 0, 0, 0, 0, 0, 0,115, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,116, 0,117,118,119,120, 0, 52, 4,
- 121, 49, 23, 0, 0, 0, 0, 0, 0, 0, 38, 50, 0, 0, 0, 0,
- 38, 59, 0, 0, 0, 0, 0, 0, 1, 89, 1, 1, 1, 1, 39, 1,
- 48,104, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 4,121, 0, 0, 0, 1,122, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,230,230,230,230,230,232,220,220,220,220,232,216,
- 220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220,
- 1, 1, 1, 1, 1,220,220,220,220,230,230,230,230,240,230,220,
- 220,220,230,230,230,220,220, 0,230,230,230,220,220,220,220,230,
- 232,220,220,230,233,234,234,233,234,234,233,230, 0, 0, 0,230,
- 0,220,230,230,230,230,220,230,230,230,222,220,230,230,220,220,
- 230,222,228,230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20,
- 21, 22, 0, 23, 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0,
- 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230,
- 220,230,230,220, 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230,
- 230, 0,220,230,230,220, 0, 0, 0, 36, 0, 0,230,220,230,230,
- 220,220,230,220,220,230,220,230,220,230,230, 0, 0,220, 0, 0,
- 230,230, 0,230, 0,230,230,230,230,230, 0, 0, 0,220,220,220,
- 0, 0, 0,220,230,230, 0,220,230,220,220,220, 27, 28, 29,230,
- 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0,
- 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 9, 0,103,103, 9, 0,107,107,107,107,118,118, 9, 0,
- 122,122,122,122,220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0,
- 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0,
- 130, 0,230,230, 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7,
- 0, 9, 9, 0, 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220,
- 220, 0, 0, 0,230, 0, 0,220,230,220, 0,220, 0, 0, 9, 9,
- 0, 0, 7, 0,230,230,230, 0,230, 0, 1, 1, 1, 0, 0, 0,
- 230,234,214,220,202,230,230,230,230,230,232,228,228,220, 0,230,
- 233,220,230,220,230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230,
- 220,230, 1, 1, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0,
- 230, 0,230,230,220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,
- 230, 1,220, 0, 0,230,220, 0, 0, 0,220,220, 0, 9, 7, 0,
- 0, 7, 9, 0, 0, 0, 9, 7, 9, 9, 0, 0, 6, 6, 0, 0,
- 0, 0, 1, 0, 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,
- 216,216,216, 0,220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17,
- 17, 17, 17, 33, 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113,
- 129,169, 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0,
+ 0, 0, 0, 0, 63, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 19, 84, 0,
+ 62, 0, 0, 0, 0, 49, 1, 85, 0, 0, 0, 0, 1, 52, 15, 86,
+ 36, 10, 21, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0,
+ 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 19, 10, 1, 0, 0, 0,
+ 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 88, 0, 0, 0,
+ 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 87, 9, 12, 4,
+ 90, 8, 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1,
+ 1, 1, 1, 1, 1, 94, 95, 96, 0, 0, 0, 0, 97, 1, 98, 58,
+ 81, 99,100, 4, 58, 0, 0, 0, 0, 0, 0, 19, 50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 61, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0,101,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 0,
+ 0, 0, 0, 19, 0, 1, 1, 50, 0, 0, 0, 0, 0, 0, 0, 38,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0, 0, 0, 1, 1, 1, 1, 50, 0, 0, 0,
+ 0, 0,104, 68, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0,
+ 0, 0, 0, 0, 78, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,105,106, 58, 38, 81, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,107,
+ 1, 14, 4, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,
+ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 87, 0,
+ 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 61,
+ 0,110, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 19, 58, 0, 0, 0, 0, 0,111, 14, 52, 84, 0, 0, 0,
+ 112, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 61,
+ 0, 0, 0, 0, 0, 0,113, 0, 87, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 61, 62, 0, 0, 62, 0, 89, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 78, 55, 0, 38, 1, 58, 1, 58, 0, 0,
+ 63, 89, 0, 0, 0, 0, 0, 59,115, 0, 0, 0, 0, 0, 0, 0,
+ 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 0, 0,
+ 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
+ 78, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 8, 91, 0, 0,
+ 0, 0, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0,116, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,117, 0,118,119,120,121, 0,104, 4,
+ 122, 49, 23, 0, 0, 0, 0, 0, 0, 0, 38, 50, 0, 0, 0, 0,
+ 38, 58, 0, 0, 0, 0, 0, 0, 1, 87, 1, 1, 1, 1, 39, 1,
+ 48,105, 87, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4,122, 0, 0,
+ 0, 1,123, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230,
+ 230,232,220,220,220,220,232,216,220,220,220,220,220,202,202,220,
+ 220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220,220,220,
+ 220,230,230,230,230,240,230,220,220,220,230,230,230,220,220, 0,
+ 230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233,
+ 234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230,220,230,
+ 230,230,222,220,230,230,220,220,230,222,228,230, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, 0,
+ 230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29, 30, 31,
+ 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0, 0, 0,
+ 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220, 0, 0,
+ 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230,220,230,
+ 220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230,230,230,
+ 230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230, 0,220,
+ 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230,
+ 230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9,
+ 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107,107,107,
+ 118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220, 0,220,
+ 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130,
+ 130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0,220, 0,
+ 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230, 0, 0,
+ 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0, 0,220,
+ 230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0, 7, 0,
+ 230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230,230,230,
+ 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1,
+ 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0,218,228,
+ 232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0,230,230,
+ 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0,
+ 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9, 7, 0,
+ 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0, 1, 0,
+ 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0,
+ 220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17, 17, 17, 17, 33,
+ 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113,129,169, 17, 27,
+ 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8,
- 9, 0, 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0,
- 23, 24, 25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0,
- 0, 0, 0, 33, 34, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 1, 2, 39, 40,
- 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0,
- 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10,
- 0, 0, 0, 0, 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0,
- 0, 0, 0, 1, 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7,
- 20, 20, 20, 20, 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0,
- 20, 20, 25, 0, 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1,
- 28, 29, 30, 31, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0,
- 0, 0, 0, 0, 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4,
- 0, 10, 0, 33, 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35,
- 36, 34, 37, 0, 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8,
- 21, 1, 20, 0, 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21,
- 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 21, 0, 42, 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0,
- 0, 0, 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0,
- 0, 0, 0, 0, 0, 0, 20, 20, 1, 20, 20, 0, 0, 0, 0, 0,
- 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3,
- 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9,
- 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15, 16, 17, 18, 19,
- 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24, 25, 26, 14, 14,
- 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34, 7, 7, 7, 7,
+ 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, 0, 3, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, 9, 0, 0, 0,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, 23, 24, 25, 26,
+ 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 33,
+ 34, 35, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 38, 39, 0, 0, 0, 0, 1, 2, 40, 41, 0, 1, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 8, 9,
+ 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, 0, 0, 0, 1,
+ 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, 20, 20, 20, 20,
+ 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, 20, 20, 25, 0,
+ 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, 28, 29, 30, 31,
+ 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0,
+ 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, 0, 10, 0, 33,
+ 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, 36, 34, 37, 0,
+ 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, 21, 1, 20, 0,
+ 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, 0, 1, 0, 1,
+ 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 0, 42,
+ 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, 0, 0, 0, 46,
+ 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 20, 20, 1, 20, 20, 0,
+ 0, 0, 0, 0, 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 13, 22, 13, 13, 13, 13, 23, 24, 24,
+ 25, 26, 13, 13, 13, 27, 28, 29, 13, 30, 31, 32, 33, 34, 35, 36,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40, 7, 7, 41, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 42, 0, 0, 1,
- 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54, 55, 56,
- 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 61, 61,
- 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 13, 42,
+ 7, 7, 43, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 44, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2,
+ 53, 54, 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59,
+ 59, 59, 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70,
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70,
+ 70, 70, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 82, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 96, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 70, 70, 98, 99,100,101,102,102,103,104,105,106,107,108,109,110,
- 111,112, 97,113,114,115,116,117,118, 97,119,119,120, 97,121,122,
- 123,124,125,126,127,128,129,130,131, 97,132,133,134,135,136,137,
- 138,139,140,141,142, 97,143,144, 97,145,146,147,148, 97,149,150,
- 151,152,153,154, 97, 97,155,156,157,158, 97,159, 97,160,161,161,
- 161,161,161,161,161,162,163,161,164, 97, 97, 97, 97, 97,165,165,
- 165,165,165,165,165,165,166, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97,167,167,167,167,168, 97, 97, 97,169,169,
- 169,169,170,171,172,173, 97, 97, 97, 97,174,175,176,177,178,178,
- 178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
- 178,178,178,178,178,178,178,178,178,178,178,178,178,179,178,178,
- 178,178,178,178,180,180,180,181,182, 97, 97, 97, 97, 97,183,184,
- 185,186,186,187, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97,188,189, 97, 97, 97, 97, 97, 97, 59,190,
- 191,192,193,194,195, 97,196,197,198, 59, 59,199, 59,200,201,201,
- 201,201,201,202, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,203, 97,
- 204, 97, 97,205, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,206,207,
- 208, 97, 97, 97, 97, 97,209,210,211, 97,212,213, 97, 97,214,215,
- 59,216,217, 97, 59, 59, 59, 59, 59, 59, 59,218,219,220,221,222,
- 223,224,225,226, 59,227, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,228, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,229, 70,230, 70,
+ 32, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 70, 70, 97, 98, 99,100,101,101,102,103,104,105,
+ 106,107,108,109,110,111, 96,112,113,114,115,116,117,118,119,119,
+ 120,121,122,123,124,125,126,127,128,129,130,131,132, 96,133,134,
+ 135,136,137,138,139,140,141,142,143, 96,144,145, 96,146,147,148,
+ 149, 96,150,151,152,153,154,155, 96, 96,156,157,158,159, 96,160,
+ 96,161,162,162,162,162,162,162,162,163,164,162,165, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96,166,167,167,167,167,167,167,167,167,168, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,169,169,169,169,170, 96,
+ 96, 96,171,171,171,171,172,173,174,175, 96, 96, 96, 96,176,177,
+ 178,179,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+ 180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+ 180,181,180,180,180,180,180,180,182,182,182,183,184, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96,185,186,187,188,189,189,190, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,191,192, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 193,194, 59,195,196,197,198,199,200, 96,201,202,203, 59, 59,204,
+ 59,205,206,206,206,206,206,207, 96, 96, 96, 96, 96, 96, 96, 96,
+ 208, 96,209, 96,210, 96, 96,211, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96,212,213,214,215, 96, 96, 96, 96, 96,216,217,218, 96,219,220,
+ 96, 96,221,222, 59,223,224, 96, 59, 59, 59, 59, 59, 59, 59,225,
+ 226,227,228,229, 59, 59,230,231, 59,232, 96, 96, 96, 96, 96, 96,
+ 96, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,233,
70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
- 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,231, 70, 70, 70, 70,
- 70, 70, 70, 70, 70,232, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70,
- 70, 70,233, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70,
- 70, 70, 70, 70,234, 97, 97, 97, 97, 97, 97, 97, 97, 97,235, 97,
- 236,237, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0,
- 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0,
- 26, 26, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9,
- 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9, 0, 9, 2, 2,
- 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 6, 2, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4, 4, 4, 2, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 2,
- 2, 2, 2, 2, 2, 2, 14, 14, 14, 2, 2, 2, 2, 14, 14, 14,
- 14, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3,
- 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 0, 3, 2, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3,
- 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37, 37, 37, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38, 2, 2, 2, 2, 2, 2, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64, 64, 64, 90, 90,
- 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 2, 2, 90, 90,
- 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 2, 2, 95, 2, 37, 37, 37, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
- 0, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1,
- 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 5, 5,
- 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5, 5, 2,
- 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2,
- 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 5, 5,
- 2, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 2, 2, 2,
- 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 5, 5, 2, 5, 5, 5,
- 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 11,
- 11, 11, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 11, 11, 2,
- 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2,
- 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11, 11, 2, 11, 11,
- 2, 2, 11, 2, 11, 11, 11, 2, 2, 11, 11, 11, 2, 2, 2, 11,
- 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 2, 11, 2, 2, 2,
- 2, 2, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 10,
- 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10,
- 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2,
- 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10, 10, 10, 10, 10,
- 2, 2, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, 2, 2, 10, 2,
- 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 2, 2, 10, 10, 10, 10,
- 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 2, 21,
- 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2,
- 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2,
- 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 2, 21, 21, 21, 21, 21,
- 2, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21, 2, 2, 2, 2,
- 2, 2, 2, 21, 21, 21, 2, 2, 2, 2, 21, 21, 2, 21, 21, 21,
- 21, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22, 22, 22, 22, 22,
- 22, 2, 2, 2, 22, 22, 22, 2, 22, 22, 22, 22, 2, 2, 2, 22,
- 22, 2, 22, 2, 22, 22, 2, 2, 2, 22, 22, 2, 2, 2, 22, 22,
- 22, 22, 22, 22, 22, 22, 22, 22, 2, 2, 2, 2, 22, 22, 22, 2,
- 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22,
- 22, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
- 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23,
- 2, 2, 2, 23, 23, 23, 23, 2, 23, 23, 23, 23, 2, 2, 2, 2,
- 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 2, 2, 2, 23, 23,
- 23, 23, 2, 2, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16,
- 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 2, 2, 2, 2,
- 2, 2, 2, 16, 16, 2, 2, 2, 2, 2, 2, 2, 16, 2, 16, 16,
- 16, 16, 2, 2, 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2,
- 20, 20, 20, 20, 20, 20, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20,
- 20, 20, 2, 2, 20, 20, 2, 36, 36, 36, 2, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2,
- 36, 36, 36, 36, 36, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 2, 36, 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 36,
- 36, 36, 36, 2, 36, 2, 2, 2, 2, 2, 2, 2, 36, 36, 2, 2,
- 36, 36, 36, 2, 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24,
- 24, 24, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18,
- 18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 18, 18, 2, 2, 18, 18,
- 18, 18, 18, 2, 18, 2, 18, 18, 2, 2, 18, 18, 18, 18, 25, 25,
- 25, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 2, 2, 2, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25,
- 25, 25, 25, 0, 0, 0, 0, 25, 25, 2, 2, 2, 2, 2, 33, 33,
- 33, 33, 33, 33, 33, 33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 2, 8, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8,
- 8, 0, 8, 8, 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30,
- 30, 30, 30, 30, 30, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30,
- 30, 30, 30, 2, 2, 2, 30, 30, 2, 2, 2, 2, 2, 2, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28,
- 28, 28, 28, 28, 28, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 2, 2, 2, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 0, 0, 0, 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45,
- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2, 45, 45, 45, 45,
- 45, 45, 45, 2, 2, 2, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
- 44, 44, 44, 0, 0, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
- 43, 43, 2, 2, 2, 2, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
- 46, 46, 46, 2, 46, 46, 46, 2, 46, 46, 2, 2, 2, 2, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31,
- 2, 2, 2, 2, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2, 2, 2, 2, 32, 32,
- 32, 2, 2, 2, 2, 2, 28, 28, 28, 28, 28, 28, 2, 2, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 2, 48, 48,
- 48, 48, 2, 2, 2, 2, 48, 2, 2, 2, 48, 48, 48, 48, 52, 52,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 2, 2, 52, 52,
- 52, 52, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 2, 2, 2, 2, 58, 58, 2, 2, 2, 2, 2, 2, 58, 58,
- 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
- 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 2, 2, 91, 91, 91,
- 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, 2, 2, 1, 2,
- 2, 2, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 2, 2, 2, 2, 62, 62, 62, 62, 62, 2, 2, 2, 76, 76,
- 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93, 93, 93, 70, 70,
- 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 70, 70, 70, 70,
- 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 73, 73, 73, 73, 6, 2,
- 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 8, 8, 8, 1, 1,
- 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1,
- 0, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9,
- 9, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9, 9,
- 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 19, 6, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 1, 1,
- 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9,
- 2, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9,
- 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 2, 2,
- 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 19,
- 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0,
- 0, 0, 0, 0, 0, 2, 19, 19, 19, 19, 19, 2, 2, 2, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 2, 2, 2, 2, 0, 0,
- 0, 2, 2, 2, 2, 2, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0,
- 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 2, 55, 55,
- 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55, 55, 55, 61, 61,
- 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2, 2, 61, 61, 2,
- 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 13, 13,
- 13, 13, 13, 13, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0,
- 0, 0, 0, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 1, 1, 1, 1, 12, 12, 13, 13, 13, 13, 0, 0, 0, 0, 2, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 0, 0, 17, 17, 17, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17,
- 17, 17, 17, 17, 17, 0, 13, 13, 13, 13, 13, 2, 2, 2, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2, 39, 39,
- 39, 39, 39, 39, 39, 2, 86, 86, 86, 86, 86, 86, 86, 86, 77, 77,
- 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 2, 2, 2, 2, 79, 79,
- 79, 79, 79, 79, 79, 79, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0,
- 0, 19, 19, 19, 19, 19, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 2, 2, 2, 0, 0,
- 2, 2, 2, 2, 2, 2, 65, 65, 65, 65, 65, 65, 65, 65, 75, 75,
- 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 2, 2, 2, 2,
- 2, 2, 2, 2, 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 74, 74,
- 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 74, 12, 12, 12, 12, 12, 2, 2, 2, 84, 84,
- 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 2, 0, 84, 84,
- 2, 2, 2, 2, 84, 84, 33, 33, 33, 33, 33, 33, 33, 2, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 68, 68,
- 68, 68, 68, 68, 2, 2, 68, 68, 2, 2, 68, 68, 68, 68, 92, 92,
- 92, 92, 92, 92, 92, 92, 92, 92, 92, 2, 2, 2, 2, 2, 2, 2,
- 2, 92, 92, 92, 92, 92, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 2, 2, 30, 30, 30, 30, 30, 30, 2, 19, 19,
- 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 19, 19, 19, 19,
- 0, 0, 2, 2, 2, 2, 87, 87, 87, 87, 87, 87, 2, 2, 87, 87,
- 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2,
- 2, 12, 12, 12, 12, 12, 13, 13, 2, 2, 2, 2, 2, 2, 19, 19,
- 19, 19, 19, 19, 19, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2,
- 2, 2, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14,
- 14, 14, 14, 2, 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 3, 3,
- 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1,
- 1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0, 0, 0, 3, 3,
- 3, 3, 3, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 2, 2,
- 12, 12, 12, 12, 12, 12, 2, 2, 12, 12, 12, 2, 2, 2, 2, 0,
- 0, 0, 0, 0, 2, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49, 49,
- 49, 2, 49, 49, 2, 49, 49, 49, 49, 49, 49, 49, 2, 2, 49, 49,
- 49, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
- 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 2,
- 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 2, 2, 2, 67, 67,
- 67, 67, 67, 67, 67, 67, 67, 2, 2, 2, 2, 2, 2, 2, 1, 0,
- 0, 0, 0, 0, 0, 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 42, 42, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,118,118,
- 118,118,118,118,118,118,118,118,118, 2, 2, 2, 2, 2, 53, 53,
- 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 2, 53, 59, 59,
- 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 2, 2, 2, 2, 59, 59,
- 59, 59, 59, 59, 2, 2, 40, 40, 40, 40, 40, 40, 40, 40, 51, 51,
- 51, 51, 51, 51, 51, 51, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50, 2, 2, 50, 50, 2, 2, 2, 2, 2, 2,135,135,
- 135,135,135,135,135,135,135,135,135,135, 2, 2, 2, 2,106,106,
- 106,106,106,106,106,106,104,104,104,104,104,104,104,104,104,104,
- 104,104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,104,110,110,
- 110,110,110,110,110,110,110,110,110,110,110,110,110, 2,110,110,
- 110,110,110,110, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2, 2, 47, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 2, 81,120,120,
- 120,120,120,120,120,120,116,116,116,116,116,116,116,116,116,116,
- 116,116,116,116,116, 2, 2, 2, 2, 2, 2, 2, 2,116,128,128,
- 128,128,128,128,128,128,128,128,128, 2,128,128, 2, 2, 2, 2,
- 2,128,128,128,128,128, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 2, 2, 2, 66, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 2, 2, 2, 2, 2, 72, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97,
- 97, 97, 97, 97, 97, 97, 2, 2, 2, 2, 97, 97, 97, 97, 2, 2,
- 97, 97, 97, 97, 97, 97, 57, 57, 57, 57, 2, 57, 57, 2, 2, 2,
- 2, 2, 57, 57, 57, 57, 57, 57, 57, 57, 2, 57, 57, 57, 2, 57,
- 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
- 57, 57, 57, 57, 2, 2, 57, 57, 57, 2, 2, 2, 2, 57, 57, 2,
- 2, 2, 2, 2, 2, 2, 88, 88, 88, 88, 88, 88, 88, 88,117,117,
- 117,117,117,117,117,117,112,112,112,112,112,112,112,112,112,112,
- 112,112,112,112,112, 2, 2, 2, 2,112,112,112,112,112, 78, 78,
- 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 2, 2, 2, 78,
- 78, 78, 78, 78, 78, 78, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
- 83, 83, 83, 83, 2, 2, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
- 82, 2, 2, 2, 2, 2,122,122,122,122,122,122,122,122,122,122,
- 2, 2, 2, 2, 2, 2, 2,122,122,122,122, 2, 2, 2, 2,122,
- 122,122,122,122,122,122, 89, 89, 89, 89, 89, 89, 89, 89, 89, 2,
- 2, 2, 2, 2, 2, 2,130,130,130,130,130,130,130,130,130,130,
- 130, 2, 2, 2, 2, 2, 2, 2,130,130,130,130,130,130,144,144,
- 144,144,144,144,144,144,144,144, 2, 2, 2, 2, 2, 2, 3, 3,
- 3, 3, 3, 3, 3, 2,156,156,156,156,156,156,156,156,156,156,
- 2,156,156,156, 2, 2,156,156, 2, 2, 2, 2, 2, 2,147,147,
- 147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,
- 2, 2, 2, 2, 2, 2,153,153,153,153,153,153,153,153,153,153,
- 153,153, 2, 2, 2, 2,149,149,149,149,149,149,149,149,149,149,
- 149,149,149,149,149, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 2, 2,
- 2, 2, 2, 2, 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2,101,101,
- 101,101,101,101,101,101,101, 2, 2, 2, 2, 2, 2, 2,101,101,
- 2, 2, 2, 2, 2, 2, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
- 96, 96, 96, 2, 96, 96,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111, 2,100,100,100,100,100,100,100,100, 2, 36,
- 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2,108,108,
- 108,108,108,108,108,108,108,108, 2,108,108,108,108,108,108,108,
- 108,108,108,108,108, 2,129,129,129,129,129,129,129, 2,129, 2,
- 129,129,129,129, 2,129,129,129,129,129,129,129,129,129,129,129,
- 129,129,129,129, 2,129,129,129, 2, 2, 2, 2, 2, 2,109,109,
- 109,109,109,109,109,109,109,109,109, 2, 2, 2, 2, 2,109,109,
- 2, 2, 2, 2, 2, 2,107,107,107,107, 2,107,107,107,107,107,
- 107,107,107, 2, 2,107,107, 2, 2,107,107,107,107,107,107,107,
- 107,107,107,107,107,107,107, 2,107,107,107,107,107,107,107, 2,
- 107,107, 2,107,107,107,107,107, 2, 1,107,107,107,107,107, 2,
- 2,107,107,107, 2, 2,107, 2, 2, 2, 2, 2, 2,107, 2, 2,
- 2, 2, 2,107,107,107,107,107,107,107, 2, 2,107,107,107,107,
- 107,107,107, 2, 2, 2,137,137,137,137,137,137,137,137,137,137,
- 137,137, 2,137,137,137,137,137, 2, 2, 2, 2, 2, 2,124,124,
- 124,124,124,124,124,124,124,124, 2, 2, 2, 2, 2, 2,123,123,
- 123,123,123,123,123,123,123,123,123,123,123,123, 2, 2,114,114,
- 114,114,114,114,114,114,114,114,114,114,114, 2, 2, 2,114,114,
- 2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 2, 2, 2,102,102,
- 102,102,102,102,102,102,102, 2, 2, 2, 2, 2, 2, 2,102,102,
- 2, 2, 2, 2, 2, 2,126,126,126,126,126,126,126,126,126,126,
- 126, 2, 2,126,126,126,126,126,126,126, 2, 2, 2, 2,142,142,
- 142,142,142,142,142,142,142,142,142,142, 2, 2, 2, 2,125,125,
- 125,125,125,125,125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2,125,154,154,154,154,154,154,154, 2, 2,154,
- 2, 2,154,154,154,154,154,154,154,154, 2,154,154, 2,154,154,
- 154,154,154,154,154,154,154,154,154,154,154,154, 2,154,154, 2,
- 2,154,154,154,154,154,154,154, 2, 2, 2, 2, 2, 2,150,150,
- 150,150,150,150,150,150, 2, 2,150,150,150,150,150,150,150,150,
- 150,150,150, 2, 2, 2,141,141,141,141,141,141,141,141,140,140,
- 140,140,140,140,140,140,140,140,140, 2, 2, 2, 2, 2,121,121,
- 121,121,121,121,121,121,121, 2, 2, 2, 2, 2, 2, 2,133,133,
- 133,133,133,133,133,133,133, 2,133,133,133,133,133,133,133,133,
- 133,133,133,133,133, 2,133,133,133,133,133,133, 2, 2,133,133,
- 133,133,133, 2, 2, 2,134,134,134,134,134,134,134,134, 2, 2,
- 134,134,134,134,134,134, 2,134,134,134,134,134,134,134,134,134,
- 134,134,134,134,134, 2,138,138,138,138,138,138,138, 2,138,138,
- 2,138,138,138,138,138,138,138,138,138,138,138,138,138, 2, 2,
- 138, 2,138,138, 2,138,138,138, 2, 2, 2, 2, 2, 2,143,143,
- 143,143,143,143, 2,143,143, 2,143,143,143,143,143,143,143,143,
- 143,143,143,143,143,143,143,143,143,143,143,143,143, 2,143,143,
- 2,143,143,143,143,143,143, 2, 2, 2, 2, 2, 2, 2,143,143,
- 2, 2, 2, 2, 2, 2,145,145,145,145,145,145,145,145,145, 2,
- 2, 2, 2, 2, 2, 2, 86, 2, 2, 2, 2, 2, 2, 2, 22, 22,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 63, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, 63, 63,
- 63, 63, 63, 63, 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 63, 63,
- 63, 63, 2, 2, 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 80, 2, 80, 2, 2, 2, 2, 2, 2, 2,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127, 2, 79, 2,
- 2, 2, 2, 2, 2, 2,115,115,115,115,115,115,115,115,115,115,
- 115,115,115,115,115, 2,115,115, 2, 2, 2, 2,115,115,103,103,
- 103,103,103,103,103,103,103,103,103,103,103,103, 2, 2,119,119,
- 119,119,119,119,119,119,119,119,119,119,119,119, 2, 2,119,119,
- 2,119,119,119,119,119, 2, 2, 2, 2, 2,119,119,119,146,146,
- 146,146,146,146,146,146,146,146,146, 2, 2, 2, 2, 2, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2, 2, 99, 2, 2,
- 2, 2, 2, 2, 2, 99,136,139, 0, 0,155, 2, 2, 2,136,136,
- 136,136,136,136,136,136,155,155,155,155,155,155,155,155,155,155,
- 155,155,155,155, 2, 2,136, 2, 2, 2, 2, 2, 2, 2, 17, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 17, 17, 17, 17,139,139,139,139,139,139,139,139,139,139,
- 139,139, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105,
- 105, 2, 2, 2, 2, 2,105,105,105,105,105, 2, 2, 2,105, 2,
- 2, 2, 2, 2, 2, 2,105,105, 2, 2,105,105,105,105, 0, 0,
- 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0,131,131,131,131,131,131,131,131,131,131,
- 131,131, 2, 2, 2, 2, 2, 2, 2,131,131,131,131,131, 2,131,
- 131,131,131,131,131,131, 56, 2, 2, 56, 56, 56, 56, 56, 56, 56,
- 2, 56, 56, 2, 56, 56, 56, 56, 56, 2, 2, 2, 2, 2,151,151,
- 151,151,151,151,151,151,151,151,151,151,151, 2, 2, 2,151,151,
- 151,151,151,151, 2, 2,151,151, 2, 2, 2, 2,151,151,152,152,
- 152,152,152,152,152,152,152,152, 2, 2, 2, 2, 2,152,113,113,
- 113,113,113,113,113,113,113,113,113,113,113, 2, 2,113,113,113,
- 113,113,113,113,113, 2,132,132,132,132,132,132,132,132,132,132,
- 132,132, 2, 2, 2, 2,132,132, 2, 2, 2, 2,132,132, 3, 3,
- 3, 3, 2, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3,
- 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3,
- 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 2,
- 2, 2, 2, 2, 0, 0, 15, 0, 0, 2, 2, 2, 2, 2, 13, 2,
- 2, 2, 2, 2, 2, 2, 13, 13, 13, 2, 2, 2, 2, 2, 2, 0,
- 2, 2, 2, 2, 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 9, 9, 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 16, 17, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19,
- 20, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 25, 26, 27, 28,
- 29, 30, 0, 0, 31, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0,
- 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0,
- 46, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
- 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0,
- 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65,
- 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 67, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99,100,101,102,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0,105,106, 0,
- 107, 0, 0, 0,108, 0,109, 0,110, 0,111,112,113, 0,114, 0,
- 0, 0,115, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,118,119,120,121, 0,122,123,124,
- 125,126, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,128,129,130,131,132,133,134,135,136,137,138,139,
- 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,
- 156,157, 0, 0, 0,158,159,160,161, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,162,163, 0,
- 0, 0, 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 0, 0, 0, 0,171,
- 172, 0, 0, 0,173,174,175,176,177,178,179,180,181,182,183,184,
- 185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,
- 201,202,203,204,205,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 3, 4,
-};
-static const uint16_t
-_hb_ucd_u16[9080] =
-{
- 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
- 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
- 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31,
- 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39,
- 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13,
- 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50,
- 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58,
- 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66,
- 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 74, 75, 76, 32,
- 77, 48, 48, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 84, 85, 92, 93, 94, 95, 96, 97, 98, 85, 99, 100, 101, 89, 102,
- 103, 84, 85, 104, 105, 106, 89, 107, 108, 109, 110, 111, 112, 113, 95, 114,
- 115, 116, 85, 117, 118, 119, 89, 120, 121, 116, 85, 122, 123, 124, 89, 125,
- 126, 116, 48, 127, 128, 129, 89, 130, 131, 132, 48, 133, 134, 135, 95, 136,
- 137, 48, 48, 138, 139, 140, 72, 72, 141, 48, 142, 143, 144, 145, 72, 72,
- 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 72, 72,
- 48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 168, 169, 48, 48,
- 168, 48, 48, 170, 171, 172, 48, 48, 48, 171, 48, 48, 48, 173, 174, 175,
- 48, 176, 9, 9, 9, 9, 9, 177, 178, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183,
- 184, 185, 48, 186, 48, 187, 184, 188, 48, 48, 48, 189, 190, 191, 192, 193,
- 194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199,
- 48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209,
- 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 72, 72, 72,
- 217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225,
- 48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235,
- 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 240,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 241, 13, 13, 13, 13, 13, 13,
- 242, 243, 242, 242, 243, 244, 242, 245, 246, 246, 246, 247, 248, 249, 250, 251,
- 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 262, 72, 263, 264, 216,
- 265, 266, 267, 268, 269, 270, 271, 271, 272, 273, 274, 209, 275, 276, 209, 277,
- 278, 278, 278, 278, 278, 278, 278, 278, 279, 209, 280, 209, 209, 209, 209, 281,
- 209, 282, 278, 283, 209, 284, 285, 209, 209, 209, 286, 72, 287, 72, 270, 270,
- 270, 288, 209, 209, 209, 209, 289, 270, 209, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 209, 290, 291, 209, 209, 292, 209, 209, 209, 209, 209, 209, 293, 209,
- 209, 209, 209, 209, 209, 209, 294, 295, 270, 296, 209, 209, 297, 278, 298, 278,
- 299, 300, 278, 278, 278, 301, 278, 302, 209, 209, 209, 278, 303, 209, 209, 304,
- 209, 305, 209, 209, 209, 209, 209, 209, 9, 9, 306, 11, 11, 307, 308, 309,
- 13, 13, 13, 13, 13, 13, 310, 311, 11, 11, 312, 48, 48, 48, 313, 314,
- 48, 315, 316, 316, 316, 316, 32, 32, 317, 318, 319, 320, 321, 322, 72, 72,
- 209, 323, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 325, 72, 326,
- 327, 328, 329, 330, 137, 48, 48, 48, 48, 331, 178, 48, 48, 48, 48, 332,
- 333, 48, 48, 137, 48, 48, 48, 48, 200, 334, 48, 48, 209, 209, 324, 48,
- 209, 335, 336, 209, 337, 338, 209, 209, 336, 209, 209, 338, 209, 209, 209, 209,
- 48, 48, 48, 48, 209, 209, 209, 209, 48, 48, 48, 48, 48, 48, 48, 151,
- 48, 339, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 286, 48, 48, 229,
- 340, 48, 341, 72, 13, 13, 342, 343, 13, 344, 48, 48, 48, 48, 345, 346,
- 31, 347, 348, 349, 13, 13, 13, 350, 351, 352, 353, 354, 355, 72, 72, 356,
- 357, 48, 358, 359, 48, 48, 48, 360, 361, 48, 48, 362, 363, 192, 32, 364,
- 64, 48, 365, 48, 366, 367, 48, 151, 77, 48, 48, 368, 369, 370, 371, 372,
- 48, 48, 373, 374, 375, 376, 48, 377, 48, 48, 48, 378, 379, 380, 381, 382,
- 383, 384, 316, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192,
- 48, 48, 388, 48, 389, 48, 48, 206, 390, 390, 390, 390, 390, 390, 390, 390,
- 391, 391, 391, 391, 391, 391, 391, 391, 48, 48, 48, 48, 48, 48, 204, 48,
- 48, 48, 48, 48, 48, 207, 72, 72, 392, 393, 394, 395, 396, 48, 48, 48,
- 48, 48, 48, 397, 398, 399, 48, 48, 48, 48, 48, 400, 72, 48, 48, 48,
- 48, 401, 48, 48, 74, 72, 72, 402, 32, 403, 32, 404, 405, 406, 407, 73,
- 48, 48, 48, 48, 48, 48, 48, 408, 409, 2, 3, 4, 5, 410, 411, 412,
- 48, 413, 48, 200, 414, 415, 416, 417, 418, 48, 172, 419, 204, 204, 72, 72,
- 48, 48, 48, 48, 48, 48, 48, 71, 420, 270, 270, 421, 271, 271, 271, 422,
- 423, 424, 425, 72, 72, 209, 209, 426, 72, 72, 72, 72, 72, 72, 72, 72,
- 48, 151, 48, 48, 48, 101, 427, 428, 48, 48, 429, 48, 430, 48, 48, 431,
- 48, 432, 48, 48, 433, 434, 72, 72, 9, 9, 435, 11, 11, 48, 48, 48,
- 48, 204, 192, 9, 9, 436, 11, 437, 48, 48, 74, 48, 48, 48, 438, 72,
- 48, 48, 48, 315, 48, 199, 74, 72, 439, 48, 48, 440, 48, 441, 48, 442,
- 48, 200, 443, 72, 72, 72, 48, 444, 48, 445, 48, 446, 72, 72, 72, 72,
- 48, 48, 48, 447, 270, 448, 270, 270, 449, 450, 48, 451, 452, 453, 48, 454,
- 48, 455, 72, 72, 456, 48, 457, 458, 48, 48, 48, 459, 48, 460, 48, 461,
- 48, 462, 463, 72, 72, 72, 72, 72, 48, 48, 48, 48, 196, 72, 72, 72,
- 9, 9, 9, 464, 11, 11, 11, 465, 48, 48, 466, 192, 72, 72, 72, 72,
- 72, 72, 72, 72, 72, 72, 270, 467, 48, 48, 468, 469, 72, 72, 72, 72,
- 48, 455, 470, 48, 62, 471, 72, 72, 72, 72, 72, 48, 472, 72, 48, 315,
- 473, 48, 48, 474, 475, 448, 476, 477, 222, 48, 48, 478, 479, 48, 196, 192,
- 480, 48, 481, 482, 483, 48, 48, 484, 222, 48, 48, 485, 486, 487, 488, 489,
- 48, 98, 490, 491, 72, 72, 72, 72, 492, 493, 494, 48, 48, 495, 496, 192,
- 497, 84, 85, 498, 499, 500, 501, 502, 48, 48, 48, 503, 504, 505, 469, 72,
- 48, 48, 48, 506, 507, 192, 72, 72, 48, 48, 508, 509, 510, 511, 72, 72,
- 48, 48, 48, 512, 513, 192, 514, 72, 48, 48, 515, 516, 192, 72, 72, 72,
- 48, 173, 517, 518, 72, 72, 72, 72, 48, 48, 490, 519, 72, 72, 72, 72,
- 72, 72, 9, 9, 11, 11, 148, 520, 521, 522, 48, 523, 524, 192, 72, 72,
- 72, 72, 525, 48, 48, 526, 527, 72, 528, 48, 48, 529, 530, 531, 48, 48,
- 532, 533, 534, 72, 48, 48, 48, 196, 85, 48, 508, 535, 536, 148, 175, 537,
- 48, 538, 539, 540, 72, 72, 72, 72, 541, 48, 48, 542, 543, 192, 544, 48,
- 545, 546, 192, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 547,
- 72, 72, 72, 101, 270, 548, 549, 550, 48, 207, 72, 72, 72, 72, 72, 72,
- 271, 271, 271, 271, 271, 271, 551, 552, 48, 48, 48, 48, 388, 72, 72, 72,
- 48, 48, 200, 553, 72, 72, 72, 72, 48, 48, 48, 48, 315, 72, 72, 72,
- 48, 48, 48, 196, 48, 200, 370, 72, 72, 72, 72, 72, 72, 48, 204, 554,
- 48, 48, 48, 555, 556, 557, 558, 559, 48, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 72, 9, 9, 11, 11, 270, 560, 72, 72, 72, 72, 72, 72,
- 48, 48, 48, 48, 561, 562, 563, 563, 564, 565, 72, 72, 72, 72, 566, 567,
- 48, 48, 48, 48, 48, 48, 48, 74, 48, 48, 48, 48, 48, 199, 72, 72,
- 196, 72, 72, 72, 72, 72, 72, 72, 48, 200, 72, 72, 72, 568, 569, 48,
- 48, 48, 48, 48, 48, 48, 48, 206, 48, 48, 48, 48, 48, 48, 71, 151,
- 196, 570, 571, 72, 72, 72, 72, 72, 209, 209, 209, 209, 209, 209, 209, 325,
- 209, 209, 572, 209, 209, 209, 573, 574, 575, 209, 576, 209, 209, 209, 577, 72,
- 209, 209, 209, 209, 578, 72, 72, 72, 72, 72, 72, 72, 72, 72, 270, 579,
- 209, 209, 209, 209, 209, 286, 270, 452, 9, 580, 11, 581, 582, 583, 242, 9,
- 584, 585, 586, 587, 588, 9, 580, 11, 589, 590, 11, 591, 592, 593, 594, 9,
- 595, 11, 9, 580, 11, 581, 582, 11, 242, 9, 584, 594, 9, 595, 11, 9,
- 580, 11, 596, 9, 597, 598, 599, 600, 11, 601, 9, 602, 603, 604, 605, 11,
- 606, 9, 607, 11, 608, 609, 609, 609, 32, 32, 32, 610, 32, 32, 611, 612,
- 613, 614, 45, 72, 72, 72, 72, 72, 615, 616, 617, 72, 72, 72, 72, 72,
- 48, 48, 151, 618, 619, 72, 72, 72, 72, 72, 72, 72, 48, 48, 620, 621,
- 48, 48, 48, 48, 622, 623, 72, 72, 9, 9, 584, 11, 624, 370, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 488, 270, 270, 625, 626, 72, 72, 72, 72,
- 488, 270, 627, 628, 72, 72, 72, 72, 629, 48, 630, 631, 632, 633, 634, 635,
- 636, 206, 637, 206, 72, 72, 72, 638, 209, 209, 326, 209, 209, 209, 209, 209,
- 209, 324, 335, 639, 639, 639, 209, 325, 640, 209, 209, 209, 209, 209, 209, 209,
- 209, 209, 641, 72, 72, 72, 642, 209, 643, 209, 209, 326, 577, 644, 325, 72,
- 209, 209, 209, 209, 209, 209, 209, 645, 209, 209, 209, 209, 209, 646, 424, 424,
- 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 577, 326, 72,
- 326, 209, 209, 209, 646, 176, 209, 209, 646, 209, 641, 644, 72, 72, 72, 72,
- 209, 209, 209, 209, 209, 209, 209, 647, 209, 209, 209, 209, 648, 209, 209, 209,
- 209, 209, 209, 209, 209, 324, 641, 649, 286, 209, 577, 286, 643, 286, 72, 72,
- 209, 650, 209, 209, 287, 72, 72, 192, 48, 48, 48, 48, 48, 204, 72, 72,
- 48, 48, 48, 205, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48,
- 48, 48, 469, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 101, 72,
- 48, 204, 72, 72, 72, 72, 72, 72, 48, 48, 48, 48, 71, 72, 72, 72,
- 651, 72, 652, 652, 652, 652, 652, 652, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 72, 391, 391, 391, 391, 391, 391, 391, 653,
- 391, 391, 391, 391, 391, 391, 391, 654, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 2, 3, 1, 2, 2, 3, 0, 0, 0, 0, 0, 4, 0, 4,
- 2, 2, 5, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,
- 0, 0, 0, 0, 7, 8, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 10, 11, 12, 13, 14, 14, 15, 14, 14, 14,
- 14, 14, 14, 14, 16, 17, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 19, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20, 21,
- 21, 21, 22, 20, 21, 21, 21, 21, 21, 23, 24, 25, 25, 25, 25, 25,
- 25, 26, 25, 25, 25, 27, 28, 26, 29, 30, 31, 32, 31, 31, 31, 31,
- 33, 34, 35, 31, 31, 31, 36, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 29, 31, 31, 31, 31, 37, 38, 37, 37, 37, 37, 37, 37,
- 37, 39, 31, 31, 31, 31, 31, 31, 40, 40, 40, 40, 40, 40, 41, 26,
- 42, 42, 42, 42, 42, 42, 42, 43, 44, 44, 44, 44, 44, 45, 44, 46,
- 47, 47, 47, 48, 37, 49, 26, 26, 26, 26, 26, 26, 31, 31, 50, 31,
- 31, 26, 51, 31, 52, 31, 31, 31, 53, 53, 53, 53, 53, 53, 53, 53,
- 53, 53, 54, 53, 55, 53, 53, 53, 56, 57, 58, 59, 59, 60, 61, 62,
- 57, 63, 64, 65, 66, 59, 59, 67, 68, 69, 70, 71, 71, 72, 73, 74,
- 69, 75, 76, 77, 78, 71, 79, 26, 80, 81, 82, 83, 83, 84, 85, 86,
- 81, 87, 88, 26, 89, 83, 90, 91, 92, 93, 94, 95, 95, 96, 97, 98,
- 93, 99, 100, 101, 102, 95, 95, 26, 103, 104, 105, 106, 107, 104, 108, 109,
- 104, 105, 110, 26, 111, 108, 108, 112, 113, 114, 115, 113, 113, 115, 113, 116,
- 114, 117, 118, 119, 120, 113, 121, 113, 122, 123, 124, 122, 122, 124, 125, 126,
- 123, 127, 128, 129, 130, 122, 131, 26, 132, 133, 134, 132, 132, 132, 132, 132,
- 133, 134, 135, 132, 136, 132, 132, 132, 137, 138, 139, 140, 138, 138, 141, 142,
- 139, 143, 144, 138, 145, 138, 146, 26, 147, 148, 148, 148, 148, 148, 148, 149,
- 148, 148, 148, 150, 26, 26, 26, 26, 151, 152, 153, 153, 154, 153, 153, 155,
- 156, 155, 153, 157, 26, 26, 26, 26, 158, 158, 158, 158, 158, 158, 158, 158,
- 158, 159, 158, 158, 158, 160, 159, 158, 158, 158, 158, 159, 158, 158, 158, 161,
- 158, 161, 162, 163, 26, 26, 26, 26, 164, 164, 164, 164, 164, 164, 164, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165,
- 166, 167, 165, 165, 165, 165, 165, 168, 169, 169, 169, 169, 169, 169, 169, 169,
- 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170,
- 170, 171, 172, 171, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 171, 172,
- 171, 170, 172, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170,
- 170, 170, 170, 173, 170, 170, 170, 174, 170, 170, 170, 175, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 180, 181, 181, 181, 181,
- 181, 181, 181, 181, 181, 182, 181, 183, 184, 185, 186, 26, 187, 187, 188, 26,
- 189, 189, 190, 26, 191, 192, 193, 26, 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 195, 194, 196, 194, 196, 197, 198, 199, 200, 199, 199, 199, 199,
- 199, 199, 199, 199, 199, 199, 199, 201, 199, 199, 199, 199, 199, 202, 178, 178,
- 178, 178, 178, 178, 178, 178, 203, 26, 204, 204, 204, 205, 204, 206, 204, 206,
- 207, 204, 208, 208, 208, 209, 210, 26, 211, 211, 211, 211, 211, 212, 211, 211,
- 211, 213, 211, 214, 194, 194, 194, 194, 215, 215, 215, 216, 217, 217, 217, 217,
- 217, 217, 217, 218, 217, 217, 217, 219, 217, 220, 217, 220, 217, 221, 9, 9,
- 222, 26, 26, 26, 26, 26, 26, 26, 223, 223, 223, 223, 223, 223, 223, 223,
- 223, 224, 223, 223, 223, 223, 223, 225, 226, 226, 226, 226, 226, 226, 226, 226,
- 227, 227, 227, 227, 227, 227, 228, 229, 230, 230, 230, 230, 230, 230, 230, 231,
- 230, 232, 233, 233, 233, 233, 233, 233, 18, 234, 165, 165, 165, 165, 165, 235,
- 226, 26, 236, 9, 237, 238, 239, 240, 2, 2, 2, 2, 241, 242, 2, 2,
- 2, 2, 2, 243, 244, 245, 2, 246, 2, 2, 2, 2, 2, 2, 2, 247,
- 9, 9, 9, 9, 9, 9, 9, 248, 14, 14, 249, 249, 14, 14, 14, 14,
- 249, 249, 14, 250, 14, 14, 14, 249, 14, 14, 14, 14, 14, 14, 251, 14,
- 251, 14, 252, 253, 14, 14, 254, 255, 0, 256, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 257, 0, 258, 259, 0, 260, 2, 261, 0, 0, 0, 0,
- 26, 26, 9, 9, 9, 9, 222, 26, 0, 0, 0, 0, 262, 263, 4, 0,
- 0, 264, 0, 0, 2, 2, 2, 2, 2, 265, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 26, 26, 26,
- 0, 266, 26, 26, 0, 0, 0, 0, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 267, 267, 267, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, 271, 270, 270,
- 270, 270, 270, 271, 2, 2, 2, 2, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 272, 273, 165, 165, 165, 165, 166, 167, 274, 274,
- 274, 274, 274, 274, 274, 275, 276, 275, 170, 170, 172, 26, 172, 172, 172, 172,
- 172, 172, 172, 172, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 266, 26, 26, 26, 26, 26, 277, 277, 277, 278, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 279, 26, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 280, 26, 26, 26, 0, 281, 282, 0, 0, 0, 283, 284, 0, 285,
- 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 289, 290, 291, 291, 291,
- 291, 291, 291, 291, 291, 291, 291, 292, 293, 294, 294, 294, 294, 294, 295, 169,
- 169, 169, 169, 169, 169, 169, 169, 169, 169, 296, 0, 0, 294, 294, 294, 294,
- 0, 0, 0, 0, 281, 26, 291, 291, 169, 169, 169, 296, 0, 0, 0, 0,
- 0, 0, 0, 0, 169, 169, 169, 297, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 291, 291, 291, 291, 291, 298, 291, 291, 291, 291, 291, 291, 291, 291,
- 291, 291, 291, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277,
- 0, 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 299, 300, 300, 300, 300, 300, 300, 300, 300,
- 300, 300, 300, 300, 300, 300, 300, 300, 300, 301, 300, 300, 300, 300, 300, 300,
- 302, 26, 303, 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, 304, 304, 304,
- 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 305, 26, 26,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 306, 306, 306, 306,
- 306, 306, 306, 306, 306, 306, 306, 26, 0, 0, 0, 0, 307, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 308, 2, 2, 2, 2, 2, 2,
- 309, 310, 26, 26, 26, 26, 311, 2, 312, 312, 312, 312, 312, 313, 0, 314,
- 315, 315, 315, 315, 315, 315, 315, 26, 316, 316, 316, 316, 316, 316, 316, 316,
- 317, 318, 316, 319, 53, 53, 53, 53, 320, 320, 320, 320, 320, 321, 322, 322,
- 322, 322, 323, 324, 169, 169, 169, 325, 326, 326, 326, 326, 326, 326, 326, 326,
- 326, 327, 326, 328, 164, 164, 164, 329, 330, 330, 330, 330, 330, 330, 331, 26,
- 330, 332, 330, 333, 164, 164, 164, 164, 334, 334, 334, 334, 334, 334, 334, 334,
- 335, 26, 26, 336, 337, 337, 338, 26, 339, 339, 339, 26, 172, 172, 2, 2,
- 2, 2, 2, 340, 341, 342, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 337, 337, 337, 337, 337, 343, 337, 344, 169, 169, 169, 169, 345, 26, 169, 169,
- 296, 346, 169, 169, 169, 169, 169, 345, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 280, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 347, 26, 26, 26, 26, 348, 26, 349, 350, 25, 25, 351, 352,
- 353, 25, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 354, 26, 51, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 355,
- 26, 26, 31, 31, 31, 31, 31, 31, 31, 31, 356, 31, 31, 31, 31, 31,
- 31, 26, 26, 26, 26, 26, 31, 357, 9, 9, 0, 314, 9, 358, 0, 0,
- 0, 0, 359, 0, 260, 281, 50, 31, 31, 31, 31, 31, 31, 31, 31, 31,
- 31, 31, 31, 31, 31, 31, 31, 360, 361, 0, 0, 0, 1, 2, 2, 3,
- 1, 2, 2, 3, 362, 291, 290, 291, 291, 291, 291, 363, 169, 169, 169, 296,
- 364, 364, 364, 365, 260, 260, 26, 366, 367, 368, 367, 367, 369, 367, 367, 370,
- 367, 371, 367, 371, 26, 26, 26, 26, 367, 367, 367, 367, 367, 367, 367, 367,
- 367, 367, 367, 367, 367, 367, 367, 372, 373, 0, 0, 0, 0, 0, 374, 0,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 255, 0, 375, 376, 26, 26, 26,
- 26, 26, 0, 0, 0, 0, 0, 377, 378, 378, 378, 379, 380, 380, 380, 380,
- 380, 380, 381, 26, 382, 0, 0, 281, 383, 383, 383, 383, 384, 385, 386, 386,
- 386, 387, 388, 388, 388, 388, 388, 389, 390, 390, 390, 391, 392, 392, 392, 392,
- 393, 392, 394, 26, 26, 26, 26, 26, 395, 395, 395, 395, 395, 395, 395, 395,
- 395, 395, 396, 396, 396, 396, 396, 396, 397, 397, 397, 398, 397, 399, 400, 400,
- 400, 400, 401, 400, 400, 400, 400, 401, 402, 402, 402, 402, 402, 26, 403, 403,
- 403, 403, 403, 403, 404, 405, 26, 26, 406, 406, 406, 406, 406, 406, 406, 406,
- 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 407, 26,
- 406, 406, 408, 26, 406, 26, 26, 26, 409, 410, 411, 411, 411, 411, 412, 413,
- 414, 414, 415, 414, 416, 416, 416, 416, 417, 417, 417, 418, 419, 417, 26, 26,
- 26, 26, 26, 26, 420, 420, 421, 422, 423, 423, 423, 424, 425, 425, 425, 426,
- 26, 26, 26, 26, 26, 26, 26, 26, 427, 427, 427, 427, 428, 428, 428, 429,
- 428, 428, 430, 428, 428, 428, 428, 428, 431, 432, 433, 434, 435, 435, 436, 437,
- 435, 438, 435, 438, 439, 439, 439, 439, 440, 440, 440, 440, 26, 26, 26, 26,
- 441, 441, 441, 441, 442, 443, 442, 26, 444, 444, 444, 444, 444, 444, 445, 446,
- 447, 447, 448, 447, 449, 449, 450, 449, 451, 451, 452, 453, 26, 454, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 455, 455, 455, 455, 455, 455, 455, 455,
- 455, 456, 26, 26, 26, 26, 26, 26, 457, 457, 457, 457, 457, 457, 458, 26,
- 457, 457, 457, 457, 457, 457, 458, 459, 460, 460, 460, 460, 460, 26, 460, 461,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 31, 31, 31, 462, 463, 463, 463, 463, 463, 464, 465, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 466, 466, 466, 466, 466, 26, 467, 467,
- 467, 467, 467, 468, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 469, 469,
- 469, 470, 26, 26, 471, 471, 472, 26, 473, 473, 473, 473, 473, 473, 473, 473,
- 473, 474, 475, 473, 473, 473, 26, 476, 477, 477, 477, 477, 477, 477, 477, 477,
- 478, 479, 480, 480, 480, 481, 480, 482, 483, 483, 483, 483, 483, 483, 484, 483,
- 483, 26, 485, 485, 485, 485, 486, 26, 487, 487, 487, 487, 487, 487, 487, 487,
- 487, 487, 487, 487, 488, 138, 489, 26, 490, 490, 491, 490, 490, 490, 490, 492,
- 26, 26, 26, 26, 26, 26, 26, 26, 493, 494, 495, 496, 495, 497, 498, 498,
- 498, 498, 498, 498, 498, 499, 498, 500, 501, 502, 503, 504, 504, 505, 506, 507,
- 502, 508, 509, 510, 511, 512, 512, 26, 513, 513, 513, 513, 513, 513, 513, 513,
- 513, 513, 513, 514, 515, 26, 26, 26, 516, 516, 516, 516, 516, 516, 516, 516,
- 516, 26, 516, 517, 26, 26, 26, 26, 518, 518, 518, 518, 518, 518, 519, 518,
- 518, 518, 518, 519, 26, 26, 26, 26, 520, 520, 520, 520, 520, 520, 520, 520,
- 521, 26, 520, 522, 199, 523, 26, 26, 524, 524, 524, 524, 524, 524, 524, 525,
- 524, 526, 26, 26, 26, 26, 26, 26, 527, 527, 527, 528, 527, 529, 527, 527,
- 26, 26, 26, 26, 26, 26, 26, 26, 530, 530, 530, 530, 530, 530, 530, 531,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 532, 532, 532, 532,
- 532, 532, 532, 532, 532, 532, 533, 534, 535, 536, 537, 538, 538, 538, 539, 540,
- 535, 26, 538, 541, 26, 26, 26, 26, 26, 26, 26, 26, 542, 543, 542, 542,
- 542, 542, 542, 543, 544, 26, 26, 26, 545, 545, 545, 545, 545, 545, 545, 545,
- 545, 26, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, 26, 26, 26,
- 548, 548, 548, 548, 548, 548, 548, 549, 550, 551, 550, 550, 550, 550, 552, 550,
- 553, 26, 550, 550, 550, 554, 555, 555, 555, 555, 556, 555, 555, 557, 558, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 559, 560, 561, 561, 561, 561, 559, 562,
- 561, 26, 561, 563, 564, 565, 566, 566, 566, 567, 568, 569, 566, 570, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 571, 571, 571, 572, 26, 26, 26, 26, 26, 26, 573, 26,
- 108, 108, 108, 108, 108, 108, 574, 575, 576, 576, 576, 576, 576, 576, 576, 576,
- 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 577, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 576, 576, 576, 576, 576, 576, 576, 576,
- 576, 576, 576, 576, 576, 578, 579, 26, 576, 576, 576, 576, 576, 576, 576, 576,
- 580, 26, 26, 26, 26, 26, 26, 26, 581, 581, 581, 581, 581, 581, 581, 581,
- 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 582, 581, 583,
- 26, 26, 26, 26, 26, 26, 26, 26, 584, 584, 584, 584, 584, 584, 584, 584,
- 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584,
- 585, 26, 26, 26, 26, 26, 26, 26, 306, 306, 306, 306, 306, 306, 306, 306,
- 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 586,
- 587, 587, 587, 588, 587, 589, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 590, 590, 590, 591, 591, 26, 592, 592, 592, 592, 592, 592, 592, 592,
- 593, 26, 592, 594, 594, 592, 592, 595, 592, 592, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 599, 598, 598, 598, 598, 598, 598, 598, 600, 598, 598, 26, 26, 26, 26,
- 26, 26, 26, 26, 601, 26, 347, 26, 602, 602, 602, 602, 602, 602, 602, 602,
- 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
- 602, 602, 602, 602, 602, 602, 602, 26, 603, 603, 603, 603, 603, 603, 603, 603,
- 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603,
- 603, 603, 604, 26, 26, 26, 26, 26, 602, 605, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 606, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 26, 26, 26, 26,
- 26, 26, 607, 26, 608, 26, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
- 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609,
- 609, 609, 609, 609, 609, 609, 609, 610, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 612, 611, 613, 611, 614, 611, 615, 281, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 616, 26, 0, 0, 0, 0, 260, 361, 0, 0,
- 0, 0, 0, 0, 617, 618, 0, 619, 620, 621, 0, 0, 0, 622, 0, 0,
- 0, 0, 0, 0, 0, 623, 26, 26, 14, 14, 14, 14, 14, 14, 14, 14,
- 249, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 0, 0, 281, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 260, 26, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 257, 624, 625, 0, 626,
- 627, 0, 0, 0, 0, 0, 0, 0, 269, 628, 257, 257, 0, 0, 0, 629,
- 630, 631, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 268, 0, 0, 0, 0, 0, 0, 633, 633, 633, 633, 633, 633, 633, 633,
- 633, 633, 633, 633, 633, 633, 633, 633, 633, 634, 26, 635, 636, 633, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 271, 270, 270, 637, 638, 639, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 640, 640, 640, 640, 640, 641, 640, 642,
- 640, 643, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 644, 644, 644, 644, 644, 644, 644, 645, 646, 646, 646, 646, 646, 646, 646, 646,
- 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
- 647, 646, 648, 26, 26, 26, 26, 26, 649, 649, 649, 649, 649, 649, 649, 649,
- 649, 650, 649, 651, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 361, 0, 0, 0, 0, 0, 0, 0, 375, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 361, 0, 0, 0, 0, 0, 0, 616,
- 26, 26, 26, 26, 26, 26, 26, 26, 652, 31, 31, 31, 653, 654, 655, 656,
- 657, 658, 653, 659, 653, 655, 655, 660, 31, 661, 31, 662, 663, 661, 31, 662,
- 26, 26, 26, 26, 26, 26, 354, 26, 0, 0, 0, 0, 0, 281, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 26, 0, 260, 361, 0,
- 361, 0, 361, 0, 0, 0, 616, 26, 0, 0, 0, 0, 0, 616, 26, 26,
- 26, 26, 26, 26, 664, 0, 0, 0, 665, 26, 0, 0, 0, 0, 0, 281,
- 0, 623, 314, 26, 616, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 26, 0, 375, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 281, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 623, 0, 281, 26, 26, 0, 281, 0, 0, 0, 0, 0, 0,
- 0, 26, 0, 314, 0, 0, 0, 0, 0, 26, 0, 0, 0, 616, 314, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 281, 26, 0, 616, 375, 266, 260, 26, 0, 0, 0, 623, 260, 26,
- 266, 26, 260, 26, 26, 26, 26, 26, 0, 0, 359, 0, 0, 0, 0, 0,
- 0, 266, 26, 26, 26, 26, 0, 314, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 280, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 299, 26,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 347, 26, 277, 277,
- 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 666, 26, 26, 26, 277, 277, 277, 280, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 667, 26, 26, 26, 26, 26, 26, 668, 26, 26, 26, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962,
- 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0,
- 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147,
- 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0,
- 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143,
- 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160,
- 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0,
- 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206,
- 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035,
- 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250,
- 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0,
- 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299,
- 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340,
- 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177,
- 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0,
- 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165,
- 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279,
- 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130,
- 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5,
- 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522,
- 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567,
- 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549,
- 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559,
- 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0,
- 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648,
- 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662,
- 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0,
- 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671,
- 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0,
- 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142,
- 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381,
- 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181,
- 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210,
- 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222,
- 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243,
- 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389,
- 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284,
- 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291,
- 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260,
- 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343,
- 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696,
- 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698,
- 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359,
- 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274,
- 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304,
- 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707,
- 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0,
- 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743,
- 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770,
- 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0,
- 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790,
- 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800,
- 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24,
- 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714,
- 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750,
- 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807,
- 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825,
- 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829,
- 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515,
- 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518,
- 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830,
- 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0,
- 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0,
- 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847,
- 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0,
- 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0,
- 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0,
- 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0,
- 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890,
- 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897,
- 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0,
- 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917,
- 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924,
- 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929,
- 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825,
- 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500,
- 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679,
- 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722,
- 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540,
- 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589,
- 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101,
- 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110,
- 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801,
- 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610,
- 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494,
- 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748,
- 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161,
- 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727,
- 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684,
- 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566,
- 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729,
- 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525,
- 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0,
- 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213,
- 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458,
- 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591,
- 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735,
- 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171,
- 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325,
- 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438,
- 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526,
- 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693,
- 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777,
- 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916,
- 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0,
- 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599,
- 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121,
- 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142,
- 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169,
- 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185,
- 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206,
- 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224,
- 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39,
- 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266,
- 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286,
- 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852,
- 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324,
- 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351,
- 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50,
- 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78,
- 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55,
- 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861,
- 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436,
- 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467,
- 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873,
- 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875,
- 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531,
- 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559,
- 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73,
- 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898,
- 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902,
- 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904,
- 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81,
- 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669,
- 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686,
- 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719,
- 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753,
- 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925,
- 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800,
- 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816,
- 817, 818, 819, 820, 821, 935, 0, 0,
-};
-static const int16_t
-_hb_ucd_i16[196] =
-{
- 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2,
- 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1,
- 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3,
- -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0,
- 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0,
- 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0,
- 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0,
- 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0,
- 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1,
- -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0,
- 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106,
- -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1,
- -1, 0, 1, -1,
-};
-
-static inline uint_fast8_t
-_hb_ucd_gc (unsigned u)
-{
- return u<1114110u?_hb_ucd_u8[6504+(((_hb_ucd_u8[1264+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2;
-}
-static inline uint_fast8_t
-_hb_ucd_ccc (unsigned u)
-{
- return u<125259u?_hb_ucd_u8[8768+(((_hb_ucd_u8[7792+(((_hb_ucd_u8[7120+(((_hb_ucd_u8[6874+(u>>2>>3>>4)])<<4)+((u>>2>>3)&15u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u))]:0;
-}
-static inline unsigned
-_hb_ucd_b4 (const uint8_t* a, unsigned i)
-{
- return (a[i>>1]>>((i&1u)<<2))&15u;
-}
-static inline int_fast16_t
-_hb_ucd_bmg (unsigned u)
-{
- return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9508+(((_hb_ucd_u8[9388+(((_hb_ucd_b4(9260+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0;
-}
-static inline uint_fast8_t
-_hb_ucd_sc (unsigned u)
-{
- return u<918000u?_hb_ucd_u8[10974+(((_hb_ucd_u16[1960+(((_hb_ucd_u8[10286+(((_hb_ucd_u8[9836+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2;
-}
-static inline uint_fast16_t
-_hb_ucd_dm (unsigned u)
-{
- return u<195102u?_hb_ucd_u16[5768+(((_hb_ucd_u8[16708+(((_hb_ucd_u8[16326+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0;
-}
-
-
-#else
-
-static const uint8_t
-_hb_ucd_u8[13344] =
-{
- 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 5, 17, 15, 15, 18, 15, 19, 20, 21,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23,
- 5, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 234, 70,235, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,236,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70,237, 96, 96, 96, 96, 96, 96,
+ 96, 96, 70, 70, 70, 70,238, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 70, 70, 70, 70, 70, 70,239, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96,240, 96,241,242, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3,
+ 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0,
+ 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19,
+ 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0,
+ 0, 0, 0, 0, 26, 26, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 9, 9, 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9,
+ 0, 9, 2, 2, 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9,
+ 9, 9, 9, 9, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1,
+ 1, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4,
+ 4, 4, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 14, 14, 14, 2, 2, 2,
+ 2, 14, 14, 14, 14, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0,
+ 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37,
+ 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 2, 2, 2, 2,
+ 2, 2, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64,
+ 64, 64, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+ 2, 2, 90, 90, 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95,
+ 95, 95, 95, 95, 95, 95, 2, 2, 95, 2, 37, 37, 37, 2, 2, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2,
+ 2, 2, 3, 3, 0, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 0, 0,
+ 7, 7, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2,
+ 2, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, 2, 2,
+ 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5,
+ 5, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 5, 5,
+ 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 2, 2, 11, 11, 11, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2,
+ 2, 11, 11, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 2, 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11,
+ 11, 2, 11, 11, 2, 2, 11, 2, 11, 11, 11, 2, 2, 11, 11, 11,
+ 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 2,
+ 11, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 2, 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10,
+ 10, 10, 10, 10, 2, 2, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10,
+ 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 2, 2,
+ 10, 10, 10, 10, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10,
+ 10, 10, 2, 21, 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2,
+ 2, 21, 21, 2, 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 2, 21,
+ 21, 21, 21, 21, 2, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21,
+ 2, 2, 2, 2, 2, 2, 2, 21, 21, 21, 2, 2, 2, 2, 21, 21,
+ 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22,
+ 22, 22, 22, 22, 22, 2, 2, 2, 22, 22, 22, 2, 22, 22, 22, 22,
+ 2, 2, 2, 22, 22, 2, 22, 2, 22, 22, 2, 2, 2, 22, 22, 2,
+ 2, 2, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 2, 2, 2, 2,
+ 22, 22, 22, 2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2,
+ 22, 22, 22, 22, 22, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23,
+ 23, 23, 23, 23, 2, 2, 23, 23, 23, 23, 23, 2, 23, 23, 23, 23,
+ 2, 2, 2, 2, 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 23,
+ 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 2, 2, 2, 2, 2, 2,
+ 2, 23, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2,
+ 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16,
+ 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16,
+ 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, 16, 16, 16, 16, 2, 2,
+ 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2, 20, 20, 20, 20,
+ 20, 20, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 2, 2,
+ 20, 20, 2, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2, 36, 36, 36, 36,
+ 36, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 36,
+ 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 36, 36, 36, 36, 2,
+ 36, 2, 2, 2, 2, 2, 2, 2, 36, 36, 2, 2, 36, 36, 36, 2,
+ 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24, 24, 24, 2, 2,
+ 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 2, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 18,
+ 2, 18, 18, 18, 18, 18, 18, 18, 2, 2, 18, 18, 18, 18, 18, 2,
+ 18, 2, 18, 18, 2, 2, 18, 18, 18, 18, 25, 25, 25, 25, 25, 25,
+ 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 2,
+ 2, 2, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 0,
+ 0, 0, 0, 25, 25, 2, 2, 2, 2, 2, 33, 33, 33, 33, 33, 33,
+ 33, 33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 2, 8, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8, 8, 0, 8, 8,
+ 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, 30,
+ 30, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, 30, 30, 30, 2,
+ 2, 2, 30, 30, 2, 2, 2, 2, 2, 2, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28, 28, 28, 28, 28,
+ 28, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 2,
+ 2, 2, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0,
+ 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0,
+ 0, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 2, 2,
+ 2, 2, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 2,
+ 46, 46, 46, 2, 46, 46, 2, 2, 2, 2, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31, 2, 2, 2, 2,
+ 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2, 2,
+ 2, 2, 32, 32, 32, 2, 2, 2, 2, 2, 28, 28, 28, 28, 28, 28,
+ 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 2, 48, 48, 48, 48, 2, 2, 2, 2, 48, 2, 2, 2, 48, 48,
+ 48, 48, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 2, 2, 52, 52, 52, 52, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 2, 2, 2, 2, 58, 58, 2, 2, 2, 2,
+ 2, 2, 58, 58, 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 54, 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 2,
+ 2, 91, 91, 91, 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91,
+ 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 2, 2, 2, 62, 62, 62, 62, 62, 62,
+ 62, 2, 76, 76, 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93,
+ 93, 93, 70, 70, 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70,
+ 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 73, 73,
+ 73, 73, 6, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 8,
+ 8, 8, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19,
+ 9, 9, 9, 9, 9, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9,
+ 9, 9, 9, 9, 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19,
+ 19, 19, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 2, 9, 2, 9,
+ 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 2, 2,
+ 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 2, 2, 9, 9, 9, 2,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 19, 2, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
+ 0, 2, 19, 19, 19, 19, 19, 2, 2, 2, 0, 2, 2, 2, 2, 2,
+ 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 19, 0, 19, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2,
+ 2, 2, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 2, 2,
+ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 56, 56, 56, 56, 56, 56,
+ 56, 56, 55, 55, 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55,
+ 55, 55, 61, 61, 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2,
+ 2, 61, 61, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
+ 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13,
+ 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 13,
+ 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, 1,
+ 12, 12, 13, 13, 13, 13, 0, 0, 0, 0, 2, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 25, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 34, 34, 34, 35, 36, 37, 34, 34, 34, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 67, 70, 71,
- 67, 67, 62, 72, 62, 62, 73, 67, 74, 75, 76, 77, 78, 67, 67, 67,
- 79, 80, 34, 81, 82, 83, 67, 67, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 84, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 85, 34, 34, 34, 34, 34, 34, 34, 34, 86, 34, 34, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
- 100,100, 34, 34, 34, 34,101,102, 34, 34,103,104,105,106,107,108,
- 34, 34,109,110,111,112,113,114,115,116,117,111, 34, 34, 34,111,
- 118,119,120,121,122,123,124,125, 34,126,127,111,128,129,130,131,
- 132,133,134,135,136,137,138,111,139,140,111,141,142,143,144,111,
- 145,146,147,148,149,150,111,111,151,152,153,154,111,155,111,156,
- 34, 34, 34, 34, 34, 34, 34, 34,157, 34, 34,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 34, 34, 34, 34, 34, 34, 34, 34,158,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111, 34, 34, 34, 34, 34,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 34, 34, 34, 34,159,160,161, 34,111,111,111,111,162,163,164,165,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,
- 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111, 34,166,111,111,111,111,111,111,
- 67, 67,167,168,169,128, 65,111,170,171,172,173,174,175,176,177,
- 67, 67, 67, 67,178,179,111,111,111,111,111,111,111,111,111,111,
- 180,111,181,111,111,182,111,111,111,111,111,111,111,111,111,111,
- 34,183,184,111,111,111,111,111,128,185,186,111, 34,187,111,111,
- 67, 67,188, 67, 67,111, 67,189, 67, 67, 67, 67, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 67, 67,190,111,111,111,111,111,111,111,111,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,111,
- 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 191,111,180,180,111,111,111,111,111,111,111,111,111,111,111,111,
- 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2,
- 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25,
- 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32,
- 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11,
- 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11,
- 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34,
- 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32,
- 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32,
- 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41,
- 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41,
- 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 16, 44, 16, 10,
- 41, 41, 41, 45, 11, 11, 11, 11, 34, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34,
- 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 46, 34, 32, 34, 11,
- 32, 47, 43, 43, 48, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16,
- 11, 11, 11, 11, 49, 2, 2, 2, 16, 16, 16, 16, 50, 51, 52, 53,
- 54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55,
- 56, 57, 43, 56, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 58, 2, 2, 2, 2, 2, 2, 59, 59, 59, 8, 9, 60, 2, 61,
- 43, 43, 43, 43, 43, 57, 59, 2, 62, 36, 36, 36, 36, 63, 43, 43,
- 7, 7, 7, 7, 7, 2, 2, 36, 64, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 65, 43, 43, 43, 66, 47, 43, 43, 67, 68, 69, 43, 43, 36,
- 7, 7, 7, 7, 7, 36, 70, 71, 2, 2, 2, 2, 2, 2, 2, 72,
- 63, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 64, 36,
- 36, 36, 36, 43, 43, 43, 43, 43, 7, 7, 7, 7, 7, 36, 36, 36,
- 36, 36, 36, 36, 36, 63, 43, 43, 43, 43, 40, 21, 2, 40, 68, 20,
- 36, 36, 36, 43, 43, 68, 43, 43, 43, 43, 68, 43, 68, 43, 43, 43,
- 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 63, 43, 43, 2,
- 36, 63, 43, 43, 43, 43, 43, 43, 43, 73, 43, 43, 43, 43, 43, 43,
- 43, 74, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 74, 64, 75,
- 76, 43, 43, 43, 74, 75, 76, 75, 63, 43, 43, 43, 36, 36, 36, 36,
- 36, 43, 2, 7, 7, 7, 7, 7, 77, 36, 36, 36, 36, 36, 36, 36,
- 63, 75, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 75,
- 76, 43, 43, 74, 75, 75, 76, 36, 36, 36, 36, 79, 75, 75, 36, 36,
- 36, 43, 43, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 53, 58, 43,
- 43, 74, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 43, 75,
- 76, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 64, 36, 36, 36,
- 36, 36, 36, 7, 7, 7, 7, 7, 43, 36, 63, 2, 2, 2, 2, 2,
- 76, 43, 43, 43, 74, 75, 76, 43, 60, 20, 20, 20, 80, 43, 43, 43,
- 43, 75, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 76,
- 76, 43, 43, 74, 75, 75, 76, 43, 43, 43, 43, 74, 75, 75, 36, 36,
- 71, 27, 27, 27, 27, 27, 27, 27, 43, 64, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 75, 74, 75, 75, 75, 75, 75, 76, 43,
- 36, 36, 36, 79, 75, 75, 75, 75, 75, 75, 75, 7, 7, 7, 7, 7,
- 27, 81, 61, 61, 53, 61, 61, 61, 74, 75, 64, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36, 43, 74, 75, 75, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 36, 36, 36, 36, 7, 7, 7, 82, 27, 27, 27, 81,
- 63, 75, 65, 36, 36, 36, 36, 36, 75, 75, 75, 74, 75, 75, 43, 43,
- 43, 43, 74, 75, 75, 75, 75, 36, 83, 36, 36, 36, 36, 36, 36, 36,
- 43, 75, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 63, 64, 75,
- 76, 43, 43, 75, 75, 75, 76, 70, 61, 61, 36, 79, 27, 27, 27, 84,
- 27, 27, 27, 27, 81, 36, 36, 36, 36, 36, 36, 36, 36, 43, 43, 74,
- 75, 43, 43, 43, 75, 75, 75, 75, 7, 75, 2, 2, 2, 2, 2, 2,
- 63, 36, 43, 43, 43, 43, 43, 85, 36, 36, 36, 68, 43, 43, 43, 57,
- 7, 7, 7, 7, 7, 2, 2, 2, 63, 36, 43, 43, 43, 43, 64, 36,
- 36, 36, 36, 40, 43, 43, 43, 43, 7, 7, 7, 7, 7, 7, 36, 36,
- 70, 61, 2, 2, 2, 2, 2, 2, 2, 86, 86, 61, 43, 61, 61, 61,
- 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 47, 47, 47, 4, 4, 75,
- 63, 43, 43, 43, 43, 43, 43, 74, 43, 43, 57, 43, 36, 36, 63, 43,
- 43, 43, 43, 43, 43, 43, 43, 61, 61, 61, 61, 69, 61, 61, 61, 61,
- 2, 2, 86, 61, 21, 2, 2, 2, 36, 36, 36, 36, 36, 79, 76, 43,
- 74, 43, 43, 43, 76, 74, 76, 64, 36, 36, 36, 75, 43, 36, 36, 43,
- 64, 75, 78, 79, 75, 75, 75, 36, 63, 43, 64, 36, 36, 36, 36, 36,
- 36, 74, 76, 74, 75, 75, 76, 79, 7, 7, 7, 7, 7, 75, 76, 61,
- 16, 16, 16, 16, 16, 50, 44, 16, 36, 36, 36, 36, 36, 36, 63, 43,
- 2, 2, 2, 2, 87, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 61, 61, 61, 61, 61, 61, 61, 61, 11, 11, 11, 11, 16, 16, 16, 16,
- 88, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 65,
- 89, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 90, 91, 91,
- 36, 36, 36, 36, 36, 58, 2, 92, 93, 36, 36, 36, 36, 36, 36, 36,
- 36, 43, 43, 43, 43, 43, 43, 43, 36, 43, 57, 2, 2, 2, 2, 2,
- 36, 36, 43, 76, 43, 43, 43, 75, 75, 75, 75, 74, 76, 43, 43, 43,
- 43, 43, 2, 77, 2, 60, 63, 43, 7, 7, 7, 7, 7, 7, 7, 7,
- 2, 2, 2, 94, 2, 56, 43, 59, 36, 95, 36, 36, 36, 36, 36, 36,
- 36, 36, 63, 64, 36, 36, 36, 36, 36, 36, 36, 36, 63, 36, 36, 36,
- 43, 74, 75, 76, 74, 75, 75, 75, 75, 74, 75, 75, 76, 43, 43, 43,
- 61, 61, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 27, 61,
- 36, 36, 36, 63, 74, 76, 43, 2, 36, 36, 79, 74, 43, 43, 43, 43,
- 74, 74, 76, 43, 43, 43, 74, 75, 75, 76, 43, 43, 43, 43, 43, 43,
- 2, 2, 2, 77, 2, 2, 2, 2, 43, 43, 43, 43, 43, 43, 43, 96,
- 43, 43, 78, 36, 36, 36, 36, 36, 36, 36, 74, 43, 43, 74, 74, 75,
- 75, 74, 78, 36, 36, 36, 36, 36, 86, 61, 61, 61, 61, 47, 43, 43,
- 43, 43, 61, 61, 61, 61, 61, 61, 43, 78, 36, 36, 36, 36, 36, 36,
- 79, 43, 43, 75, 43, 76, 43, 36, 36, 36, 36, 74, 43, 75, 76, 76,
- 43, 75, 75, 75, 75, 75, 2, 2, 36, 36, 75, 75, 75, 75, 43, 43,
- 43, 43, 75, 43, 43, 57, 2, 2, 7, 7, 7, 7, 7, 7, 83, 36,
- 36, 36, 36, 36, 40, 40, 40, 2, 43, 57, 43, 43, 43, 43, 43, 43,
- 74, 43, 43, 43, 64, 36, 63, 36, 36, 36, 64, 79, 43, 36, 36, 36,
- 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 44, 16, 16,
- 16, 16, 16, 16, 44, 16, 16, 16, 16, 16, 16, 16, 16, 97, 40, 40,
- 32, 32, 32, 16, 16, 16, 16, 32, 16, 16, 16, 16, 11, 11, 11, 11,
- 16, 16, 16, 16, 34, 11, 11, 11, 16, 16, 16, 16, 98, 98, 98, 98,
- 16, 16, 16, 16, 11, 11, 99,100, 41, 16, 16, 16, 11, 11, 99, 41,
- 16, 16, 16, 16, 11, 11,101, 41,102,102,102,102,102,103, 59, 59,
- 51, 51, 51, 2,104,105,104,105, 2, 2, 2, 2,106, 59, 59,107,
- 2, 2, 2, 2,108,109, 2,110,111, 2,112,113, 2, 2, 2, 2,
- 2, 9,111, 2, 2, 2, 2,114, 59, 59, 59, 59, 59, 59, 59, 59,
- 115, 40, 27, 27, 27, 8,112,116, 27, 27, 27, 27, 27, 8,112, 91,
- 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43,117, 48,
- 96, 48, 96, 43, 43, 43, 43, 43, 61,118, 61,119, 61, 34, 11, 16,
- 11, 32,119, 61, 46, 11, 11, 61, 61, 61,118,118,118, 11, 11,120,
- 11, 11, 35, 36, 39, 61, 16, 11, 8, 8, 46, 16, 16, 26, 61,121,
- 92, 92, 92, 92, 92, 92, 92, 92, 92,122,123, 92,124, 61, 61, 61,
- 8, 8,125, 61, 61, 8, 61, 61,125, 26, 61,125, 61, 61, 61,125,
- 61, 61, 61, 61, 61, 61, 61, 8, 61,125,125, 61, 61, 61, 61, 61,
- 61, 61, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 61, 61, 61, 61, 4, 4, 61, 61, 8, 61, 61, 61,126,127, 61, 61,
- 61, 61, 61, 61, 61, 61,125, 61, 61, 61, 61, 61, 61, 26, 8, 8,
- 8, 8, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 8, 8,
- 8, 61, 61, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 27, 61, 61,
- 61, 61, 61, 61, 61, 27, 27, 27, 61, 61, 61, 26, 61, 61, 61, 61,
- 26, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 8, 8, 8, 8,
- 61, 61, 61, 61, 61, 61, 61, 26, 61, 61, 61, 61, 4, 4, 4, 4,
- 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 61, 61, 61, 61, 61, 61,
- 8, 8,112,128, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4,
- 8,112,129,129,129,129,129,129,129,129,129,129,128, 8, 8, 8,
- 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8,
- 8, 8,125, 26, 8, 8,125, 61, 32, 11, 32, 34, 34, 34, 34, 11,
- 32, 32, 34, 16, 16, 16, 40, 11, 32, 32,121, 61, 61,119, 34,130,
- 43, 32, 16, 16, 50, 2, 87, 2, 36, 36, 36, 36, 36, 36, 36, 95,
- 2, 2, 2, 2, 2, 2, 2, 56, 2,104,104, 2,108,109,104, 2,
- 2, 2, 2, 6, 2, 94,104, 2,104, 4, 4, 4, 4, 2, 2, 77,
- 2, 2, 2, 2, 2, 51, 2, 2, 94,131, 2, 2, 2, 2, 2, 2,
- 61, 2, 2, 2, 2, 2, 2, 2, 1, 2,132,133, 4, 4, 4, 4,
- 4, 61, 4, 4, 4, 4,134, 91,135, 92, 92, 92, 92, 43, 43, 75,
- 136, 40, 40, 61, 92,137, 58, 61, 71, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 63,138,139, 62, 36, 36, 36, 36, 36, 58, 40, 62,
- 61, 27, 27, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 61, 61, 61,
- 61, 61, 61, 61, 27, 27, 27, 27,140, 27, 27, 27, 27, 27, 27, 27,
- 36, 36, 95, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,141, 2,
- 32, 32, 32, 32, 32, 32, 32, 63, 48,142, 43, 43, 43, 43, 43, 77,
- 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 92, 92, 92, 92, 92,
- 43, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41,139, 40, 40, 40, 40,
- 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32,
- 44, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,143, 34, 35,
- 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32,
- 11, 11, 32, 32, 32, 32, 32, 32, 16, 32, 11, 11, 34, 16, 16, 16,
- 16, 16, 34, 35, 40, 35, 36, 36, 36, 64, 36, 64, 36, 63, 36, 36,
- 36, 79, 76, 74, 61, 61, 43, 43, 27, 27, 27, 61,144, 61, 61, 61,
- 36, 36, 2, 2, 2, 2, 2, 2, 75, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 75, 75, 75, 75, 75, 75, 75, 75, 43, 43, 43, 43, 43, 2,
- 43, 36, 36, 36, 2, 65, 65, 63, 36, 36, 36, 43, 43, 43, 43, 2,
- 36, 36, 36, 63, 43, 43, 43, 43, 43, 75, 75, 75, 75, 75, 75,145,
- 36, 63, 75, 43, 43, 75, 43, 75,145, 2, 2, 2, 2, 2, 2, 77,
- 7, 7, 7, 7, 7, 7, 7, 2, 36, 36, 63, 62, 36, 36, 36, 36,
- 36, 36, 36, 36, 63, 43, 43, 74, 76, 74, 76, 43, 43, 43, 43, 43,
- 36, 63, 36, 36, 36, 36, 74, 75, 7, 7, 7, 7, 7, 7, 2, 2,
- 62, 36, 36, 70, 61, 79, 74, 36, 64, 43, 64, 63, 64, 36, 36, 43,
- 36, 36, 36, 36, 36, 36, 95, 2, 36, 36, 36, 36, 36, 79, 43, 75,
- 2, 95,146, 43, 43, 43, 43, 43, 16, 16, 16, 16, 16,100, 40, 40,
- 16, 16, 16, 16, 97, 41, 41, 41, 36, 79, 76, 75, 74,145, 76, 43,
- 147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148,
- 16, 16, 16, 16, 16, 16, 35, 64, 36, 36, 36, 36,149, 36, 36, 36,
- 36, 41, 41, 41, 41, 41, 41, 41, 41,150, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 36, 36,129,151,151,151,151,151,151,151,151,
- 36, 36, 36, 36, 36, 36,144, 61, 2, 2, 2,152,113, 2, 2, 2,
- 6,153,154,129,129,129,129,129,129,129,113,152,113, 2,110,155,
- 2, 2, 2, 2,134,129,129,113, 2,156, 8, 8, 60, 2, 2, 2,
- 36, 36, 36, 36, 36, 36, 36,157, 2, 2, 3, 2, 4, 5, 6, 2,
- 16, 16, 16, 16, 16, 17, 18,112,113, 4, 2, 36, 36, 36, 36, 36,
- 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40,
- 20,158, 53, 20, 26, 8,125, 61, 61, 61, 61, 61,159, 59, 61, 61,
- 2, 2, 2, 87, 27, 27, 27, 27, 27, 27, 27, 81, 61, 61, 61, 61,
- 92, 92,124, 27, 81, 61, 61, 61, 61, 61, 61, 61, 61, 27, 61, 61,
- 61, 61, 61, 61, 61, 61, 47, 43,160,160,160,160,160,160,160,160,
- 161, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 84, 36,
- 133, 36, 36, 36, 36, 92, 92, 92, 36, 36, 36, 36, 36, 36, 36, 58,
- 162, 92, 92, 92, 92, 92, 92, 92, 36, 36, 36, 58, 27, 27, 27, 27,
- 36, 36, 36, 70,140, 27, 27, 27, 36, 36, 36,163, 27, 27, 27, 27,
- 36, 36, 36, 36, 36,163, 27, 27, 36, 36, 36, 27, 27, 27, 27, 30,
- 36, 36, 36, 36, 36, 36, 27, 36, 63, 43, 43, 43, 43, 43, 43, 43,
- 36, 36, 36, 36, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36,163, 30,
- 36, 36, 36, 36, 36, 36,163, 27, 36, 36, 36, 36, 71, 36, 36, 36,
- 36, 36, 63, 43, 43,161, 27, 27, 36, 36, 36, 36, 58, 2, 2, 2,
- 36, 36, 36, 36, 27, 27, 27, 27, 16, 16, 16, 16, 16, 27, 27, 27,
- 36, 36, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 63,164, 51,
- 27, 27, 27, 84, 36, 36, 36, 36,161, 27, 30, 2, 2, 2, 2, 2,
- 36, 36,163, 27, 27, 27, 27, 27, 76, 78, 36, 36, 36, 36, 36, 36,
- 43, 43, 43, 57, 2, 2, 2, 2, 2, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,165,
- 75, 76, 43, 74, 76, 57, 72, 2, 2, 2, 2, 2, 2, 2, 72, 59,
- 36, 36, 36, 63, 43, 43, 76, 43, 43, 43, 43, 7, 7, 7, 7, 7,
- 2, 2, 79, 78, 36, 36, 36, 36, 36, 63, 2, 36, 36, 36, 36, 36,
- 36, 79, 75, 43, 43, 43, 43, 74, 78, 36, 58, 2, 56, 43, 57, 76,
- 7, 7, 7, 7, 7, 58, 58, 2, 87, 27, 27, 27, 27, 27, 27, 27,
- 36, 36, 36, 36, 36, 36, 75, 76, 43, 75, 74, 43, 2, 2, 2, 43,
- 36, 36, 36, 36, 36, 36, 36, 63, 74, 75, 75, 75, 75, 75, 75, 75,
- 36, 36, 36, 79, 75, 75, 78, 36, 36, 75, 75, 43, 43, 43, 43, 43,
- 36, 36, 79, 75, 43, 43, 43, 43, 75, 43, 74, 64, 36, 58, 2, 2,
- 7, 7, 7, 7, 7, 2, 2, 64, 75, 76, 43, 43, 74, 74, 75, 76,
- 74, 43, 36, 65, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 79,
- 75, 43, 43, 43, 75, 75, 43, 76, 57, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 36, 36, 43, 43, 75, 76, 43, 43, 43, 74, 76, 76,
- 57, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 63, 76, 75,
- 43, 43, 43, 76, 36, 36, 36, 36, 75, 43, 43, 76, 43, 43, 43, 43,
- 7, 7, 7, 7, 7, 27, 2, 86, 43, 43, 43, 43, 76, 57, 2, 2,
- 27, 27, 27, 27, 27, 27, 27, 84, 75, 75, 75, 75, 75, 76, 74, 64,
- 78, 76, 2, 2, 2, 2, 2, 2, 79, 75, 43, 43, 43, 43, 75, 75,
- 64, 65, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
- 63, 43, 43, 43, 43, 64, 36, 36, 36, 63, 43, 43, 74, 63, 43, 57,
- 2, 2, 2, 56, 43, 43, 43, 43, 63, 43, 43, 74, 76, 43, 36, 36,
- 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 74, 43, 2, 65, 2,
- 43, 43, 43, 43, 43, 43, 43, 76, 58, 2, 2, 2, 2, 2, 2, 2,
- 2, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 74, 43, 43, 43,
- 74, 43, 76, 43, 43, 43, 43, 43, 43, 43, 43, 63, 43, 43, 43, 43,
- 36, 36, 36, 36, 36, 75, 75, 75, 43, 74, 76, 76, 36, 36, 36, 36,
- 36, 63, 74,145, 2, 2, 2, 2, 27, 27, 81, 61, 61, 61, 53, 20,
- 144, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 21,
- 43, 43, 57, 2, 2, 2, 2, 2, 43, 43, 43, 57, 2, 2, 61, 61,
- 40, 40, 86, 61, 61, 61, 61, 61, 7, 7, 7, 7, 7,166, 27, 27,
- 27, 84, 36, 36, 36, 36, 36, 36, 27, 27, 27, 30, 2, 2, 2, 2,
- 79, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76,
- 43, 67, 40, 40, 40, 40, 40, 40, 40, 77, 43, 43, 43, 43, 43, 43,
- 36, 36, 36, 36, 36, 36, 47, 57, 61, 61,167, 76, 43, 61,167, 75,
- 75,168, 59, 59, 59, 73, 43, 43, 43, 69, 47, 43, 43, 43, 61, 61,
- 61, 61, 61, 61, 61, 43, 43, 61, 61, 43, 69, 61, 61, 61, 61, 61,
- 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 16, 11, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16,
- 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16,
- 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16,
- 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16,
- 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 16, 7,
- 43, 43, 43, 69, 61, 47, 43, 43, 43, 43, 43, 43, 43, 43, 69, 61,
- 61, 61, 47, 61, 61, 61, 61, 61, 61, 61, 69, 21, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 56, 43, 43, 43, 43, 43, 67, 40, 40, 40, 40,
- 7, 7, 7, 7, 7, 7, 7, 70, 36, 36, 36, 36, 36, 36, 43, 43,
- 7, 7, 7, 7, 7, 7, 7,169, 16, 16, 43, 43, 43, 67, 40, 40,
- 27, 27, 27, 27, 27, 27,140, 27,170, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27,140, 27, 27, 27, 27, 27, 27, 81, 61,
- 61, 61, 61, 61, 61, 25, 41, 41, 0, 0, 29, 21, 21, 21, 23, 21,
- 22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9,
- 9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0,
- 23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15,
- 24, 15, 7, 19, 15, 21, 9, 25, 9, 5, 5, 25, 5, 9, 5, 7,
- 7, 7, 9, 8, 8, 5, 7, 5, 6, 6, 24, 24, 6, 24, 12, 12,
- 6, 5, 9, 21, 25, 9, 26, 12, 11, 11, 9, 6, 5, 21, 17, 17,
- 17, 26, 26, 23, 23, 12, 17, 12, 21, 12, 12, 21, 7, 21, 1, 1,
- 21, 23, 26, 26, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6,
- 6, 12, 12, 26, 7, 26, 26, 7, 21, 1, 1, 12, 12, 10, 10, 10,
- 10, 12, 21, 6, 10, 7, 7, 10, 23, 7, 15, 26, 13, 21, 13, 7,
- 15, 7, 12, 23, 21, 26, 21, 15, 17, 7, 29, 7, 7, 22, 18, 18,
- 14, 14, 14, 7, 17, 21, 7, 6, 11, 12, 5, 6, 8, 8, 8, 24,
- 5, 24, 9, 24, 29, 29, 29, 1, 20, 19, 22, 20, 27, 28, 1, 29,
- 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6,
- 18, 6, 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14,
- 14, 15, 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 22, 21,
- 26, 6, 7, 14, 17, 22, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6,
- 26, 15, 6, 21, 11, 21, 24, 9, 23, 26, 10, 21, 6, 10, 4, 4,
- 3, 3, 7, 25, 24, 7, 22, 22, 21, 22, 17, 16, 16, 22, 16, 16,
- 25, 17, 7, 1, 25, 24, 26, 1, 2, 2, 12, 15, 21, 14, 7, 15,
- 12, 17, 13, 12, 13, 15, 26, 10, 10, 1, 13, 23, 23, 15, 0, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0,
- 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23,
- 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40,
- 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8,
- 9, 10, 0, 11, 12, 13, 0, 14, 15, 16, 15, 17, 15, 18, 15, 18,
- 15, 18, 0, 18, 0, 19, 15, 18, 20, 18, 0, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 35, 0,
- 36, 0, 0, 0, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 0, 46,
- 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49,
- 0, 50, 0, 51, 52, 0, 53, 0, 0, 0, 0, 0, 0, 54, 55, 56,
- 0, 0, 0, 0, 57, 0, 0, 58, 59, 60, 61, 62, 0, 0, 63, 64,
- 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69,
- 0, 70, 0, 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, 0, 76, 77, 0,
- 78, 61, 0, 79, 80, 0, 0, 81, 82, 83, 0, 0, 0, 84, 0, 85,
- 0, 0, 50, 86, 50, 0, 87, 0, 88, 0, 0, 0, 77, 0, 0, 0,
- 89, 90, 0, 91, 92, 93, 94, 0, 0, 0, 0, 0, 50, 0, 0, 0,
- 0, 95, 96, 0, 0, 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 99, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,101,102, 0, 0,103, 0, 0, 0, 0, 0, 0,104, 0, 0, 0,
- 98, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0,106,
- 0,107, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0,
- 8, 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, 0, 0, 13, 0, 0,
- 14, 15, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, 21, 0, 0, 0,
- 0, 0, 22, 23, 0, 24, 25, 0, 0, 26, 0, 0, 0, 27, 28, 29,
- 0, 0, 0, 30, 31, 32, 0, 0, 31, 0, 0, 33, 31, 0, 0, 0,
- 31, 34, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, 37,
- 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 41, 0, 42,
- 0, 0, 0, 43, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46,
- 47, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 49, 0, 50, 0, 0,
- 0, 0, 51, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 54, 55,
- 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 49, 0, 59, 60,
- 0, 0, 61, 0, 0, 0, 62, 63, 0, 0, 0, 64, 0, 65, 66, 67,
- 68, 69, 1, 70, 0, 71, 72, 73, 0, 0, 74, 75, 0, 0, 0, 76,
- 0, 0, 1, 1, 0, 0, 77, 0, 0, 78, 0, 0, 0, 0, 74, 79,
- 0, 80, 0, 0, 0, 0, 0, 75, 81, 0, 82, 0, 49, 0, 1, 75,
- 0, 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 85, 54, 0, 0, 0,
- 0, 0, 0, 86, 87, 0, 0, 81, 0, 0, 31, 0, 0, 88, 0, 0,
- 0, 0, 89, 0, 0, 0, 0, 47, 0, 0, 57, 0, 0, 0, 0, 90,
- 91, 0, 0, 92, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0,
- 96, 57, 0, 0, 81, 0, 0, 76, 0, 0, 0, 97, 98, 0, 0, 99,
- 100, 0, 0, 0, 0, 0, 0,101, 0, 0,102, 0, 0, 0, 0,103,
- 31, 0,104,105,106, 33, 0, 0,107, 0, 0, 0,108, 0, 0, 0,
- 0, 0, 0,109, 0, 0,110, 0, 0, 0, 0,111, 85, 0, 0, 0,
- 0, 0, 54, 0, 0, 0, 0, 49,112, 0, 0, 0, 0,113, 0, 0,
- 114, 0, 0, 0, 0,112, 0, 0, 0, 0, 0,115, 0, 0, 0,116,
- 0, 0, 0,117, 0,118, 0, 0, 0, 0,119,120,121, 0,122, 0,
- 123, 0, 0, 0,124,125,126, 0, 0, 0,127, 0, 0,128, 0, 0,
- 129, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4,
- 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17,
- 18, 1, 1, 1, 19, 1, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24,
- 25, 26, 27, 28, 29, 30, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33,
- 34, 35, 1, 36, 37, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41,
- 42, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 19, 1,
- 21, 0, 0, 47, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 51, 0,
- 52, 1, 1, 1, 53, 21, 43, 54, 55, 21, 35, 1, 0, 0, 0, 56,
- 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0,
- 0, 0, 62, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0,
- 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 70, 71, 0,
- 72, 73, 74, 75, 76, 77, 0, 0, 0, 78, 0, 0, 0, 79, 80, 0,
- 0, 0, 0, 47, 0, 0, 0, 49, 0, 63, 0, 0, 64, 0, 0, 81,
- 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, 63, 0, 0, 0,
- 0, 49, 1, 85, 1, 54, 15, 86, 84, 0, 0, 0, 0, 56, 0, 0,
- 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0,
- 87, 0, 0, 0, 0, 79, 0, 0, 89, 9, 12, 4, 90, 8, 91, 47,
- 0, 59, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, 1, 94, 95, 96,
- 97, 1, 98, 59, 81, 99,100, 4, 59, 0, 0, 0, 0, 0, 0, 19,
- 50, 0, 0, 0, 0, 0, 0, 62, 0, 0,101,102, 0, 0,103, 0,
- 0, 1, 1, 50, 0, 0, 0, 38, 0, 64, 0, 0, 0, 0, 0, 63,
- 0, 0, 52, 69, 62, 0, 0, 0, 79, 0, 0, 0,104,105, 59, 38,
- 81, 0, 0, 0, 0, 0, 0,106, 1, 14, 4, 12, 0, 38, 89, 0,
- 0, 0, 0,107, 0, 0,108, 62, 0,109, 0, 0, 0, 1, 0, 0,
- 0, 0, 19, 59, 0,110, 14, 54, 0, 0,111, 0, 89, 0, 0, 0,
- 62, 63, 0, 0, 63, 0, 88, 0, 0,111, 0, 0, 0, 0,112, 0,
- 0, 0, 79, 56, 0, 38, 1, 59, 1, 59, 0, 0, 64, 88, 0, 0,
- 113, 0, 0, 0, 56, 0, 0, 0, 0,113, 0, 0, 0, 0, 62, 0,
- 0, 0, 0, 80, 0, 62, 0, 0, 0, 0, 57, 0, 88,114, 0, 0,
- 8, 91, 0, 0, 1, 89, 0, 0,115, 0, 0, 0, 0, 0, 0,116,
- 0,117,118,119,120, 0, 52, 4,121, 49, 23, 0, 0, 0, 38, 50,
- 38, 59, 0, 0, 1, 89, 1, 1, 1, 1, 39, 1, 48,104, 89, 0,
- 0, 0, 0, 1, 4,121, 0, 0, 0, 1,122, 0, 0, 0, 0, 0,
- 230,230,230,230,230,232,220,220,220,220,232,216,220,220,220,220,
- 220,202,202,220,220,220,220,202,202,220,220,220, 1, 1, 1, 1,
- 1,220,220,220,220,230,230,230,230,240,230,220,220,220,230,230,
- 230,220,220, 0,230,230,230,220,220,220,220,230,232,220,220,230,
- 233,234,234,233,234,234,233,230, 0, 0, 0,230, 0,220,230,230,
- 230,230,220,230,230,230,222,220,230,230,220,220,230,222,228,230,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23,
- 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27,
- 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230,220,230,230,220,
- 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230,230, 0,220,230,
- 230,220, 0, 0, 0, 36, 0, 0,230,220,230,230,220,220,230,220,
- 220,230,220,230,220,230,230, 0, 0,220, 0, 0,230,230, 0,230,
- 0,230,230,230,230,230, 0, 0, 0,220,220,220, 0, 0, 0,220,
- 230,230, 0,220,230,220,220,220, 27, 28, 29,230, 7, 0, 0, 0,
- 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0, 0, 0,230, 0,
- 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 0,
- 103,103, 9, 0,107,107,107,107,118,118, 9, 0,122,122,122,122,
- 220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0, 0,129,130, 0,
- 132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0,130, 0,230,230,
- 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7, 0, 9, 9, 0,
- 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,
- 230, 0, 0,220,230,220, 0,220, 0, 0, 9, 9, 0, 0, 7, 0,
- 230,230,230, 0,230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,
- 202,230,230,230,230,230,232,228,228,220, 0,230,233,220,230,220,
- 230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1,
- 0, 0,218,228,232,222,224,224, 0, 8, 8, 0,230, 0,230,230,
- 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0,
- 0,230,220, 0, 0, 0,220,220, 0, 9, 7, 0, 0, 7, 9, 0,
- 0, 0, 9, 7, 9, 9, 0, 0, 6, 6, 0, 0, 0, 0, 1, 0,
- 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0,
- 220,220,220, 0,230,230, 7, 0, 16, 17, 17, 33, 17, 49, 17, 17,
- 84, 97,135,145, 26, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17,177, 0, 1, 2, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3,
- 3, 3, 5, 3, 3, 3, 3, 3, 6, 7, 8, 3, 3, 3, 3, 3,
- 9, 10, 11, 12, 13, 3, 3, 3, 3, 3, 3, 3, 3, 14, 3, 15,
- 3, 3, 3, 3, 3, 3, 16, 17, 18, 19, 20, 21, 3, 3, 3, 22,
- 23, 3, 3, 3, 3, 3, 3, 3, 24, 3, 3, 3, 3, 3, 3, 3,
- 3, 25, 3, 3, 26, 27, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2,
- 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
- 9, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0,
- 0, 10, 11, 12, 13, 0, 0, 14, 15, 16, 6, 0, 17, 18, 19, 19,
- 19, 20, 21, 22, 23, 24, 19, 25, 0, 26, 27, 19, 19, 28, 29, 30,
- 0, 31, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 19, 28, 0,
- 32, 33, 9, 34, 35, 19, 0, 0, 36, 37, 38, 39, 40, 19, 0, 41,
- 42, 43, 44, 31, 0, 1, 45, 42, 0, 0, 0, 0, 0, 32, 14, 14,
- 0, 0, 0, 0, 14, 0, 0, 46, 47, 47, 47, 47, 48, 49, 47, 47,
- 47, 47, 50, 51, 52, 53, 43, 21, 0, 0, 0, 0, 0, 0, 0, 54,
- 6, 55, 0, 14, 19, 1, 0, 0, 0, 19, 56, 31, 0, 0, 0, 0,
- 0, 0, 0, 57, 14, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3,
- 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 2, 3, 0, 4, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0,
- 0, 1, 1, 0, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 8, 9,
- 10, 11, 12, 0, 0, 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0,
- 0, 0, 1, 0, 0, 18, 19, 0, 0, 0, 20, 0, 0, 0, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 8, 21, 9, 0, 0,
- 22, 0, 0, 0, 0, 1, 0, 23, 24, 25, 0, 0, 26, 0, 0, 0,
- 8, 21, 27, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 28, 29, 30,
- 0, 31, 32, 20, 1, 1, 0, 0, 0, 8, 21, 9, 1, 4, 5, 0,
- 0, 0, 33, 9, 0, 1, 1, 1, 0, 8, 21, 21, 21, 21, 34, 1,
- 35, 21, 21, 21, 9, 36, 0, 0, 37, 38, 1, 0, 39, 0, 0, 0,
- 1, 0, 1, 0, 0, 0, 0, 8, 21, 9, 1, 0, 0, 0, 40, 0,
- 8, 21, 21, 21, 21, 21, 21, 21, 21, 9, 0, 1, 1, 1, 1, 8,
- 21, 21, 21, 9, 0, 0, 0, 41, 0, 42, 43, 0, 0, 0, 1, 44,
- 0, 0, 0, 45, 8, 9, 1, 0, 1, 0, 1, 1, 8, 21, 21, 9,
- 0, 4, 5, 8, 9, 1, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7,
- 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 11,
- 11, 11, 11, 12, 12, 12, 12, 13, 14, 15, 16, 17, 18, 12, 19, 12,
- 20, 12, 12, 12, 12, 21, 22, 22, 22, 23, 12, 12, 12, 12, 24, 25,
- 12, 12, 26, 27, 28, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 32, 12, 33, 7, 7, 34, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 35, 0, 0, 1, 2, 2, 2, 3,
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33,
- 33, 34, 35, 35, 35, 35, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 2, 2, 51, 51, 52, 53, 54, 55, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 56, 56, 56, 56,
- 56, 56, 58, 59, 60, 61, 56, 62, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 56, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
- 62, 62, 62, 62, 62, 71, 62, 62, 62, 62, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 73, 74, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 87, 87, 87, 87, 87, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62,
- 88, 89, 89, 89, 90, 89, 91, 92, 93, 94, 95, 95, 96, 97, 87, 98,
- 99,100,101,102,103, 87,104,104,104, 87,105,106,107,108,109,110,
- 111,112,113,114,115, 87, 89,116,117,118,119,120,121,122,123,124,
- 125, 87,126,127, 87,128,129,130,131, 87,132,133,134,135,136,137,
- 87, 87,138,139,140,141, 87,142, 87,143,144,144,144,144,144,144,
- 144,144,144,144,144, 87, 87, 87, 87, 87,145,145,145,145,145,145,
- 145,145,145, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87,146,146,146,146,146, 87, 87, 87,147,147,147,147,148,149,
- 150,150, 87, 87, 87, 87,151,151,152,153,154,154,154,154,154,154,
- 154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
- 155,155,155,155,154, 87, 87, 87, 87, 87,156,157,158,159,159,159,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
- 87, 87,160,161, 87, 87, 87, 87, 87, 87, 56, 56,162,163, 51, 56,
- 56, 87, 56, 56, 56, 56, 56, 56, 56, 56,164,164,164,164,164,164,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,165, 87,166, 87, 87,167,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,168,168,169, 87, 87, 87,
- 87, 87, 56, 56, 56, 87, 89, 89, 87, 87, 56, 56, 56, 56,170, 87,
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 62,
- 62, 62, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 87,
- 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 62,
- 62, 87, 87, 87, 87, 87, 87, 87, 87, 87, 56, 87,171,171, 0, 1,
- 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0, 0, 0, 1, 2,
- 1, 2, 0, 0, 3, 3, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 6, 0, 0, 7, 0, 8, 8, 8, 8, 8, 8,
- 8, 9, 10, 11, 11, 11, 11, 11, 12, 11, 13, 13, 13, 13, 13, 13,
- 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 16,
- 16, 16, 16, 17, 18, 18, 18, 18, 18, 18, 19, 20, 21, 21, 22, 23,
- 21, 24, 21, 21, 21, 21, 21, 25, 21, 21, 26, 26, 26, 26, 26, 21,
- 21, 21, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30,
- 26, 26, 21, 21, 21, 21, 21, 21, 31, 21, 32, 32, 32, 32, 32, 33,
- 34, 32, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36,
- 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38,
- 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40,
- 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42,
- 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 45, 44, 44,
- 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 48, 47, 47, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 52, 52, 52, 52, 52, 52,
- 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54,
- 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 57, 57, 57, 57,
- 58, 57, 59, 59, 60, 61, 62, 62, 63, 63, 64, 64, 64, 64, 64, 64,
- 64, 64, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 55, 55, 55,
- 55, 55, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 69, 69,
- 64, 64, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 8, 8, 8,
- 8, 8, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74,
- 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 13, 50, 50, 50, 73, 77,
- 78, 79, 4, 4, 80, 4, 4, 81, 82, 83, 4, 4, 4, 84, 8, 8,
- 8, 8, 11, 11, 11, 11, 11, 11, 11, 11, 85, 0, 0, 0, 0, 0,
- 0, 86, 0, 4, 0, 0, 0, 8, 8, 8, 0, 0, 87, 88, 89, 0,
- 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91,
- 4, 4, 92, 92, 92, 92, 92, 92, 92, 92, 50, 50, 50, 93, 93, 93,
- 93, 93, 53, 53, 53, 53, 53, 53, 13, 13, 94, 94, 94, 94, 94, 94,
- 94, 94, 94, 94, 94, 94, 94, 94, 94, 0, 95, 0, 96, 97, 98, 99,
- 99, 99, 99,100,101,102,102,102,102,103,104,104,104,105, 52, 52,
- 52, 52, 52, 0,104,104, 0, 0, 0,102, 52, 52, 0, 0, 0, 0,
- 52,106, 0, 0, 0, 0, 0,102,102,107,102,102,102,102,102,108,
- 0, 0, 94, 94, 94, 94, 0, 0, 0, 0,109,109,109,109,109,109,
- 109,109,109,109,109,109,109,110,110,110,111,111,111,111,111,111,
- 111,111,111,111,111,111, 13, 13, 13, 13, 13, 13,112,112,112,112,
- 112,112, 0, 0,113, 4, 4, 4, 4, 4,114, 4, 4, 4, 4, 4,
- 4, 4,115,115,115, 0,116,116,116,116,117,117,117,117,117,117,
- 32, 32,118,118,119,120,120,120, 52, 52,121,121,121,121,122,121,
- 49, 49,123,123,123,123,123,123, 49, 49,124,124,124,124,124,124,
- 125,125, 53, 53, 53, 4, 4,126,127, 54, 54, 54, 54, 54,125,125,
- 125,125,128,128,128,128,128,128,128,128, 4,129, 18, 18, 18, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,130, 0, 21,
- 21, 21, 8, 0,131, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21,
- 21,132, 0, 0, 1, 2, 1, 2,133,101,102,134, 52, 52, 52, 52,
- 0, 0,135,135,135,135,135,135,135,135, 0, 0, 0, 0, 11, 11,
- 11, 11, 11, 0, 11, 11, 11, 0, 0,136,137,137,138,138,138,138,
- 139, 0,140,140,140,141,141,142,142,142,143,143,144,144,144,144,
- 144,144,145,145,145,145,145,146,146,146,147,147,147,148,148,148,
- 148,148,149,149,149,150,150,150,150,150,151,151,151,151,151,151,
- 151,151,152,152,152,152,153,153,154,154,155,155,155,155,155,155,
- 156,156,157,157,158,158,158,158,158,158,159,159,160,160,160,160,
- 160,160,161,161,161,161,161,161,162,162,163,163,163,163,164,164,
- 164,164,165,165,165,165,166,166,167,167,168,168,168,168,168,168,
- 168,168,169,169,169,169,169,169,169,169,170,170,170,170,170,170,
- 170,170,171,171,171,171,171,171,171,171,172,172,172,172,172,172,
- 172,172,173,173,173,174,174,174,174,174,175,175,175,175,175,175,
- 176,176,177,177,177,177,177,177,177,177,178,178,178,178,178,179,
- 179,179,180,180,180,180,180,181,181,181,182,182,182,182,182,182,
- 183, 43,184,184,184,184,184,184,184,184,185,185,185,186,186,186,
- 186,186,187,187,187,188,187,187,187,187,189,189,189,189,189,189,
- 189,189,190,190,190,190,190,190,190,190,191,191,191,191,191,191,
- 191,191,192,192,192,192,192,192, 66, 66,193,193,193,193,193,193,
- 193,193,194,194,194,194,194,194,194,194,195,195,195,195,195,195,
- 195,195,196,196,196,196,196,196,196,196,197,197,197,197,197,197,
- 197,197,198,198,198,198,198,198,198,198,199,199,199,199,199,200,
- 200,200,200,200,200,200,201,201,201,201,202,202,202,202,202,202,
- 202,203,203,203,203,203,203,203,203,203,204,204,204,204,204,204,
- 205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206,
- 206,206,110,110,110,110, 39, 39, 39, 39,207,207,207,207,207,207,
- 207,207,208,208,208,208,208,208,208,208,209,209,209,209,209,209,
- 209,209,112,112,112,112,112,112,112,112,112,112,112,112,210,210,
- 210,210,211,211,211,211,211,211,211,211,212,212,212,212,212,212,
- 212,212,213,213,213,213,213,213,213,213,214,214,214,214,214,214,
- 214,214,214,214,214,214,214,214,215, 94,216,216,216,216,216,216,
- 216,216,217,217,217,217,217,217,217,217,218, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 219,220,220,220,220,220,220,220,220,220,221,221,221,221,221,221,
- 221,221,221,221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 222,223,224, 0,225, 0, 0, 0, 0, 0,226,226,226,226,226,226,
- 226,226, 91, 91, 91, 91, 91, 91, 91, 91,227,227,227,227,227,227,
- 227,227,228,228,228,228,228,228,228,228,229,229,229,229,229,229,
- 229,229,230,230,230,230,230,230,230,230,231, 0, 0, 0, 0, 0,
- 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 1, 2,
- 2, 2, 2, 2, 3, 0, 0, 0, 4, 0, 2, 2, 2, 2, 2, 3,
- 2, 2, 2, 2, 5, 0, 2, 5, 6, 0, 7, 7, 7, 7, 8, 9,
- 8, 10, 8, 11, 8, 8, 8, 8, 8, 8, 12, 13, 13, 13, 14, 14,
- 14, 14, 14, 15, 14, 14, 16, 17, 17, 17, 17, 17, 17, 17, 18, 19,
- 19, 19, 19, 19, 19, 19, 20, 21, 20, 22, 20, 20, 23, 23, 20, 20,
- 20, 20, 22, 20, 24, 7, 7, 25, 20, 20, 26, 20, 20, 20, 20, 20,
- 20, 21, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30,
- 30, 30, 31, 31, 31, 31, 32, 20, 20, 20, 33, 33, 33, 33, 34, 35,
- 33, 33, 33, 36, 33, 33, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39,
- 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43,
- 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46,
- 46, 47, 48, 48, 48, 48, 49, 49, 49, 49, 49, 50, 51, 49, 52, 52,
- 52, 52, 53, 53, 53, 53, 53, 53, 54, 53, 55, 55, 55, 55, 56, 56,
- 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60,
- 60, 60, 60, 60, 61, 62, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65,
- 0, 0, 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 70,
- 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74,
- 74, 74, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78,
- 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81, 82, 7,
- 7, 7, 83, 7, 84, 85, 0, 84, 86, 0, 2, 87, 88, 2, 2, 2,
- 2, 89, 90, 87, 91, 2, 2, 2, 92, 2, 2, 2, 2, 93, 0, 0,
- 0, 86, 1, 0, 0, 94, 0, 95, 96, 0, 4, 0, 0, 0, 0, 0,
- 0, 4, 97, 97, 97, 97, 98, 98, 98, 98, 13, 13, 13, 13, 99, 99,
- 99, 99,100,100,100,100, 0,101, 0, 0,102,100,103,104, 0, 0,
- 100, 0,105,106,106,106,106,106,106,106,106,106,107,105,108,109,
- 109,109,109,109,109,109,109,109,110,108,111,111,111,111,112, 55,
- 55, 55, 55, 55, 55,113,109,109,109,110,109,109, 0, 0,114,114,
- 114,114,115,115,115,115,116,116,116,116,117,117,117,117, 96, 2,
- 2, 2, 2, 2, 94, 2,118,118,118,118,119,119,119,119,120,120,
- 120,120,121,121,121,121,121,121,121,122,123,123,123,123,124,124,
- 124,124,124,124,124,125,126,126,126,126,127,127,127,127,128,128,
- 128,128, 2, 2, 3, 2, 2,129,130, 0,131,131,131,131,132, 17,
- 17, 18, 20, 20, 20,133, 7, 7, 7,134, 20, 20, 20, 23, 0,135,
- 109,109,109,109,109,136,137,137,137,137, 0, 0, 0,138,139,139,
- 139,139,140,140,140,140, 84, 0, 0, 0,141,141,141,141,142,142,
- 142,142,143,143,143,143,144,144,144,144,145,145,145,145,146,146,
- 146,146,147,147,147,147,148,148,148,148,149,149,149,149,150,150,
- 150,150,151,151,151,151,152,152,152,152,153,153,153,153,154,154,
- 154,154,155,155,155,155,156,156,156,156,157,157,157,157,158,158,
- 158,158,159,159,159,159,160,160,160,160,161,161,161,161,162,162,
- 162,162,163,163,163,163,164,164,164,164,165,165,165,165,166,166,
- 166,166,167,167,167,167,168,168,168,168,169,169,169,169,170,170,
- 170,170,171,171,171,171,172,172,172,172,173,173,173,173,174,174,
- 174,174,175,175,175,175,176,176,176,176,177,177,177,177,178,178,
- 178,178,179,179,179,179,180,180,180,180,181,181,181,181,182,182,
- 182,182,183,183,183,183,184, 45, 45, 45,185,185,185,185,186,186,
- 186,186,187,187,187,187,188,188,188,188,188,188,189,188,190,190,
- 190,190,191,191,191,191,192,192,192,192,193,193,193,193,194,194,
- 194,194,195,195,195,195,196,196,196,196,197,197,197,197,198,198,
- 198,198,199,199,199,199,200,200,200,200,201,201,201,201,202,202,
- 202,202,203,203,203,203,204,204,204,204,205,205,205,205,206,206,
- 206,206,207,207,207,207,208,208,208,208,209,209,209,209,210,210,
- 210,210,211,211,211,211,212,212,212,212,213,213,213,213,214,214,
- 214,214,215,215,215,215,216,217,217,217,218,218,218,218,217,217,
- 217,217,219,106,106,106,106,109,109,109,220,220,220,220,221,221,
- 221,221, 0,222, 86, 0, 0, 0,222, 7, 82,138, 7, 0, 0, 0,
- 223, 86,224,224,224,224,225,225,225,225,226,226,226,226,227,227,
- 227,227,228,228,228,228,229, 0, 0, 0, 0, 0, 0, 0, 0, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 0, 19, 0,
- 0, 0, 0, 0, 26, 26, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9,
- 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 9, 9, 55, 55, 55, 55,
- 55, 55, 6, 6, 6, 6, 6, 1, 1, 6, 6, 4, 4, 4, 4, 4,
- 4, 4, 4, 14, 14, 14, 14, 14, 14, 14, 3, 3, 3, 3, 3, 0,
- 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 1, 1, 1,
- 3, 3, 1, 3, 3, 3, 37, 37, 37, 37, 38, 38, 38, 38, 64, 64,
- 64, 64, 90, 90, 90, 90, 95, 95, 95, 95, 3, 3, 0, 3, 7, 7,
- 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 0, 0, 7, 7, 5, 5,
- 5, 5, 11, 11, 11, 11, 10, 10, 10, 10, 21, 21, 21, 21, 22, 22,
- 22, 22, 23, 23, 23, 23, 16, 16, 16, 16, 20, 20, 20, 20, 36, 36,
- 36, 36, 24, 24, 24, 24, 24, 24, 24, 0, 18, 18, 18, 18, 25, 25,
- 25, 25, 25, 0, 0, 0, 0, 25, 25, 25, 33, 33, 33, 33, 8, 8,
- 8, 8, 8, 8, 8, 0, 12, 12, 12, 12, 30, 30, 30, 30, 29, 29,
- 29, 29, 28, 28, 28, 28, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35,
- 35, 0, 0, 0, 35, 35, 45, 45, 45, 45, 44, 44, 44, 44, 44, 0,
- 0, 0, 43, 43, 43, 43, 46, 46, 46, 46, 31, 31, 31, 31, 32, 32,
- 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 52, 52,
- 52, 52, 58, 58, 58, 58, 54, 54, 54, 54, 91, 91, 91, 91, 62, 62,
- 62, 62, 76, 76, 76, 76, 93, 93, 93, 93, 70, 70, 70, 70, 73, 73,
- 73, 73, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1,
- 0, 0, 1, 1, 0, 0, 19, 19, 9, 9, 9, 9, 9, 6, 19, 9,
- 9, 9, 9, 9, 19, 19, 9, 9, 9, 19, 6, 19, 19, 19, 19, 19,
- 19, 9, 0, 0, 0, 19, 0, 0, 9, 0, 0, 0, 19, 19, 27, 27,
- 27, 27, 56, 56, 56, 56, 61, 61, 61, 61, 13, 13, 13, 13, 0, 13,
- 0, 13, 0, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 0, 15,
- 15, 15, 15, 15, 15, 15, 15, 1, 1, 0, 0, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 0, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12,
- 12, 0, 39, 39, 39, 39, 86, 86, 86, 86, 77, 77, 77, 77, 79, 79,
- 79, 79, 60, 60, 60, 60, 65, 65, 65, 65, 75, 75, 75, 75, 69, 69,
- 69, 69, 69, 69, 0, 69, 74, 74, 74, 74, 84, 84, 84, 84, 84, 84,
- 84, 0, 68, 68, 68, 68, 92, 92, 92, 92, 87, 87, 87, 87, 19, 9,
- 19, 19, 19, 19, 0, 0, 2, 2, 2, 2, 19, 19, 19, 4, 3, 3,
- 0, 0, 1, 1, 6, 6, 0, 0, 17, 17, 17, 17, 0, 0, 49, 49,
- 49, 49, 0, 1, 1, 1, 71, 71, 71, 71, 67, 67, 67, 67, 42, 42,
- 42, 42, 41, 41, 41, 41,118,118,118,118, 53, 53, 53, 53, 59, 59,
- 59, 59, 40, 40, 40, 40, 51, 51, 51, 51, 50, 50, 50, 50,135,135,
- 135,135,106,106,106,106,104,104,104,104,110,110,110,110, 47, 47,
- 47, 47, 81, 81, 81, 81,120,120,120,120,116,116,116,116,128,128,
- 128,128, 66, 66, 66, 66, 72, 72, 72, 72, 98, 98, 98, 98, 97, 97,
- 97, 97, 57, 57, 57, 57, 88, 88, 88, 88,117,117,117,117,112,112,
- 112,112, 78, 78, 78, 78, 83, 83, 83, 83, 82, 82, 82, 82,122,122,
- 122,122, 89, 89, 89, 89,130,130,130,130,144,144,144,144,156,156,
- 156,156,147,147,147,147,148,148,148,148,153,153,153,153,149,149,
- 149,149, 94, 94, 94, 94, 85, 85, 85, 85,101,101,101,101, 96, 96,
- 96, 96,111,111,111,111,100,100,100,100,100, 36, 36, 36,108,108,
- 108,108,129,129,129,129,109,109,109,109,107,107,107,107,107,107,
- 107, 1,137,137,137,137,124,124,124,124,123,123,123,123,114,114,
- 114,114,102,102,102,102,126,126,126,126,142,142,142,142,125,125,
- 125,125,154,154,154,154,150,150,150,150,141,141,141,141,140,140,
- 140,140,121,121,121,121,133,133,133,133,134,134,134,134,138,138,
- 138,138,143,143,143,143,145,145,145,145, 63, 63, 63, 63, 80, 80,
- 80, 80,127,127,127,127,115,115,115,115,103,103,103,103,119,119,
- 119,119,146,146,146,146, 99, 99, 99, 99,136,139, 0, 0,155,155,
- 155,155,136,136,136,136, 17, 15, 15, 15,139,139,139,139,105,105,
- 105,105, 0, 0, 0, 1, 0, 0, 1, 1,131,131,131,131,151,151,
- 151,151,152,152,152,152,113,113,113,113,132,132,132,132, 15, 0,
- 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 10,
+ 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17,
+ 17, 17, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 2, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17, 17, 17, 17, 17,
+ 17, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2,
+ 2, 2, 39, 39, 39, 39, 39, 39, 39, 2, 86, 86, 86, 86, 86, 86,
+ 86, 86, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 2, 2,
+ 2, 2, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 19, 19, 19, 19,
+ 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 2, 2, 2,
+ 2, 2, 19, 19, 2, 19, 2, 19, 19, 19, 19, 19, 2, 2, 2, 2,
+ 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 60, 2, 2, 2, 0, 0, 2, 2, 2, 2,
+ 2, 2, 65, 65, 65, 65, 65, 65, 65, 65, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 2, 2,
+ 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 74, 74, 74, 74, 74, 74,
+ 74, 74, 74, 74, 74, 74, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 74, 12, 12, 12, 12, 12, 2, 2, 2, 84, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 84, 84, 84, 84, 2, 0, 84, 84, 2, 2, 2, 2,
+ 84, 84, 33, 33, 33, 33, 33, 33, 33, 2, 68, 68, 68, 68, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 68, 68, 68, 68, 68, 68,
+ 2, 2, 68, 68, 2, 2, 68, 68, 68, 68, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 2, 2, 2, 2, 2, 2, 2, 2, 92, 92, 92,
+ 92, 92, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 2, 2, 30, 30, 30, 30, 30, 30, 2, 19, 19, 19, 0, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 9, 19, 19, 19, 19, 0, 0, 2, 2,
+ 2, 2, 87, 87, 87, 87, 87, 87, 2, 2, 87, 87, 2, 2, 2, 2,
+ 2, 2, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12,
+ 12, 12, 13, 13, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19,
+ 19, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14, 14, 14, 14, 2,
+ 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 3, 3, 3, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
+ 2, 3, 1, 1, 1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0,
+ 0, 0, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2,
+ 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 2, 2, 12, 12, 12, 12,
+ 12, 12, 2, 2, 12, 12, 12, 2, 2, 2, 2, 0, 0, 0, 0, 0,
+ 2, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49, 49, 49, 2, 49, 49,
+ 2, 49, 49, 49, 49, 49, 49, 49, 2, 2, 49, 49, 49, 2, 2, 2,
+ 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2,
+ 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 2, 2, 2, 2, 2,
+ 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 2, 2, 2, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0,
+ 0, 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 42, 42, 42, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,118,118,118,118,118,118,
+ 118,118,118,118,118, 2, 2, 2, 2, 2, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53, 2, 53, 59, 59, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 2, 2, 2, 2, 59, 59, 59, 59, 59, 59,
+ 2, 2, 40, 40, 40, 40, 40, 40, 40, 40, 51, 51, 51, 51, 51, 51,
+ 51, 51, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
+ 2, 2, 50, 50, 2, 2, 2, 2, 2, 2,135,135,135,135,135,135,
+ 135,135,135,135,135,135, 2, 2, 2, 2,106,106,106,106,106,106,
+ 106,106,104,104,104,104,104,104,104,104,104,104,104,104, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2,104,161,161,161,161,161,161,
+ 161,161,161,161,161, 2,161,161,161,161,161,161,161, 2,161,161,
+ 2,161,161,161, 2,161,161,161,161,161,161,161, 2,161,161, 2,
+ 2, 2,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+ 110, 2,110,110,110,110,110,110, 2, 2, 19, 19, 19, 19, 19, 19,
+ 2, 19, 19, 2, 19, 19, 19, 19, 19, 19, 47, 47, 47, 47, 47, 47,
+ 2, 2, 47, 2, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2,
+ 2, 47, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
+ 2, 81,120,120,120,120,120,120,120,120,116,116,116,116,116,116,
+ 116,116,116,116,116,116,116,116,116, 2, 2, 2, 2, 2, 2, 2,
+ 2,116,128,128,128,128,128,128,128,128,128,128,128, 2,128,128,
+ 2, 2, 2, 2, 2,128,128,128,128,128, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 2, 2, 2, 66, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 2, 2, 2, 2, 2, 72, 98, 98, 98, 98, 98, 98,
+ 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 2, 2, 2, 2, 97, 97,
+ 97, 97, 2, 2, 97, 97, 97, 97, 97, 97, 57, 57, 57, 57, 2, 57,
+ 57, 2, 2, 2, 2, 2, 57, 57, 57, 57, 57, 57, 57, 57, 2, 57,
+ 57, 57, 2, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 57, 57, 57, 2, 2, 2,
+ 2, 57, 57, 2, 2, 2, 2, 2, 2, 2, 88, 88, 88, 88, 88, 88,
+ 88, 88,117,117,117,117,117,117,117,117,112,112,112,112,112,112,
+ 112,112,112,112,112,112,112,112,112, 2, 2, 2, 2,112,112,112,
+ 112,112, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
+ 2, 2, 2, 78, 78, 78, 78, 78, 78, 78, 83, 83, 83, 83, 83, 83,
+ 83, 83, 83, 83, 83, 83, 83, 83, 2, 2, 82, 82, 82, 82, 82, 82,
+ 82, 82, 82, 82, 82, 2, 2, 2, 2, 2,122,122,122,122,122,122,
+ 122,122,122,122, 2, 2, 2, 2, 2, 2, 2,122,122,122,122, 2,
+ 2, 2, 2,122,122,122,122,122,122,122, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 2, 2, 2, 2, 2, 2, 2,130,130,130,130,130,130,
+ 130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2,130,130,130,130,
+ 130,130,144,144,144,144,144,144,144,144,144,144, 2, 2, 2, 2,
+ 2, 2,156,156,156,156,156,156,156,156,156,156, 2,156,156,156,
+ 2, 2,156,156, 2, 2, 2, 2, 2, 2,147,147,147,147,147,147,
+ 147,147,148,148,148,148,148,148,148,148,148,148, 2, 2, 2, 2,
+ 2, 2,158,158,158,158,158,158,158,158,158,158, 2, 2, 2, 2,
+ 2, 2,153,153,153,153,153,153,153,153,153,153,153,153, 2, 2,
+ 2, 2,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+ 149, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 2, 2,
+ 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 85, 2, 2,101,101,101,101,101,101,
+ 101,101,101, 2, 2, 2, 2, 2, 2, 2,101,101, 2, 2, 2, 2,
+ 2, 2, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 2,
+ 96, 96,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111, 2,100,100,100,100,100,100,100,100, 2, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 2, 2, 2,108,108,108,108,108,108,
+ 108,108,108,108, 2,108,108,108,108,108,108,108,108,108,108,108,
+ 108, 2,129,129,129,129,129,129,129, 2,129, 2,129,129,129,129,
+ 2,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+ 2,129,129,129, 2, 2, 2, 2, 2, 2,109,109,109,109,109,109,
+ 109,109,109,109,109, 2, 2, 2, 2, 2,109,109, 2, 2, 2, 2,
+ 2, 2,107,107,107,107, 2,107,107,107,107,107,107,107,107, 2,
+ 2,107,107, 2, 2,107,107,107,107,107,107,107,107,107,107,107,
+ 107,107,107, 2,107,107,107,107,107,107,107, 2,107,107, 2,107,
+ 107,107,107,107, 2, 1,107,107,107,107,107, 2, 2,107,107,107,
+ 2, 2,107, 2, 2, 2, 2, 2, 2,107, 2, 2, 2, 2, 2,107,
+ 107,107,107,107,107,107, 2, 2,107,107,107,107,107,107,107, 2,
+ 2, 2,137,137,137,137,137,137,137,137,137,137,137,137, 2,137,
+ 137,137,137,137, 2, 2, 2, 2, 2, 2,124,124,124,124,124,124,
+ 124,124,124,124, 2, 2, 2, 2, 2, 2,123,123,123,123,123,123,
+ 123,123,123,123,123,123,123,123, 2, 2,114,114,114,114,114,114,
+ 114,114,114,114,114,114,114, 2, 2, 2,114,114, 2, 2, 2, 2,
+ 2, 2, 32, 32, 32, 32, 32, 2, 2, 2,102,102,102,102,102,102,
+ 102,102,102,102, 2, 2, 2, 2, 2, 2,126,126,126,126,126,126,
+ 126,126,126,126,126, 2, 2,126,126,126,126,126,126,126, 2, 2,
+ 2, 2,126,126,126,126,126,126,126, 2,142,142,142,142,142,142,
+ 142,142,142,142,142,142, 2, 2, 2, 2,125,125,125,125,125,125,
+ 125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2,125,154,154,154,154,154,154,154, 2, 2,154, 2, 2,154,154,
+ 154,154,154,154,154,154, 2,154,154, 2,154,154,154,154,154,154,
+ 154,154,154,154,154,154,154,154, 2,154,154, 2, 2,154,154,154,
+ 154,154,154,154, 2, 2, 2, 2, 2, 2,150,150,150,150,150,150,
+ 150,150, 2, 2,150,150,150,150,150,150,150,150,150,150,150, 2,
+ 2, 2,141,141,141,141,141,141,141,141,140,140,140,140,140,140,
+ 140,140,140,140,140, 2, 2, 2, 2, 2,121,121,121,121,121,121,
+ 121,121,121, 2, 2, 2, 2, 2, 2, 2,133,133,133,133,133,133,
+ 133,133,133, 2,133,133,133,133,133,133,133,133,133,133,133,133,
+ 133, 2,133,133,133,133,133,133, 2, 2,133,133,133,133,133, 2,
+ 2, 2,134,134,134,134,134,134,134,134, 2, 2,134,134,134,134,
+ 134,134, 2,134,134,134,134,134,134,134,134,134,134,134,134,134,
+ 134, 2,138,138,138,138,138,138,138, 2,138,138, 2,138,138,138,
+ 138,138,138,138,138,138,138,138,138,138, 2, 2,138, 2,138,138,
+ 2,138,138,138, 2, 2, 2, 2, 2, 2,143,143,143,143,143,143,
+ 2,143,143, 2,143,143,143,143,143,143,143,143,143,143,143,143,
+ 143,143,143,143,143,143,143,143,143, 2,143,143, 2,143,143,143,
+ 143,143,143, 2, 2, 2, 2, 2, 2, 2,143,143, 2, 2, 2, 2,
+ 2, 2,145,145,145,145,145,145,145,145,145, 2, 2, 2, 2, 2,
+ 2, 2, 86, 2, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 63, 63,
+ 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 63, 63, 63, 63, 2, 2,
+ 2, 2,157,157,157,157,157,157,157,157,157,157,157, 2, 2, 2,
+ 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 2, 80, 2, 2, 2, 2, 2, 2, 2,127,127,127,127,127,127,
+ 127,127,127,127,127,127,127,127,127, 2, 79, 2, 2, 2, 2, 2,
+ 2, 2,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+ 115, 2,115,115, 2, 2, 2, 2,115,115,159,159,159,159,159,159,
+ 159,159,159,159,159,159,159,159,159, 2,159,159, 2, 2, 2, 2,
+ 2, 2,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+ 2, 2,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+ 2, 2,119,119, 2,119,119,119,119,119, 2, 2, 2, 2, 2,119,
+ 119,119,146,146,146,146,146,146,146,146,146,146,146, 2, 2, 2,
+ 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2,
+ 2, 99, 2, 2, 2, 2, 2, 2, 2, 99,136,139, 13, 13,155, 2,
+ 2, 2,136,136,136,136,136,136,136,136,155,155,155,155,155,155,
+ 155,155,155,155,155,155,155,155, 2, 2,136, 2, 2, 2, 2, 2,
+ 2, 2, 17, 17, 17, 17, 2, 17, 17, 17, 17, 17, 17, 17, 2, 17,
+ 17, 2, 17, 15, 15, 15, 15, 15, 15, 15, 17, 17, 17, 2, 2, 2,
+ 2, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17,
+ 17, 17,139,139,139,139,139,139,139,139,139,139,139,139, 2, 2,
+ 2, 2,105,105,105,105,105,105,105,105,105,105,105, 2, 2, 2,
+ 2, 2,105,105,105,105,105, 2, 2, 2,105, 2, 2, 2, 2, 2,
+ 2, 2,105,105, 2, 2,105,105,105,105, 1, 1, 1, 1, 1, 1,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2,
+ 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,131,131,131,131,131,131,
+ 131,131,131,131,131,131, 2, 2, 2, 2, 2, 2, 2,131,131,131,
+ 131,131, 2,131,131,131,131,131,131,131, 56, 56, 56, 56, 56, 56,
+ 56, 2, 56, 2, 2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, 2,
+ 56, 56, 56, 56, 56, 2, 2, 2, 2, 2,151,151,151,151,151,151,
+ 151,151,151,151,151,151,151, 2, 2, 2,151,151,151,151,151,151,
+ 2, 2,151,151, 2, 2, 2, 2,151,151,160,160,160,160,160,160,
+ 160,160,160,160,160,160,160,160,160, 2,152,152,152,152,152,152,
+ 152,152,152,152, 2, 2, 2, 2, 2,152, 30, 30, 30, 30, 2, 30,
+ 30, 2,113,113,113,113,113,113,113,113,113,113,113,113,113, 2,
+ 2,113,113,113,113,113,113,113,113, 2,132,132,132,132,132,132,
+ 132,132,132,132,132,132, 2, 2, 2, 2,132,132, 2, 2, 2, 2,
+ 132,132, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 2, 3, 2,
+ 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3,
+ 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
+ 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3,
+ 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 15, 0, 0, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 13, 2, 2, 2, 2, 2,
+ 2, 2, 13, 13, 13, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
+ 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 10,
9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -6424,104 +5046,376 @@ _hb_ucd_u8[13344] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
};
static const uint16_t
-_hb_ucd_u16[4848] =
+_hb_ucd_u16[9200] =
{
0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31,
32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39,
9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13,
- 13, 13, 13, 35, 9, 42, 11, 11, 43, 44, 32, 45, 46, 47, 47, 48,
- 49, 50, 47, 47, 51, 32, 52, 53, 47, 47, 47, 47, 47, 54, 55, 56,
- 57, 58, 47, 32, 59, 47, 47, 47, 47, 47, 60, 53, 61, 47, 62, 63,
- 47, 64, 65, 66, 47, 67, 47, 47, 47, 47, 47, 47, 47, 68, 69, 32,
- 70, 47, 47, 71, 72, 73, 74, 75, 76, 47, 47, 77, 78, 79, 80, 81,
- 82, 47, 47, 83, 84, 85, 86, 87, 82, 47, 47, 77, 88, 47, 80, 89,
- 90, 47, 47, 91, 92, 93, 80, 94, 95, 47, 47, 96, 97, 98, 99, 100,
- 101, 47, 47, 102, 103, 104, 80, 105, 106, 47, 47, 91, 107, 108, 80, 109,
- 110, 47, 47, 111, 112, 113, 80, 114, 90, 47, 47, 47, 115, 116, 99, 117,
- 47, 47, 47, 118, 119, 120, 66, 66, 47, 47, 47, 121, 122, 123, 47, 47,
- 124, 125, 126, 127, 47, 47, 47, 128, 129, 32, 32, 130, 131, 132, 66, 66,
- 47, 47, 133, 134, 120, 135, 136, 137, 138, 139, 9, 9, 9, 11, 11, 140,
- 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 142, 143,
- 47, 144, 9, 9, 9, 9, 9, 145, 146, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 147, 47, 148, 149, 47, 47, 47, 47, 150, 151,
- 47, 152, 47, 153, 47, 152, 47, 152, 47, 47, 47, 154, 155, 156, 157, 143,
- 158, 157, 47, 47, 159, 47, 47, 47, 160, 47, 161, 47, 47, 47, 47, 47,
- 47, 47, 162, 163, 164, 47, 47, 47, 47, 47, 47, 47, 47, 165, 144, 144,
- 47, 166, 47, 47, 47, 167, 168, 169, 157, 157, 170, 171, 32, 32, 32, 32,
- 172, 47, 47, 173, 174, 120, 175, 176, 177, 47, 178, 61, 47, 47, 179, 180,
- 47, 47, 181, 182, 183, 61, 47, 184, 11, 9, 9, 9, 66, 185, 186, 187,
- 11, 11, 188, 27, 27, 27, 189, 190, 11, 191, 27, 27, 32, 32, 32, 32,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 192, 13, 13, 13, 13, 13, 13,
- 193, 193, 193, 193, 193, 194, 193, 11, 195, 195, 195, 196, 197, 198, 198, 197,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 27, 208, 208, 208, 209, 210, 32,
- 211, 212, 213, 214, 215, 143, 216, 216, 217, 218, 219, 144, 220, 221, 144, 222,
- 223, 223, 223, 223, 223, 223, 223, 223, 224, 144, 225, 144, 144, 144, 144, 226,
- 144, 227, 223, 228, 144, 229, 230, 144, 144, 144, 144, 144, 144, 144, 143, 143,
- 143, 231, 144, 144, 144, 144, 232, 143, 144, 144, 144, 144, 144, 144, 144, 144,
- 144, 144, 144, 233, 234, 144, 144, 235, 144, 144, 144, 144, 144, 144, 236, 144,
- 144, 144, 144, 144, 144, 144, 237, 238, 143, 239, 144, 144, 240, 223, 241, 223,
- 242, 243, 223, 223, 223, 244, 223, 245, 144, 144, 144, 223, 246, 144, 144, 144,
- 9, 9, 9, 11, 11, 11, 247, 248, 13, 13, 13, 13, 13, 13, 249, 250,
- 11, 11, 11, 47, 47, 47, 251, 252, 47, 47, 47, 47, 47, 47, 32, 32,
- 253, 254, 255, 256, 257, 258, 66, 66, 259, 260, 261, 262, 263, 47, 47, 47,
- 47, 264, 146, 47, 47, 47, 47, 265, 47, 266, 47, 47, 144, 144, 144, 47,
- 144, 144, 267, 144, 268, 269, 144, 144, 267, 144, 144, 269, 144, 144, 144, 144,
- 47, 47, 47, 47, 144, 144, 144, 144, 47, 270, 47, 47, 47, 47, 47, 47,
- 47, 144, 144, 144, 144, 47, 47, 184, 271, 47, 61, 47, 13, 13, 272, 273,
- 13, 274, 47, 47, 47, 47, 275, 276, 31, 277, 278, 279, 13, 13, 13, 280,
- 281, 282, 283, 284, 285, 11, 11, 286, 287, 47, 288, 289, 47, 47, 47, 290,
- 291, 47, 47, 292, 293, 157, 32, 294, 61, 47, 295, 47, 296, 297, 47, 47,
- 70, 47, 47, 298, 299, 300, 301, 61, 47, 47, 302, 303, 304, 305, 47, 306,
- 47, 47, 47, 307, 58, 308, 309, 310, 47, 47, 47, 11, 11, 311, 312, 11,
- 11, 11, 11, 11, 47, 47, 313, 157, 314, 314, 314, 314, 314, 314, 314, 314,
- 315, 315, 315, 315, 315, 315, 315, 315, 11, 316, 317, 47, 47, 47, 47, 47,
- 47, 47, 47, 318, 31, 319, 47, 47, 47, 47, 47, 320, 321, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 322, 32, 323, 32, 324, 325, 326, 327, 47,
- 47, 47, 47, 47, 47, 47, 47, 328, 329, 2, 3, 4, 5, 330, 331, 332,
- 47, 333, 47, 47, 47, 47, 334, 335, 336, 143, 143, 337, 216, 216, 216, 338,
- 339, 144, 144, 144, 144, 144, 144, 340, 341, 341, 341, 341, 341, 341, 341, 341,
- 47, 47, 47, 47, 47, 47, 342, 143, 47, 47, 343, 47, 344, 47, 47, 60,
- 47, 345, 47, 47, 47, 346, 216, 216, 9, 9, 145, 11, 11, 47, 47, 47,
- 47, 47, 157, 9, 9, 145, 11, 11, 47, 47, 47, 47, 47, 47, 345, 66,
- 47, 47, 47, 47, 47, 347, 47, 348, 47, 47, 349, 143, 143, 143, 47, 350,
- 47, 351, 47, 345, 66, 66, 66, 66, 47, 47, 47, 352, 143, 143, 143, 143,
- 353, 47, 47, 354, 143, 66, 47, 355, 47, 356, 143, 143, 357, 47, 358, 66,
- 47, 47, 47, 359, 47, 360, 47, 360, 47, 359, 142, 143, 143, 143, 143, 143,
- 9, 9, 9, 9, 11, 11, 11, 361, 47, 47, 362, 157, 157, 157, 157, 157,
- 143, 143, 143, 143, 143, 143, 143, 143, 47, 47, 363, 47, 47, 47, 47, 47,
- 47, 356, 364, 47, 60, 365, 66, 66, 47, 47, 47, 47, 366, 143, 47, 47,
- 367, 47, 47, 354, 368, 369, 370, 371, 177, 47, 47, 372, 373, 47, 47, 157,
- 95, 47, 374, 375, 376, 47, 47, 377, 177, 47, 47, 378, 379, 380, 381, 143,
- 47, 47, 382, 383, 32, 32, 32, 32, 47, 47, 359, 47, 47, 384, 169, 157,
- 90, 47, 47, 111, 385, 386, 387, 32, 47, 47, 47, 388, 389, 390, 47, 47,
- 47, 47, 47, 391, 392, 157, 157, 157, 47, 47, 393, 394, 395, 396, 32, 32,
- 47, 47, 47, 397, 398, 157, 66, 66, 47, 47, 399, 400, 157, 157, 157, 157,
- 47, 141, 401, 402, 144, 144, 144, 144, 47, 47, 382, 403, 66, 66, 66, 66,
- 9, 9, 9, 9, 11, 11, 126, 404, 47, 47, 47, 405, 406, 157, 157, 157,
- 47, 47, 47, 47, 47, 407, 408, 409, 410, 47, 47, 411, 412, 413, 47, 47,
- 414, 415, 66, 66, 47, 47, 47, 47, 47, 47, 393, 416, 417, 126, 143, 418,
- 47, 152, 419, 420, 32, 32, 32, 32, 47, 47, 47, 353, 421, 157, 47, 47,
- 422, 423, 157, 157, 157, 157, 157, 157, 47, 47, 47, 47, 47, 47, 47, 424,
- 47, 47, 47, 47, 143, 425, 426, 427, 216, 216, 216, 216, 216, 216, 216, 66,
- 47, 47, 47, 205, 205, 205, 205, 205, 47, 47, 47, 47, 47, 47, 300, 66,
- 47, 47, 47, 47, 47, 47, 47, 428, 47, 47, 47, 429, 430, 431, 432, 47,
- 9, 9, 9, 9, 9, 9, 11, 11, 143, 433, 66, 66, 66, 66, 66, 66,
- 47, 47, 47, 47, 384, 434, 409, 409, 435, 436, 27, 27, 27, 27, 437, 409,
- 47, 438, 205, 205, 205, 205, 205, 205, 144, 144, 144, 144, 144, 144, 439, 440,
- 441, 144, 442, 144, 144, 144, 144, 144, 144, 144, 144, 144, 443, 144, 144, 144,
- 9, 444, 11, 445, 446, 11, 193, 9, 447, 448, 9, 449, 11, 9, 444, 11,
- 445, 446, 11, 193, 9, 447, 448, 9, 449, 11, 9, 444, 11, 445, 446, 11,
- 193, 9, 447, 448, 9, 449, 11, 9, 444, 11, 193, 9, 450, 451, 452, 453,
- 11, 454, 9, 455, 456, 457, 458, 11, 459, 9, 460, 11, 461, 157, 157, 157,
- 32, 32, 32, 462, 32, 32, 463, 464, 465, 466, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 47, 47, 47, 467, 468, 144, 144, 144,
- 47, 47, 47, 47, 47, 47, 469, 470, 47, 47, 47, 47, 349, 32, 32, 32,
- 9, 9, 447, 11, 471, 300, 66, 66, 143, 143, 472, 473, 143, 143, 143, 143,
- 143, 143, 474, 143, 143, 143, 143, 143, 47, 47, 47, 47, 47, 47, 47, 223,
- 475, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 476,
- 144, 144, 144, 144, 144, 144, 144, 157, 205, 205, 205, 205, 205, 205, 205, 205,
+ 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50,
+ 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58,
+ 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66,
+ 48, 67, 68, 69, 48, 70, 71, 48, 72, 73, 48, 48, 74, 32, 75, 32,
+ 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101,
+ 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113,
+ 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124,
+ 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135,
+ 136, 48, 48, 137, 138, 139, 140, 140, 141, 48, 142, 143, 144, 145, 140, 140,
+ 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 140, 140,
+ 48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 168, 169, 48, 48,
+ 168, 48, 48, 170, 171, 172, 48, 48, 48, 171, 48, 48, 48, 173, 174, 175,
+ 48, 176, 9, 9, 9, 9, 9, 177, 178, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183,
+ 48, 184, 48, 185, 48, 186, 187, 188, 48, 48, 48, 189, 190, 191, 192, 193,
+ 194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199,
+ 48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209,
+ 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 140, 140, 140,
+ 217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225,
+ 48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235,
+ 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 32,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 240, 13, 13, 13, 13, 13, 13,
+ 241, 242, 241, 241, 242, 243, 241, 244, 245, 245, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 272, 273, 274, 275, 209, 276, 277, 209, 278,
+ 279, 279, 279, 279, 279, 279, 279, 279, 280, 209, 281, 209, 209, 209, 209, 282,
+ 209, 283, 279, 284, 209, 285, 286, 209, 209, 209, 287, 140, 288, 140, 271, 271,
+ 271, 289, 209, 209, 209, 209, 290, 271, 209, 209, 209, 209, 209, 209, 209, 209,
+ 209, 209, 209, 291, 292, 209, 209, 293, 209, 209, 209, 209, 209, 209, 294, 209,
+ 209, 209, 209, 209, 209, 209, 295, 296, 271, 297, 209, 209, 298, 279, 299, 279,
+ 300, 301, 279, 279, 279, 302, 279, 303, 209, 209, 209, 279, 304, 209, 209, 305,
+ 209, 306, 209, 209, 209, 209, 209, 209, 9, 9, 9, 11, 11, 11, 307, 308,
+ 13, 13, 13, 13, 13, 13, 309, 310, 11, 11, 311, 48, 48, 48, 312, 313,
+ 48, 314, 315, 315, 315, 315, 32, 32, 316, 317, 318, 319, 320, 321, 140, 140,
+ 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 325,
+ 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331,
+ 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48,
+ 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209,
+ 48, 48, 48, 48, 209, 209, 209, 209, 48, 338, 48, 48, 48, 48, 48, 48,
+ 151, 209, 209, 209, 287, 48, 48, 229, 339, 48, 340, 140, 13, 13, 341, 342,
+ 13, 343, 48, 48, 48, 48, 344, 345, 31, 346, 347, 348, 13, 13, 13, 349,
+ 350, 351, 352, 353, 354, 355, 140, 356, 357, 48, 358, 359, 48, 48, 48, 360,
+ 361, 48, 48, 362, 363, 192, 32, 364, 64, 48, 365, 48, 366, 367, 48, 151,
+ 76, 48, 48, 368, 369, 370, 371, 372, 48, 48, 373, 374, 375, 376, 48, 377,
+ 48, 48, 48, 378, 379, 380, 381, 382, 383, 384, 315, 11, 11, 385, 386, 11,
+ 11, 11, 11, 11, 48, 48, 387, 192, 48, 48, 388, 48, 389, 48, 48, 206,
+ 390, 390, 390, 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 391, 391,
+ 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 140, 140,
+ 392, 393, 394, 395, 396, 48, 48, 48, 48, 48, 48, 397, 398, 399, 48, 48,
+ 48, 48, 48, 400, 209, 48, 48, 48, 48, 401, 48, 48, 402, 140, 140, 403,
+ 32, 404, 32, 405, 406, 407, 408, 409, 48, 48, 48, 48, 48, 48, 48, 410,
+ 411, 2, 3, 4, 5, 412, 413, 414, 48, 415, 48, 200, 416, 417, 418, 419,
+ 420, 48, 172, 421, 204, 204, 140, 140, 48, 48, 48, 48, 48, 48, 48, 71,
+ 422, 271, 271, 423, 272, 272, 272, 424, 425, 426, 427, 140, 140, 209, 209, 428,
+ 140, 140, 140, 140, 140, 140, 140, 140, 48, 151, 48, 48, 48, 100, 429, 430,
+ 48, 48, 431, 48, 432, 48, 48, 433, 48, 434, 48, 48, 435, 436, 140, 140,
+ 9, 9, 437, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 438, 11, 439,
+ 48, 48, 440, 48, 48, 48, 441, 442, 442, 443, 444, 445, 140, 140, 140, 140,
+ 48, 48, 48, 314, 48, 199, 440, 140, 446, 27, 27, 447, 140, 140, 140, 140,
+ 448, 48, 48, 449, 48, 450, 48, 451, 48, 200, 452, 140, 140, 140, 48, 453,
+ 48, 454, 48, 455, 140, 140, 140, 140, 48, 48, 48, 456, 271, 457, 271, 271,
+ 458, 459, 48, 460, 461, 462, 48, 463, 48, 464, 140, 140, 465, 48, 466, 467,
+ 48, 48, 48, 468, 48, 469, 48, 470, 48, 471, 472, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 196, 140, 140, 140, 9, 9, 9, 473, 11, 11, 11, 474,
+ 48, 48, 475, 192, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 271, 476,
+ 48, 48, 477, 478, 140, 140, 140, 140, 48, 464, 479, 48, 62, 480, 140, 48,
+ 481, 140, 140, 48, 482, 140, 48, 314, 483, 48, 48, 484, 485, 457, 486, 487,
+ 222, 48, 48, 488, 489, 48, 196, 192, 490, 48, 491, 492, 493, 48, 48, 494,
+ 222, 48, 48, 495, 496, 497, 498, 499, 48, 97, 500, 501, 140, 140, 140, 140,
+ 502, 503, 504, 48, 48, 505, 506, 192, 507, 83, 84, 508, 509, 510, 511, 512,
+ 48, 48, 48, 513, 514, 515, 478, 140, 48, 48, 48, 516, 517, 192, 140, 140,
+ 48, 48, 518, 519, 520, 521, 140, 140, 48, 48, 48, 522, 523, 192, 524, 140,
+ 48, 48, 525, 526, 192, 140, 140, 140, 48, 173, 527, 528, 314, 140, 140, 140,
+ 48, 48, 500, 529, 140, 140, 140, 140, 140, 140, 9, 9, 11, 11, 148, 530,
+ 531, 532, 48, 533, 534, 192, 140, 140, 140, 140, 535, 48, 48, 536, 537, 140,
+ 538, 48, 48, 539, 540, 541, 48, 48, 542, 543, 544, 48, 48, 48, 48, 196,
+ 84, 48, 518, 545, 546, 148, 175, 547, 48, 548, 549, 550, 140, 140, 140, 140,
+ 551, 48, 48, 552, 553, 192, 554, 48, 555, 556, 192, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 48, 557, 140, 140, 140, 100, 271, 558, 559, 560,
+ 48, 207, 140, 140, 140, 140, 140, 140, 272, 272, 272, 272, 272, 272, 561, 562,
+ 48, 48, 48, 48, 388, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 563,
+ 48, 48, 200, 564, 140, 140, 140, 140, 48, 48, 48, 48, 314, 140, 140, 140,
+ 48, 48, 48, 196, 48, 200, 370, 48, 48, 48, 48, 200, 192, 48, 204, 565,
+ 48, 48, 48, 566, 567, 568, 569, 570, 48, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 9, 9, 11, 11, 271, 571, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 572, 573, 574, 574, 575, 576, 140, 140, 140, 140, 577, 578,
+ 48, 48, 48, 48, 48, 48, 48, 440, 48, 48, 48, 48, 48, 199, 140, 140,
+ 196, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 579,
+ 48, 48, 580, 140, 140, 580, 581, 48, 48, 48, 48, 48, 48, 48, 48, 206,
+ 48, 48, 48, 48, 48, 48, 71, 151, 196, 582, 583, 140, 140, 140, 140, 140,
+ 32, 32, 584, 32, 585, 209, 209, 209, 209, 209, 209, 209, 323, 140, 140, 140,
+ 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 586, 209, 209, 209, 587, 588,
+ 589, 209, 590, 209, 209, 209, 288, 140, 209, 209, 209, 209, 591, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 271, 592, 209, 209, 209, 209, 209, 287, 271, 461,
+ 9, 593, 11, 594, 595, 596, 241, 9, 597, 598, 599, 600, 601, 9, 593, 11,
+ 602, 603, 11, 604, 605, 606, 607, 9, 608, 11, 9, 593, 11, 594, 595, 11,
+ 241, 9, 597, 607, 9, 608, 11, 9, 593, 11, 609, 9, 610, 611, 612, 613,
+ 11, 614, 9, 615, 616, 617, 618, 11, 619, 9, 620, 11, 621, 622, 622, 622,
+ 32, 32, 32, 623, 32, 32, 624, 625, 626, 627, 45, 140, 140, 140, 140, 140,
+ 628, 629, 140, 140, 140, 140, 140, 140, 630, 631, 632, 140, 140, 140, 140, 140,
+ 48, 48, 151, 633, 634, 140, 140, 140, 140, 48, 635, 140, 48, 48, 636, 637,
+ 140, 140, 140, 140, 140, 140, 638, 200, 48, 48, 48, 48, 639, 585, 140, 140,
+ 9, 9, 597, 11, 640, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 498,
+ 271, 271, 641, 642, 140, 140, 140, 140, 498, 271, 643, 644, 140, 140, 140, 140,
+ 645, 48, 646, 647, 648, 649, 650, 651, 652, 206, 653, 206, 140, 140, 140, 654,
+ 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 655, 655, 655, 209, 324,
+ 656, 209, 209, 209, 209, 209, 209, 209, 209, 209, 657, 140, 140, 140, 658, 209,
+ 659, 209, 209, 325, 660, 661, 324, 140, 209, 209, 209, 209, 209, 209, 209, 662,
+ 209, 209, 209, 209, 209, 663, 426, 426, 209, 209, 209, 209, 209, 209, 209, 323,
+ 209, 209, 209, 209, 209, 660, 325, 427, 325, 209, 209, 209, 664, 176, 209, 209,
+ 664, 209, 657, 661, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 657, 665,
+ 287, 209, 426, 288, 324, 176, 664, 287, 209, 666, 209, 209, 288, 140, 140, 192,
+ 48, 48, 48, 48, 48, 48, 140, 140, 48, 48, 48, 196, 48, 48, 48, 48,
+ 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 100, 140, 48, 204, 140, 140, 140, 140, 140, 140,
+ 48, 48, 48, 48, 71, 140, 140, 140, 667, 140, 668, 668, 668, 668, 668, 668,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140,
+ 391, 391, 391, 391, 391, 391, 391, 669, 391, 391, 391, 391, 391, 391, 391, 670,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3,
+ 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11,
+ 12, 13, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 20, 21, 21, 21, 22, 20, 21, 21, 21, 21,
+ 21, 23, 24, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 27, 28, 26,
+ 29, 30, 31, 32, 31, 31, 31, 31, 33, 34, 35, 31, 31, 31, 36, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 31, 31, 31, 31,
+ 37, 38, 37, 37, 37, 37, 37, 37, 37, 39, 31, 31, 31, 31, 31, 31,
+ 40, 40, 40, 40, 40, 40, 41, 26, 42, 42, 42, 42, 42, 42, 42, 43,
+ 44, 44, 44, 44, 44, 45, 44, 46, 47, 47, 47, 48, 37, 49, 31, 31,
+ 31, 50, 51, 31, 31, 31, 31, 31, 31, 31, 31, 31, 52, 31, 31, 31,
+ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 53, 55, 53, 53, 53,
+ 56, 57, 58, 59, 59, 60, 61, 62, 57, 63, 64, 65, 66, 59, 59, 67,
+ 68, 69, 70, 71, 71, 72, 73, 74, 69, 75, 76, 77, 78, 71, 79, 26,
+ 80, 81, 82, 83, 83, 84, 85, 86, 81, 87, 88, 26, 89, 83, 90, 91,
+ 92, 93, 94, 95, 95, 96, 97, 98, 93, 99, 100, 101, 102, 95, 95, 26,
+ 103, 104, 105, 106, 107, 104, 108, 109, 104, 105, 110, 26, 111, 108, 108, 112,
+ 113, 114, 115, 113, 113, 115, 113, 116, 114, 117, 118, 119, 120, 113, 121, 113,
+ 122, 123, 124, 122, 122, 124, 125, 126, 123, 127, 128, 128, 129, 122, 130, 26,
+ 131, 132, 133, 131, 131, 131, 131, 131, 132, 133, 134, 131, 135, 131, 131, 131,
+ 136, 137, 138, 139, 137, 137, 140, 141, 138, 142, 143, 137, 144, 137, 145, 26,
+ 146, 147, 147, 147, 147, 147, 147, 148, 147, 147, 147, 149, 26, 26, 26, 26,
+ 150, 151, 152, 152, 153, 152, 152, 154, 155, 154, 152, 156, 26, 26, 26, 26,
+ 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 157, 157, 157, 159, 158, 157,
+ 157, 157, 157, 158, 157, 157, 157, 160, 157, 160, 161, 162, 26, 26, 26, 26,
+ 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
+ 163, 163, 163, 163, 164, 164, 164, 164, 165, 166, 164, 164, 164, 164, 164, 167,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 171, 170, 169, 169, 169, 169,
+ 169, 170, 169, 169, 169, 169, 170, 171, 170, 169, 171, 169, 169, 169, 169, 169,
+ 169, 169, 170, 169, 169, 169, 169, 169, 169, 169, 169, 172, 169, 169, 169, 173,
+ 169, 169, 169, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
+ 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 178, 178, 178, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 181, 180, 182,
+ 183, 183, 184, 185, 186, 186, 187, 26, 188, 188, 189, 26, 190, 191, 192, 26,
+ 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 194, 193, 195, 193, 195,
+ 196, 197, 197, 198, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 199,
+ 197, 197, 197, 197, 197, 200, 177, 177, 177, 177, 177, 177, 177, 177, 201, 26,
+ 202, 202, 202, 203, 202, 204, 202, 204, 205, 202, 206, 206, 206, 207, 208, 26,
+ 209, 209, 209, 209, 209, 210, 209, 209, 209, 211, 209, 212, 193, 193, 193, 193,
+ 213, 213, 213, 214, 215, 215, 215, 215, 215, 215, 215, 216, 215, 215, 215, 217,
+ 215, 218, 215, 218, 215, 219, 9, 9, 9, 220, 26, 26, 26, 26, 26, 26,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 222, 221, 221, 221, 221, 221, 223,
+ 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 226, 227,
+ 228, 228, 228, 228, 228, 228, 228, 229, 228, 230, 231, 231, 231, 231, 231, 231,
+ 18, 232, 164, 164, 164, 164, 164, 233, 224, 26, 234, 9, 235, 236, 237, 238,
+ 2, 2, 2, 2, 239, 240, 2, 2, 2, 2, 2, 241, 242, 243, 2, 244,
+ 2, 2, 2, 2, 2, 2, 2, 245, 9, 9, 9, 9, 9, 9, 9, 9,
+ 14, 14, 246, 246, 14, 14, 14, 14, 246, 246, 14, 247, 14, 14, 14, 246,
+ 14, 14, 14, 14, 14, 14, 248, 14, 248, 14, 249, 250, 14, 14, 251, 252,
+ 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 256,
+ 0, 257, 2, 258, 0, 0, 0, 0, 259, 26, 9, 9, 9, 9, 260, 26,
+ 0, 0, 0, 0, 261, 262, 4, 0, 0, 263, 0, 0, 2, 2, 2, 2,
+ 2, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 257, 26, 26, 26, 0, 265, 26, 26, 0, 0, 0, 0,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0,
+ 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 2, 2, 2, 2,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 270, 271,
+ 164, 164, 164, 164, 165, 166, 272, 272, 272, 272, 272, 272, 272, 273, 274, 273,
+ 169, 169, 171, 26, 171, 171, 171, 171, 171, 171, 171, 171, 18, 18, 18, 18,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 26, 26, 26, 26,
+ 276, 276, 276, 277, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 278, 26,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 279, 26, 26, 26, 0, 280,
+ 281, 0, 0, 0, 282, 283, 0, 284, 285, 286, 286, 286, 286, 286, 286, 286,
+ 286, 286, 287, 288, 289, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291,
+ 292, 293, 293, 293, 293, 293, 294, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 295, 0, 0, 293, 293, 293, 293, 0, 0, 0, 0, 280, 26, 290, 290,
+ 168, 168, 168, 295, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 296,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 290, 290, 290, 290, 297,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 0, 0, 0, 0, 0,
+ 276, 276, 276, 276, 276, 276, 276, 276, 0, 0, 0, 0, 0, 0, 0, 0,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 299, 298, 298, 298, 298, 298, 298, 300, 26, 301, 301, 301, 301, 301, 301,
+ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ 302, 302, 302, 302, 302, 303, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 26,
+ 0, 0, 0, 0, 305, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 306, 2, 2, 2, 2, 2, 2, 2, 307, 308, 309, 26, 26, 310, 2,
+ 311, 311, 311, 311, 311, 312, 0, 313, 314, 314, 314, 314, 314, 314, 314, 26,
+ 315, 315, 315, 315, 315, 315, 315, 315, 316, 317, 315, 318, 53, 53, 53, 53,
+ 319, 319, 319, 319, 319, 320, 321, 321, 321, 321, 322, 323, 168, 168, 168, 324,
+ 325, 325, 325, 325, 325, 325, 325, 325, 325, 326, 325, 327, 163, 163, 163, 328,
+ 329, 329, 329, 329, 329, 329, 330, 26, 329, 331, 329, 332, 163, 163, 163, 163,
+ 333, 333, 333, 333, 333, 333, 333, 333, 334, 26, 26, 335, 336, 336, 337, 26,
+ 338, 338, 338, 26, 171, 171, 2, 2, 2, 2, 2, 339, 340, 341, 175, 175,
+ 175, 175, 175, 175, 175, 175, 175, 175, 336, 336, 336, 336, 336, 342, 336, 343,
+ 168, 168, 168, 168, 344, 26, 168, 168, 295, 345, 168, 168, 168, 168, 168, 344,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 279, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 346, 26, 26, 26, 26,
+ 347, 26, 348, 349, 25, 25, 350, 351, 352, 25, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 353, 26, 354, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 31, 31, 31, 31, 31, 355, 31, 31, 31, 31, 31, 31, 31, 31,
+ 31, 31, 356, 31, 31, 31, 31, 31, 31, 357, 26, 26, 26, 26, 31, 31,
+ 9, 9, 0, 313, 9, 358, 0, 0, 0, 0, 359, 0, 257, 280, 360, 31,
+ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 361,
+ 362, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 363, 290, 289, 290,
+ 290, 290, 290, 364, 168, 168, 168, 295, 365, 365, 365, 366, 257, 257, 26, 367,
+ 368, 369, 368, 368, 370, 368, 368, 371, 368, 372, 368, 372, 26, 26, 26, 26,
+ 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 373,
+ 374, 0, 0, 0, 0, 0, 375, 0, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 252, 0, 376, 377, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 378,
+ 379, 379, 379, 380, 381, 381, 381, 381, 381, 381, 382, 26, 383, 0, 0, 280,
+ 384, 384, 384, 384, 385, 386, 387, 387, 387, 388, 389, 389, 389, 389, 389, 390,
+ 391, 391, 391, 392, 393, 393, 393, 393, 394, 393, 395, 26, 26, 26, 26, 26,
+ 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 397, 397,
+ 398, 398, 398, 399, 398, 400, 401, 401, 401, 401, 402, 401, 401, 401, 401, 402,
+ 403, 403, 403, 403, 403, 26, 404, 404, 404, 404, 404, 404, 405, 406, 407, 408,
+ 407, 408, 409, 407, 410, 407, 410, 411, 26, 26, 26, 26, 26, 26, 26, 26,
+ 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412,
+ 412, 412, 412, 412, 412, 412, 413, 26, 412, 412, 414, 26, 412, 26, 26, 26,
+ 415, 2, 2, 2, 2, 2, 416, 307, 26, 26, 26, 26, 26, 26, 26, 26,
+ 417, 418, 419, 419, 419, 419, 420, 421, 422, 422, 423, 422, 424, 424, 424, 424,
+ 425, 425, 425, 426, 427, 425, 26, 26, 26, 26, 26, 26, 428, 428, 429, 430,
+ 431, 431, 431, 432, 433, 433, 433, 434, 26, 26, 26, 26, 26, 26, 26, 26,
+ 435, 435, 435, 435, 436, 436, 436, 437, 436, 436, 438, 436, 436, 436, 436, 436,
+ 439, 440, 441, 442, 443, 443, 444, 445, 443, 446, 443, 446, 447, 447, 447, 447,
+ 448, 448, 448, 448, 26, 26, 26, 26, 449, 449, 449, 449, 450, 451, 450, 26,
+ 452, 452, 452, 452, 452, 452, 453, 454, 455, 455, 456, 455, 457, 457, 458, 457,
+ 459, 459, 460, 461, 26, 462, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 463, 463, 463, 463, 463, 463, 463, 463, 463, 464, 26, 26, 26, 26, 26, 26,
+ 465, 465, 465, 465, 465, 465, 466, 26, 465, 465, 465, 465, 465, 465, 466, 467,
+ 468, 468, 468, 468, 468, 26, 468, 469, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 31, 31, 31, 50,
+ 470, 470, 470, 470, 470, 471, 472, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 473, 473, 473, 473, 473, 26, 474, 474, 474, 474, 474, 475, 26, 26, 476, 476,
+ 476, 477, 26, 26, 26, 26, 478, 478, 478, 479, 26, 26, 480, 480, 481, 26,
+ 482, 482, 482, 482, 482, 482, 482, 482, 482, 483, 484, 482, 482, 482, 483, 485,
+ 486, 486, 486, 486, 486, 486, 486, 486, 487, 488, 489, 489, 489, 490, 489, 491,
+ 492, 492, 492, 492, 492, 492, 493, 492, 492, 26, 494, 494, 494, 494, 495, 26,
+ 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 497, 137, 498, 26,
+ 499, 499, 500, 499, 499, 499, 499, 501, 26, 26, 26, 26, 26, 26, 26, 26,
+ 502, 503, 504, 505, 504, 506, 507, 507, 507, 507, 507, 507, 507, 508, 507, 509,
+ 510, 511, 512, 513, 513, 514, 515, 516, 511, 517, 518, 519, 520, 521, 521, 26,
+ 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, 524, 26, 26, 26,
+ 525, 525, 525, 525, 525, 525, 525, 525, 525, 26, 525, 526, 26, 26, 26, 26,
+ 527, 527, 527, 527, 527, 527, 528, 527, 527, 527, 527, 528, 26, 26, 26, 26,
+ 529, 529, 529, 529, 529, 529, 529, 529, 530, 26, 529, 531, 197, 532, 26, 26,
+ 533, 533, 533, 533, 533, 533, 533, 534, 533, 534, 26, 26, 26, 26, 26, 26,
+ 535, 535, 535, 536, 535, 537, 535, 535, 538, 26, 26, 26, 26, 26, 26, 26,
+ 539, 539, 539, 539, 539, 539, 539, 540, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 542, 543,
+ 544, 545, 546, 547, 547, 547, 548, 549, 544, 26, 547, 550, 26, 26, 26, 26,
+ 26, 26, 26, 26, 551, 552, 551, 551, 551, 551, 551, 552, 553, 26, 26, 26,
+ 554, 554, 554, 554, 554, 554, 554, 554, 554, 26, 555, 555, 555, 555, 555, 555,
+ 555, 555, 555, 555, 556, 26, 177, 177, 557, 557, 557, 557, 557, 557, 557, 558,
+ 559, 560, 559, 559, 559, 559, 561, 559, 562, 26, 559, 559, 559, 563, 564, 564,
+ 564, 564, 565, 564, 564, 566, 567, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 568, 569, 570, 570, 570, 570, 568, 571, 570, 26, 570, 572, 573, 574, 575, 575,
+ 575, 576, 577, 578, 575, 579, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 580, 580, 580, 581,
+ 26, 26, 26, 26, 26, 26, 582, 26, 108, 108, 108, 108, 108, 108, 583, 584,
+ 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585,
+ 585, 585, 585, 586, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 587, 588, 26,
+ 585, 585, 585, 585, 585, 585, 585, 585, 589, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 591, 26,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 593, 592, 594, 26, 26, 26, 26, 26, 26, 26, 26,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 596, 26, 26, 26, 26, 26, 26, 26,
+ 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
+ 304, 304, 304, 304, 304, 304, 304, 597, 598, 598, 598, 599, 598, 600, 601, 601,
+ 601, 601, 601, 601, 601, 601, 601, 602, 601, 603, 604, 604, 604, 605, 605, 26,
+ 606, 606, 606, 606, 606, 606, 606, 606, 607, 26, 606, 608, 608, 606, 606, 609,
+ 606, 606, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 610, 610, 610, 610, 610, 610, 610, 610,
+ 610, 610, 610, 611, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 612, 612, 612, 612, 612, 612, 612, 612, 612, 613, 612, 612, 612, 612, 612, 612,
+ 612, 614, 612, 612, 26, 26, 26, 26, 26, 26, 26, 26, 615, 26, 346, 26,
+ 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616,
+ 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 26,
+ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617,
+ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 618, 26, 26, 26, 26, 26,
+ 616, 619, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 620, 621,
+ 622, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286,
+ 286, 286, 286, 286, 623, 26, 26, 26, 26, 26, 624, 26, 625, 26, 626, 626,
+ 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626,
+ 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 627,
+ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 629, 628, 630,
+ 628, 631, 628, 632, 280, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 9, 9, 9, 9, 9, 633, 9, 9, 220, 26, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 280, 26, 26, 26, 26, 26, 26, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 26,
+ 0, 0, 0, 0, 257, 362, 0, 0, 0, 0, 0, 0, 634, 635, 0, 636,
+ 637, 638, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 265, 26, 26,
+ 14, 14, 14, 14, 14, 14, 14, 14, 246, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 280, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 26, 0, 0, 0, 259,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0,
+ 0, 0, 0, 254, 640, 641, 0, 642, 643, 0, 0, 0, 0, 0, 0, 0,
+ 268, 644, 254, 254, 0, 0, 0, 645, 646, 647, 648, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0,
+ 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649,
+ 649, 650, 26, 651, 652, 649, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 2, 2, 2, 347, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 653, 269, 269, 654, 655, 656, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 657, 657, 657, 657, 657, 658, 657, 659, 657, 660, 26, 26, 26, 26, 26, 26,
+ 26, 26, 661, 661, 661, 662, 26, 26, 663, 663, 663, 663, 663, 663, 663, 664,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 171, 665, 169, 171,
+ 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666,
+ 666, 666, 666, 666, 666, 666, 666, 666, 667, 666, 668, 26, 26, 26, 26, 26,
+ 669, 669, 669, 669, 669, 669, 669, 669, 669, 670, 669, 671, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 362, 0,
+ 0, 0, 0, 0, 0, 0, 376, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 362, 0, 0, 0, 0, 0, 0, 275, 26, 26, 26, 26, 26, 26, 26, 26,
+ 672, 31, 31, 31, 673, 674, 675, 676, 677, 678, 673, 679, 673, 675, 675, 680,
+ 31, 681, 31, 682, 683, 681, 31, 682, 26, 26, 26, 26, 26, 26, 51, 26,
+ 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 280, 26, 0, 257, 362, 0, 362, 0, 362, 0, 0, 0, 275, 26,
+ 0, 0, 0, 0, 0, 275, 26, 26, 26, 26, 26, 26, 684, 0, 0, 0,
+ 685, 26, 0, 0, 0, 0, 0, 280, 0, 259, 313, 26, 275, 26, 26, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 376, 0, 376,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 280, 259, 26,
+ 0, 280, 0, 0, 0, 0, 0, 0, 0, 26, 0, 313, 0, 0, 0, 0,
+ 0, 26, 0, 0, 0, 275, 313, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 26, 0, 275, 376, 376,
+ 257, 26, 0, 0, 0, 376, 0, 265, 275, 26, 0, 313, 0, 26, 257, 26,
+ 0, 0, 359, 0, 0, 0, 0, 0, 0, 265, 26, 26, 26, 26, 0, 313,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 26, 26, 26, 26,
+ 276, 276, 276, 276, 276, 276, 276, 687, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 279, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 346, 26, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 687, 26, 26, 26,
+ 276, 276, 276, 279, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 688, 26, 26, 26, 26, 26, 26,
+ 689, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
939, 940, 941, 942, 946, 948, 0, 962, 969, 970, 971, 976,1001,1002,1003,1008,
0,1033,1040,1041,1042,1043,1047, 0, 0,1080,1081,1082,1086,1110, 0, 0,
@@ -6731,25 +5625,1249 @@ _hb_ucd_u16[4848] =
930, 99, 931, 932, 933, 814, 100, 816, 817, 818, 819, 820, 821, 935, 0, 0,
};
static const int16_t
-_hb_ucd_i16[92] =
+_hb_ucd_i16[196] =
{
- 0, 0, 1, -1, 2, 0, -2, 0, 0, 2, 0, -2, 0, 16, 0, -16,
- 0, 1, -1, 0, 3, 3, 3, -3, -3, -3, 0, 2016, 0, 2527, 1923, 1914,
- 1918, 0, 2250, 0, 0, 138, 0, 7, -7, 0, -1, 1, 1824, 0, 2104, 0,
- 2108, 2106, 0, 2106, 1316, 0, -1, -138, 8, 8, 8, 0, 7, 7, -8, -8,
- -8, -7,-1316, 1, -1, 3, -3, 1, 0,-1914,-1918, 0, 0,-1923,-1824, 0,
- 0,-2016,-2104, 0, 0,-2106,-2108,-2106,-2250, 0,-2527, 0,
+ 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2,
+ 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1,
+ 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3,
+ -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0,
+ 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0,
+ 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0,
+ 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0,
+ 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0,
+ 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1,
+ -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0,
+ 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106,
+ -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1,
+ -1, 0, 1, -1,
+};
+
+static inline uint_fast8_t
+_hb_ucd_gc (unsigned u)
+{
+ return u<1114110u?_hb_ucd_u8[6664+(((_hb_ucd_u8[1296+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2;
+}
+static inline uint_fast8_t
+_hb_ucd_ccc (unsigned u)
+{
+ return u<125259u?_hb_ucd_u8[8984+(((_hb_ucd_u8[7960+(((_hb_ucd_u8[7288+(((_hb_ucd_u8[7042+(u>>2>>3>>4)])<<4)+((u>>2>>3)&15u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u))]:0;
+}
+static inline unsigned
+_hb_ucd_b4 (const uint8_t* a, unsigned i)
+{
+ return (a[i>>1]>>((i&1u)<<2))&15u;
+}
+static inline int_fast16_t
+_hb_ucd_bmg (unsigned u)
+{
+ return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9728+(((_hb_ucd_u8[9608+(((_hb_ucd_b4(9480+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0;
+}
+static inline uint_fast8_t
+_hb_ucd_sc (unsigned u)
+{
+ return u<918000u?_hb_ucd_u8[11234+(((_hb_ucd_u16[2000+(((_hb_ucd_u8[10514+(((_hb_ucd_u8[10064+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2;
+}
+static inline uint_fast16_t
+_hb_ucd_dm (unsigned u)
+{
+ return u<195102u?_hb_ucd_u16[5888+(((_hb_ucd_u8[17136+(((_hb_ucd_u8[16754+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0;
+}
+
+
+#else
+
+static const uint8_t
+_hb_ucd_u8[13602] =
+{
+ 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 7, 11, 12, 12, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 21, 21, 21, 21, 23, 7, 7,
+ 7, 24, 21, 21, 21, 25, 26, 27, 21, 28, 29, 30, 31, 32, 33, 34,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 21, 36,
+ 7, 7, 37, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 38, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 34, 34, 34, 35, 36, 37, 34, 34, 34, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 67, 70, 71,
+ 67, 67, 62, 72, 62, 62, 73, 67, 74, 75, 76, 77, 78, 67, 67, 67,
+ 79, 80, 34, 81, 82, 83, 67, 67, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 84, 34, 34, 34, 34,
+ 85, 34, 34, 34, 34, 34, 34, 34, 34, 86, 34, 34, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 98, 34, 34, 34, 34, 34, 34, 34, 34,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+ 100,100, 34, 34, 34, 34,101,102, 34, 34,103,104,105,106,107,108,
+ 34, 34,109,110,111,112,113,114,115,116,117,118, 34, 34, 34,119,
+ 120,121,122,123,124,125,126,127, 34,128,129,111,130,131,132,133,
+ 134,135,136,137,138,139,140,111,141,142,111,143,144,145,146,111,
+ 147,148,149,150,151,152,111,111,153,154,155,156,111,157,111,158,
+ 34, 34, 34, 34, 34, 34, 34, 34,159, 34, 34,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,160,
+ 34, 34, 34, 34, 34, 34, 34, 34,161,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111, 34, 34, 34, 34, 34,111,111,111,
+ 34, 34, 34, 34,162,163,164, 34,111,111,111,111,165,166,167,168,
+ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,119,
+ 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111, 34,169,111,111,111,111,111,111,
+ 111,111,111,111,111,111,111,111,111,111,111,111,111,111,170, 67,
+ 67, 67,171,172,173,130, 65,111,174,175,176,177,178,179,180,181,
+ 67, 67, 67, 67,182,183,111,111,111,111,111,111,111,111,184,111,
+ 185,111,186,111,111,187,111,111,111,111,111,111,111,111,111, 34,
+ 34,188,189,111,111,111,111,111,130,190,191,111, 34,192,111,111,
+ 67, 67,193, 67, 67,111, 67,194, 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67,195,111,111,111,111,111,111,111,111,
+ 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,
+ 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,111,
+ 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,
+ 196,111,185,185,111,111,111,111,111,111,111,111,111,111,111,111,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2,
+ 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25,
+ 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32,
+ 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11,
+ 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11,
+ 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34,
+ 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32,
+ 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32,
+ 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41,
+ 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41,
+ 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 16, 44, 16, 10,
+ 41, 41, 41, 45, 11, 11, 11, 11, 34, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34,
+ 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 46, 34, 32, 34, 11,
+ 32, 47, 43, 43, 48, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16,
+ 11, 11, 11, 11, 49, 2, 2, 2, 16, 16, 16, 16, 50, 51, 52, 53,
+ 54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55,
+ 56, 57, 43, 56, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 58, 2, 2, 2, 2, 2, 2, 59, 59, 59, 8, 9, 60, 2, 61,
+ 43, 43, 43, 43, 43, 57, 62, 2, 63, 36, 36, 36, 36, 64, 43, 43,
+ 7, 7, 7, 7, 7, 2, 2, 36, 65, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 66, 43, 43, 43, 67, 47, 43, 43, 68, 69, 70, 43, 43, 36,
+ 7, 7, 7, 7, 7, 36, 71, 72, 2, 2, 2, 2, 2, 2, 2, 73,
+ 64, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 65, 36,
+ 36, 36, 36, 43, 43, 43, 43, 43, 7, 7, 7, 7, 7, 36, 36, 36,
+ 36, 36, 36, 36, 36, 64, 43, 43, 43, 43, 40, 21, 2, 40, 69, 20,
+ 36, 36, 36, 43, 43, 69, 43, 43, 43, 43, 69, 43, 69, 43, 43, 43,
+ 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 64, 43, 43, 2,
+ 36, 36, 36, 36, 74, 36, 36, 36, 59, 59, 59, 59, 43, 43, 43, 43,
+ 36, 36, 36, 36, 75, 43, 43, 43, 43, 76, 43, 43, 43, 43, 43, 43,
+ 43, 77, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 65, 78,
+ 79, 43, 43, 43, 77, 78, 79, 78, 64, 43, 43, 43, 36, 36, 36, 36,
+ 36, 43, 2, 7, 7, 7, 7, 7, 80, 36, 36, 36, 36, 36, 36, 36,
+ 64, 78, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 65, 78,
+ 79, 43, 43, 77, 78, 78, 79, 36, 36, 36, 36, 82, 78, 78, 36, 36,
+ 36, 43, 43, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 53, 58, 43,
+ 43, 77, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 43, 78,
+ 79, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 65, 36, 36, 36,
+ 36, 36, 36, 7, 7, 7, 7, 7, 43, 36, 64, 2, 2, 2, 2, 2,
+ 79, 43, 43, 43, 77, 78, 79, 43, 60, 20, 20, 20, 83, 43, 43, 43,
+ 43, 78, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 65, 79,
+ 79, 43, 43, 77, 78, 78, 79, 43, 43, 43, 43, 77, 78, 78, 36, 36,
+ 72, 27, 27, 27, 27, 27, 27, 27, 43, 65, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 78, 77, 78, 78, 78, 78, 78, 79, 43,
+ 36, 36, 36, 82, 78, 78, 78, 78, 78, 78, 78, 7, 7, 7, 7, 7,
+ 27, 84, 61, 61, 53, 61, 61, 61, 77, 78, 65, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 65, 43, 77, 78, 78, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 36, 36, 36, 36, 7, 7, 7, 85, 27, 27, 27, 84,
+ 64, 78, 66, 36, 36, 36, 36, 36, 78, 78, 78, 77, 78, 78, 43, 43,
+ 43, 43, 77, 78, 78, 78, 81, 36, 86, 36, 36, 36, 36, 36, 36, 36,
+ 43, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 65, 78,
+ 79, 43, 43, 78, 78, 78, 79, 71, 61, 61, 36, 82, 27, 27, 27, 87,
+ 27, 27, 27, 27, 84, 36, 36, 36, 36, 36, 36, 36, 36, 43, 43, 77,
+ 78, 43, 43, 43, 78, 78, 78, 78, 7, 78, 2, 2, 2, 2, 2, 2,
+ 64, 36, 43, 43, 43, 43, 43, 88, 36, 36, 36, 69, 43, 43, 43, 57,
+ 7, 7, 7, 7, 7, 2, 2, 2, 64, 36, 43, 43, 43, 43, 65, 36,
+ 36, 36, 36, 40, 43, 43, 43, 43, 7, 7, 7, 7, 7, 7, 36, 36,
+ 71, 61, 2, 2, 2, 2, 2, 2, 2, 89, 89, 61, 43, 61, 61, 61,
+ 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 47, 47, 47, 4, 4, 78,
+ 64, 43, 43, 43, 43, 43, 43, 77, 43, 43, 57, 43, 36, 36, 64, 43,
+ 43, 43, 43, 43, 43, 43, 43, 61, 61, 61, 61, 70, 61, 61, 61, 61,
+ 2, 2, 89, 61, 21, 2, 2, 2, 36, 36, 36, 36, 36, 82, 79, 43,
+ 77, 43, 43, 43, 79, 77, 79, 65, 36, 36, 36, 78, 43, 36, 36, 43,
+ 65, 78, 81, 82, 78, 78, 78, 36, 64, 43, 65, 36, 36, 36, 36, 36,
+ 36, 77, 79, 77, 78, 78, 79, 82, 7, 7, 7, 7, 7, 78, 79, 61,
+ 16, 16, 16, 16, 16, 50, 44, 16, 36, 36, 36, 36, 36, 36, 64, 43,
+ 2, 2, 2, 2, 90, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 61, 61, 61, 61, 61, 61, 61, 61, 11, 11, 11, 11, 16, 16, 16, 16,
+ 91, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 71, 66,
+ 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 93, 94, 94,
+ 36, 36, 36, 36, 36, 58, 2, 95, 96, 36, 36, 36, 36, 36, 36, 36,
+ 36, 43, 77, 78, 78, 78, 78, 81, 36, 43, 97, 2, 2, 2, 2, 2,
+ 36, 43, 43, 43, 43, 43, 43, 43, 36, 36, 43, 79, 43, 43, 43, 78,
+ 78, 78, 78, 77, 79, 43, 43, 43, 43, 43, 2, 80, 2, 60, 64, 43,
+ 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 98, 2, 56, 43, 76,
+ 36, 75, 36, 36, 36, 36, 36, 36, 36, 36, 64, 65, 36, 36, 36, 36,
+ 36, 36, 36, 36, 64, 36, 36, 36, 43, 77, 78, 79, 77, 78, 78, 78,
+ 78, 77, 78, 78, 79, 43, 43, 43, 61, 61, 2, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 27, 27, 61, 36, 36, 36, 64, 77, 79, 43, 2,
+ 36, 36, 82, 77, 43, 43, 43, 43, 77, 77, 79, 43, 43, 43, 77, 78,
+ 78, 79, 43, 43, 43, 43, 43, 43, 2, 2, 2, 80, 2, 2, 2, 2,
+ 43, 43, 43, 43, 43, 43, 43, 99, 43, 43, 81, 36, 36, 36, 36, 36,
+ 36, 36, 77, 43, 43, 77, 77, 78, 78, 77, 81, 36, 36, 36, 36, 36,
+ 89, 61, 61, 61, 61, 47, 43, 43, 43, 43, 61, 61, 61, 61, 21, 2,
+ 43, 81, 36, 36, 36, 36, 36, 36, 82, 43, 43, 78, 43, 79, 43, 36,
+ 36, 36, 36, 77, 43, 78, 79, 79, 43, 78, 78, 78, 78, 78, 2, 2,
+ 36, 36, 78, 78, 78, 78, 43, 43, 43, 43, 78, 43, 43, 57, 2, 2,
+ 7, 7, 7, 7, 7, 7, 86, 36, 36, 36, 36, 36, 40, 40, 40, 2,
+ 43, 57, 43, 43, 43, 43, 43, 43, 77, 43, 43, 43, 65, 36, 64, 36,
+ 36, 36, 65, 82, 43, 36, 36, 36, 16, 16, 16, 16, 16, 16, 40, 40,
+ 40, 40, 40, 40, 40, 44, 16, 16, 16, 16, 16, 16, 44, 16, 16, 16,
+ 16, 16, 16, 16, 16,100, 40, 40, 32, 32, 32, 16, 16, 16, 16, 32,
+ 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 16, 34, 11, 11, 11,
+ 16, 16, 16, 16,101,101,101,101, 16, 16, 16, 16, 11, 11,102,103,
+ 41, 16, 16, 16, 11, 11,102, 41, 16, 16, 16, 16, 11, 11,104, 41,
+ 105,105,105,105,105,106, 59, 59, 51, 51, 51, 2,107,108,107,108,
+ 2, 2, 2, 2,109, 59, 59,110, 2, 2, 2, 2,111,112, 2,113,
+ 114, 2,115,116, 2, 2, 2, 2, 2, 9,114, 2, 2, 2, 2,117,
+ 59, 59, 59, 59, 59, 59, 59, 59,118, 40, 27, 27, 27, 8,115,119,
+ 27, 27, 27, 27, 27, 8,115, 94, 20, 20, 20, 20, 20, 20, 20, 20,
+ 43, 43, 43, 43, 43, 43,120, 48, 99, 48, 99, 43, 43, 43, 43, 43,
+ 61,121, 61,122, 61, 34, 11, 16, 11, 32,122, 61, 46, 11, 11, 61,
+ 61, 61,121,121,121, 11, 11,123, 11, 11, 35, 36, 39, 61, 16, 11,
+ 8, 8, 46, 16, 16, 26, 61,124, 95, 95, 95, 95, 95, 95, 95, 95,
+ 95,125,126, 95,127, 61, 61, 61, 8, 8,128, 61, 61, 8, 61, 61,
+ 128, 26, 61,128, 61, 61, 61,128, 61, 61, 61, 61, 61, 61, 61, 8,
+ 61,128,128, 61, 61, 61, 61, 61, 61, 61, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 61, 61, 61, 61, 4, 4, 61, 61,
+ 8, 61, 61, 61,129,130, 61, 61, 61, 61, 61, 61, 61, 61,128, 61,
+ 61, 61, 61, 61, 61, 26, 8, 8, 8, 8, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 8, 8, 8, 61, 61, 61, 61, 61, 61, 61,
+ 27, 27, 27, 27, 27, 27, 61, 61, 61, 61, 61, 61, 61, 27, 27, 27,
+ 61, 61, 61, 26, 61, 61, 61, 61, 26, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 8, 8, 8, 8, 61, 61, 61, 61, 61, 61, 61, 26,
+ 61, 61, 61, 61, 4, 4, 4, 4, 4, 4, 4, 27, 27, 27, 27, 27,
+ 27, 27, 61, 61, 61, 61, 61, 61, 8, 8,115,131, 8, 8, 8, 8,
+ 8, 8, 8, 4, 4, 4, 4, 4, 8,115,132,132,132,132,132,132,
+ 132,132,132,132,131, 8, 8, 8, 8, 8, 8, 8, 4, 4, 8, 8,
+ 8, 8, 8, 8, 8, 8, 4, 8, 8, 8,128, 26, 8, 8,128, 61,
+ 32, 11, 32, 34, 34, 34, 34, 11, 32, 32, 34, 16, 16, 16, 40, 11,
+ 32, 32,124, 61, 61,122, 34,133, 43, 32, 16, 16, 50, 2, 90, 2,
+ 36, 36, 36, 36, 36, 36, 36, 75, 2, 2, 2, 2, 2, 2, 2, 56,
+ 2,107,107, 2,111,112,107, 2, 2, 2, 2, 6, 2, 98,107, 2,
+ 107, 4, 4, 4, 4, 2, 2, 80, 2, 2, 2, 2, 2, 51, 2, 2,
+ 98,134, 2, 2, 2, 2, 2, 2, 61, 2,135,132,132,132,136, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51, 1, 2,137,138, 4, 4, 4, 4,
+ 4, 61, 4, 4, 4, 4,139, 94,140, 95, 95, 95, 95, 43, 43, 78,
+ 141, 40, 40, 61, 95,142, 58, 61, 72, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 64,143,144, 63, 36, 36, 36, 36, 36, 58, 40, 63,
+ 61, 27, 27, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 61, 61, 61,
+ 61, 61, 61, 61, 27, 27, 27, 27,145, 27, 27, 27, 27, 27, 27, 27,
+ 36, 36, 75, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,146, 2,
+ 32, 32, 32, 32, 32, 32, 32, 64, 48,147, 43, 43, 43, 43, 43, 80,
+ 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 95, 95, 95, 95, 95,
+ 43, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41,144, 40, 40, 40, 40,
+ 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32,
+ 44, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,148, 34, 35,
+ 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32,
+ 11, 11, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 34, 16, 16, 16,
+ 32, 16, 16, 32, 32, 16, 16, 16, 16, 40,149, 35, 40, 35, 36, 36,
+ 36, 65, 36, 65, 36, 64, 36, 36, 36, 82, 79, 77, 61, 61, 43, 43,
+ 27, 27, 27, 61,150, 61, 61, 61, 36, 36, 2, 2, 2, 2, 2, 2,
+ 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 78, 78, 78, 78, 78, 78,
+ 78, 78, 43, 43, 43, 43, 43, 2, 43, 36, 36, 36, 2, 66, 66, 64,
+ 36, 36, 36, 43, 43, 43, 43, 2, 36, 36, 36, 64, 43, 43, 43, 43,
+ 43, 78, 78, 78, 78, 78, 78, 97, 36, 64, 78, 43, 43, 78, 43, 78,
+ 97, 2, 2, 2, 2, 2, 2, 80, 7, 7, 7, 7, 7, 7, 7, 2,
+ 36, 36, 64, 63, 36, 36, 36, 36, 36, 36, 36, 36, 64, 43, 43, 77,
+ 79, 77, 79, 43, 43, 43, 43, 43, 36, 64, 36, 36, 36, 36, 77, 78,
+ 7, 7, 7, 7, 7, 7, 2, 2, 63, 36, 36, 71, 61, 82, 77, 36,
+ 65, 43, 65, 64, 65, 36, 36, 43, 36, 36, 36, 36, 36, 36, 75, 2,
+ 36, 36, 36, 36, 36, 82, 43, 78, 2, 75,151, 43, 43, 43, 43, 43,
+ 16, 16, 16, 16, 16,103, 40, 40, 16, 16, 16, 16,100, 41, 41, 41,
+ 36, 82, 79, 78, 77, 97, 79, 43,152,152,152,152,152,152,152,152,
+ 153,153,153,153,153,153,153,153, 16, 16, 16, 16, 16, 16, 35, 65,
+ 36, 36, 36, 36,154, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41,
+ 41, 74, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,132,
+ 36, 36, 36, 36, 36, 36, 36, 71, 36, 36, 36, 36, 36, 36,150, 61,
+ 2, 2, 2,135,116, 2, 2, 2, 6,155,156,132,132,132,132,132,
+ 132,132,116,135,116, 2,113,157, 2, 2, 2, 2,139,132,132,116,
+ 2,158, 8, 8, 60, 2, 2, 2, 36, 36, 36, 36, 36, 36, 36,159,
+ 2, 2, 3, 2, 4, 5, 6, 2, 16, 16, 16, 16, 16, 17, 18,115,
+ 116, 4, 2, 36, 36, 36, 36, 36, 63, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 40, 20,160, 53, 20, 26, 8,128, 61,
+ 61, 61, 61, 61,161, 59, 61, 61, 2, 2, 2, 90, 27, 27, 27, 27,
+ 27, 27, 27, 84, 61, 61, 61, 61, 95, 95,127, 27, 84, 61, 61, 61,
+ 61, 61, 61, 61, 61, 27, 61, 61, 61, 61, 61, 61, 61, 61, 47, 43,
+ 162,162,162,162,162,162,162,162,163, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 87, 36,138, 36, 36, 36, 36, 95, 95, 95,
+ 36, 36, 36, 36, 36, 36, 36, 58,164, 95, 95, 95, 95, 95, 95, 95,
+ 11, 11, 11, 32, 16, 16, 16, 16, 36, 36, 36, 58, 27, 27, 27, 27,
+ 36, 36, 36, 71,145, 27, 27, 27, 36, 36, 36,165, 27, 27, 27, 27,
+ 36, 36, 36, 36, 36,165, 27, 27, 36, 36, 36, 27, 27, 27, 27, 30,
+ 36, 36, 36, 36, 36, 36, 27, 36, 64, 43, 43, 43, 43, 43, 43, 43,
+ 36, 36, 36, 36, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36,165, 30,
+ 36, 36, 36, 36, 36, 36,165, 27, 36, 36, 36, 36, 72, 36, 36, 36,
+ 36, 36, 64, 43, 43,163, 27, 27, 36, 36, 36, 36, 58, 2, 2, 2,
+ 36, 36, 36, 36, 27, 27, 27, 27, 16, 16, 16, 16, 16, 27, 27, 27,
+ 36, 36, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 64,166, 51,
+ 27, 27, 27, 87, 36, 36, 36, 36,163, 27, 30, 2, 2, 2, 2, 2,
+ 36, 43, 43, 2, 2, 2, 2, 2, 36, 36,165, 27, 27, 27, 27, 27,
+ 79, 81, 36, 36, 36, 36, 36, 36, 43, 43, 43, 57, 2, 2, 2, 2,
+ 2, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7,
+ 65, 64, 65, 36, 36, 36, 36, 64, 78, 79, 43, 77, 79, 57, 73, 2,
+ 2, 43, 43, 43, 43, 43, 67, 59, 36, 36, 36, 64, 43, 43, 79, 43,
+ 43, 43, 43, 7, 7, 7, 7, 7, 2, 2, 82, 81, 36, 36, 36, 36,
+ 36, 64, 2, 36, 36, 36, 36, 36, 36, 82, 78, 43, 43, 43, 43, 77,
+ 81, 36, 58, 2, 56, 43, 57, 79, 7, 7, 7, 7, 7, 58, 58, 2,
+ 90, 27, 27, 27, 27, 27, 27, 27, 36, 36, 36, 36, 36, 36, 78, 79,
+ 43, 78, 77, 43, 2, 2, 2, 43, 36, 36, 36, 36, 36, 36, 36, 64,
+ 77, 78, 78, 78, 78, 78, 78, 78, 36, 36, 36, 82, 78, 78, 81, 36,
+ 36, 78, 78, 43, 43, 43, 43, 43, 36, 36, 82, 78, 43, 43, 43, 43,
+ 78, 43, 77, 65, 36, 58, 2, 2, 7, 7, 7, 7, 7, 2, 2, 65,
+ 78, 79, 43, 43, 77, 77, 78, 79, 77, 43, 36, 66, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 82, 78, 43, 43, 43, 78, 78, 43, 79,
+ 57, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 43,
+ 78, 79, 43, 43, 43, 77, 79, 79, 57, 2, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 64, 79, 78, 43, 43, 43, 79, 58, 2, 2, 2,
+ 78, 43, 43, 79, 43, 43, 43, 43, 7, 7, 7, 7, 7, 27, 2, 89,
+ 43, 43, 43, 43, 79, 57, 2, 2, 27, 27, 27, 27, 27, 27, 27, 87,
+ 78, 78, 78, 78, 78, 79, 77, 65, 81, 79, 2, 2, 2, 2, 2, 2,
+ 82, 78, 43, 43, 43, 43, 78, 78, 65, 66, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 78, 64, 43, 43, 43, 43, 65, 36, 36,
+ 36, 64, 43, 43, 77, 64, 43, 57, 2, 2, 2, 56, 43, 43, 43, 43,
+ 64, 43, 43, 77, 79, 43, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43,
+ 43, 43, 43, 77, 43, 2, 66, 2, 43, 43, 43, 43, 43, 43, 43, 79,
+ 58, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 36, 36, 36,
+ 43, 43, 43, 43, 77, 43, 43, 43, 77, 43, 79, 43, 43, 43, 43, 43,
+ 43, 43, 43, 64, 43, 43, 43, 43, 36, 36, 36, 36, 36, 78, 78, 78,
+ 43, 77, 79, 79, 36, 36, 36, 36, 36, 64, 77, 97, 2, 2, 2, 2,
+ 27, 27, 84, 61, 61, 61, 53, 20,150, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 21, 43, 43, 57, 2, 2, 2, 2, 2,
+ 43, 43, 43, 57, 2, 2, 61, 61, 40, 40, 89, 61, 61, 61, 61, 61,
+ 7, 7, 7, 7, 7,167, 27, 27, 27, 87, 36, 36, 36, 36, 36, 36,
+ 27, 27, 27, 30, 2, 2, 2, 2, 82, 78, 78, 78, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 78, 78, 79, 43, 68, 40, 40, 40, 40, 40, 40,
+ 40, 80, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 47, 57,
+ 61, 61,168, 79, 43, 61,168, 78, 78,169, 59, 59, 59, 76, 43, 43,
+ 43, 70, 47, 43, 43, 43, 61, 61, 61, 61, 61, 61, 61, 43, 43, 61,
+ 61, 43, 70, 61, 61, 61, 61, 61, 11, 11, 11, 11, 11, 16, 16, 16,
+ 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16,
+ 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11,
+ 11, 11, 11, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11,
+ 11, 11, 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33,
+ 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31,
+ 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16,
+ 16, 33, 16, 16, 16, 32, 16, 7, 43, 43, 43, 70, 61, 47, 43, 43,
+ 43, 43, 43, 43, 43, 43, 70, 61, 61, 61, 47, 61, 61, 61, 61, 61,
+ 61, 61, 70, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 56, 43, 43,
+ 16, 16, 16, 16, 16, 39, 16, 16, 43, 43, 43, 68, 40, 40, 40, 40,
+ 7, 7, 7, 7, 7, 7, 7, 71, 36, 36, 36, 36, 36, 36, 36, 43,
+ 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 7, 7,170,
+ 16, 16, 43, 43, 43, 68, 40, 40, 27, 27, 27, 27, 27, 27,145, 27,
+ 171, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,145,
+ 27, 27, 27, 27, 27, 27, 84, 61, 61, 61, 61, 61, 61, 25, 41, 41,
+ 0, 0, 29, 21, 21, 21, 23, 21, 22, 18, 21, 25, 21, 17, 13, 13,
+ 25, 25, 25, 21, 21, 9, 9, 9, 9, 22, 21, 18, 24, 16, 24, 5,
+ 5, 5, 5, 22, 25, 18, 25, 0, 23, 23, 26, 21, 24, 26, 7, 20,
+ 25, 1, 26, 24, 26, 25, 15, 15, 24, 15, 7, 19, 15, 21, 9, 25,
+ 9, 5, 5, 25, 5, 9, 5, 7, 7, 7, 9, 8, 8, 5, 7, 5,
+ 6, 6, 24, 24, 6, 24, 12, 12, 6, 5, 9, 21, 25, 9, 26, 12,
+ 11, 11, 9, 6, 5, 21, 17, 17, 17, 26, 26, 23, 23, 12, 17, 12,
+ 21, 12, 12, 21, 7, 21, 1, 1, 21, 23, 26, 26, 1, 21, 6, 7,
+ 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, 12, 26, 7, 26,
+ 26, 7, 21, 1, 24, 7, 7, 6, 1, 12, 12, 10, 10, 10, 10, 12,
+ 21, 6, 10, 7, 7, 10, 23, 7, 15, 26, 13, 21, 13, 7, 15, 7,
+ 12, 23, 21, 26, 21, 15, 17, 7, 29, 7, 7, 22, 18, 18, 14, 14,
+ 14, 7, 10, 21, 17, 21, 11, 12, 5, 6, 8, 8, 8, 24, 5, 24,
+ 9, 24, 29, 29, 29, 1, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20,
+ 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6, 18, 6,
+ 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15,
+ 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 22, 21, 21, 22,
+ 18, 17, 26, 6, 7, 14, 17, 22, 26, 14, 17, 6, 14, 6, 12, 24,
+ 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10,
+ 4, 4, 3, 3, 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 7, 1,
+ 25, 24, 26, 1, 2, 2, 12, 15, 21, 14, 7, 15, 12, 17, 13, 15,
+ 26, 10, 10, 1, 13, 23, 23, 15, 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0,
+ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0,
+ 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11, 12, 13,
+ 14, 15, 16, 17, 16, 18, 16, 19, 16, 19, 16, 19, 0, 19, 16, 20,
+ 16, 19, 21, 19, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0,
+ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0,
+ 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 0, 0, 47, 0, 0, 0, 48, 0, 0,
+ 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, 53, 0,
+ 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, 58, 0,
+ 0, 59, 60, 61, 62, 63, 0, 0, 64, 65, 0, 0, 0, 66, 0, 0,
+ 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0,
+ 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0,
+ 75, 0, 0, 76, 77, 0, 0, 78, 79, 0, 80, 62, 0, 81, 82, 0,
+ 0, 83, 84, 85, 0, 0, 0, 86, 0, 87, 0, 0, 51, 88, 51, 0,
+ 89, 0, 90, 0, 0, 0, 79, 0, 0, 0, 91, 92, 0, 93, 94, 95,
+ 96, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 97, 98, 0, 0, 0,
+ 0, 99,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 0, 0,
+ 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103,104, 0, 0,105,
+ 0, 0, 0, 0, 0, 0,106, 0, 0, 0,100, 0, 0, 0, 0, 0,
+ 107,108, 0, 0, 0, 0, 0, 0, 0,109, 0,110, 0, 0, 0, 0,
+ 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 0, 0, 0, 0, 9,
+ 10, 11, 12, 0, 0, 0, 0, 13, 0, 0, 14, 15, 0, 16, 0, 17,
+ 18, 0, 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, 22, 23, 0, 24,
+ 25, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 29, 30, 31, 0, 0,
+ 0, 32, 33, 34, 0, 0, 33, 0, 0, 35, 33, 0, 0, 0, 33, 36,
+ 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0,
+ 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0,
+ 0, 45, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 49, 0,
+ 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 0, 0,
+ 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 57, 58, 0, 0,
+ 0, 59, 60, 0, 0, 0, 0, 0, 0, 61, 52, 0, 62, 63, 0, 0,
+ 64, 0, 0, 0, 65, 66, 0, 0, 0, 67, 0, 68, 69, 70, 71, 72,
+ 1, 73, 0, 74, 75, 76, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0,
+ 1, 1, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 77, 82, 0, 83,
+ 0, 0, 0, 0, 0, 78, 84, 0, 85, 0, 52, 0, 1, 78, 0, 0,
+ 86, 0, 0, 87, 0, 0, 0, 0, 0, 88, 57, 0, 0, 0, 0, 0,
+ 0, 89, 90, 0, 0, 84, 0, 0, 33, 0, 0, 91, 0, 0, 0, 0,
+ 92, 0, 0, 0, 0, 49, 0, 0, 93, 0, 0, 0, 0, 94, 95, 0,
+ 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0,100, 93,
+ 0, 0,101, 0, 0, 0, 84, 0, 0,102, 0, 0, 0,103,104, 0,
+ 0,105,106, 0, 0, 0, 0, 0, 0,107, 0, 0,108, 0, 0, 0,
+ 0,109, 33, 0,110,111,112, 35, 0, 0,113, 0, 0, 0,114, 0,
+ 0, 0, 0, 0, 0,115, 0, 0,116, 0, 0, 0, 0,117, 88, 0,
+ 0, 0, 0, 0, 57, 0, 0, 0, 0, 52,118, 0, 0, 0, 0,119,
+ 0, 0,120, 0, 0, 0, 0,118, 0, 0, 0, 0, 0,121, 0, 0,
+ 0,122, 0, 0, 0,123, 0,124, 0, 0, 0, 0,125,126,127, 0,
+ 128, 0,129, 0, 0, 0,130,131,132, 0, 0, 0, 35, 0, 0, 0,
+ 133, 0, 0,134, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10, 1, 11,
+ 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 19, 1, 0, 0, 20, 21,
+ 22, 1, 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, 1, 1,
+ 31, 0, 0, 0, 32, 33, 34, 35, 1, 36, 37, 0, 0, 0, 0, 38,
+ 1, 39, 14, 39, 40, 41, 42, 0, 0, 0, 43, 36, 44, 45, 21, 45,
+ 46, 0, 0, 0, 19, 1, 21, 0, 0, 47, 0, 38, 48, 1, 1, 49,
+ 49, 50, 0, 0, 51, 0, 0, 0, 52, 1, 0, 0, 38, 14, 4, 1,
+ 1, 1, 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 55, 0, 0,
+ 0, 56, 57, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0,
+ 61, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0,
+ 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 70, 0, 71, 72,
+ 73, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 78, 79, 0, 0, 0,
+ 0, 47, 0, 0, 0, 49, 0, 80, 0, 0, 0, 62, 0, 0, 63, 0,
+ 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, 62, 0,
+ 0, 0, 0, 49, 1, 85, 1, 52, 15, 86, 36, 10, 21, 87, 0, 55,
+ 0, 0, 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 88, 0, 0, 89,
+ 0, 0, 88, 0, 0, 0, 0, 78, 0, 0, 87, 9, 12, 4, 90, 8,
+ 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, 1, 94,
+ 95, 96, 97, 1, 98, 58, 81, 99,100, 4, 58, 0, 0, 0, 0, 0,
+ 0, 19, 50, 0, 0, 0, 0, 0, 0, 61, 0, 0,101,102, 0, 0,
+ 103, 0, 0, 1, 1, 50, 0, 0, 0, 38, 0, 63, 0, 0, 0, 0,
+ 0, 62, 0, 0,104, 68, 61, 0, 0, 0, 78, 0, 0, 0,105,106,
+ 58, 38, 81, 0, 0, 0, 0, 0, 0,107, 1, 14, 4, 12, 84, 0,
+ 0, 0, 0, 38, 87, 0, 0, 0, 0,108, 0, 0,109, 61, 0,110,
+ 0, 0, 0, 1, 0, 0, 0, 0, 19, 58, 0,111, 14, 52,112, 41,
+ 0, 0, 62, 0, 0, 61, 0, 0,113, 0, 87, 0, 0, 0, 61, 62,
+ 0, 0, 62, 0, 89, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0,
+ 78, 55, 0, 38, 1, 58, 1, 58, 0, 0, 63, 89, 0, 0,115, 0,
+ 0, 0, 55, 0, 0, 0, 0,115, 0, 0, 0, 0, 61, 0, 0, 0,
+ 0, 79, 0, 61, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 8, 91,
+ 0, 0, 1, 87, 0, 0,116, 0, 0, 0, 0, 0, 0,117, 0,118,
+ 119,120,121, 0,104, 4,122, 49, 23, 0, 0, 0, 38, 50, 38, 58,
+ 0, 0, 1, 87, 1, 1, 1, 1, 39, 1, 48,105, 87, 0, 0, 0,
+ 0, 1, 4,122, 0, 0, 0, 1,123, 0, 0, 0, 0, 0,230,230,
+ 230,230,230,232,220,220,220,220,232,216,220,220,220,220,220,202,
+ 202,220,220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220,
+ 220,220,220,230,230,230,230,240,230,220,220,220,230,230,230,220,
+ 220, 0,230,230,230,220,220,220,220,230,232,220,220,230,233,234,
+ 234,233,234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230,
+ 220,230,230,230,222,220,230,230,220,220,230,222,228,230, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24,
+ 25, 0,230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29,
+ 30, 31, 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0,
+ 0, 0, 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220,
+ 0, 0, 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230,
+ 220,230,220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230,
+ 230,230,230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230,
+ 0,220, 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230,
+ 220,230,230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0,
+ 0, 9, 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107,
+ 107,107,118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220,
+ 0,220, 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0,
+ 130,130,130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0,
+ 220, 0, 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230,
+ 0, 0, 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0,
+ 0,220,230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0,
+ 7, 0,230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230,
+ 230,230,230,230,232,228,228,220,218,230,233,220,230,220,230,230,
+ 1, 1, 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0,
+ 218,228,232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0,
+ 230,230,220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,
+ 220, 0, 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9,
+ 7, 0, 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0,
+ 1, 0, 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,
+ 216, 0,220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17, 17, 17,
+ 17, 33, 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113,129,169,
+ 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, 0, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, 9, 0,
+ 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, 23, 24,
+ 25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
+ 0, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 1, 2, 40, 41, 0, 1,
+ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, 0, 0,
+ 6, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0,
+ 8, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0,
+ 0, 0, 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, 0, 0,
+ 0, 1, 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, 20, 20,
+ 20, 20, 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, 20, 20,
+ 25, 0, 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, 28, 29,
+ 30, 31, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0,
+ 0, 0, 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, 0, 10,
+ 0, 33, 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, 36, 34,
+ 37, 0, 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, 21, 1,
+ 20, 0, 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, 0, 1,
+ 0, 1, 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, 34, 34,
+ 34, 34, 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21,
+ 0, 42, 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, 0, 0,
+ 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 20, 20, 1, 20,
+ 20, 0, 0, 0, 0, 0, 0, 0, 26, 21, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 48, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 11, 12, 12, 12,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 12, 21, 12, 12, 12, 12, 22,
+ 23, 23, 23, 24, 12, 12, 12, 25, 26, 27, 12, 28, 29, 30, 31, 32,
+ 33, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35,
+ 12, 36, 7, 7, 37, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 38, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 34, 35, 35, 35, 35,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 2, 2, 51, 51, 52, 53, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 57, 57, 56, 56, 56, 56, 56, 56, 58, 59, 60, 61,
+ 56, 62, 62, 63, 64, 65, 66, 67, 68, 69, 70, 56, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 71,
+ 62, 62, 62, 62, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 74, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 88, 89, 89, 89, 90, 89,
+ 91, 92, 93, 94, 95, 95, 96, 97, 87, 98, 99,100,101,102,103,104,
+ 105,105,105, 2,106,107,108,109,110,111,112,113,114,115,116, 87,
+ 89,117,118,119,120,121,122,123,124,125,126, 87,127,128, 87,129,
+ 130,131,132, 87,133,134,135,136,137,138, 87, 87,139,140,141,142,
+ 87,143, 87,144,145,145,145,145,145,145,145,145,145,145,145, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87,146,147,147,147,147,147,147,147,147,147, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,148,148,148,148,
+ 148, 87, 87, 87,149,149,149,149,150,151,152,152, 87, 87, 87, 87,
+ 153,153,154,155,156,156,156,156,156,156,156,156,156,156,156,156,
+ 156,156,156,156,156,156,156,156,156,156,157,157,157,157,156, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87,158,159,160,161,162,162,162, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,163,164, 87, 87,
+ 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87,165, 56, 56, 56,166,167, 51, 56, 56, 87, 56, 56, 56, 56,
+ 56, 56, 56, 56,168,168,168,168,168,168, 87, 87, 87, 87, 87, 87,
+ 87, 87, 2, 87,169, 87,170, 87, 87,171, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 33,172,172,173, 87, 87, 87, 87, 87, 56, 56, 56, 87,
+ 89, 89, 87, 87, 56, 56, 56, 56,174, 87, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 87, 87, 87, 87,
+ 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, 62, 62, 87, 87, 87, 87,
+ 87, 87, 87, 87, 62, 62, 62, 62, 62, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, 62, 87, 87, 87, 87, 87,
+ 87, 87, 87, 87, 56, 87,175,175, 0, 1, 2, 2, 0, 1, 2, 2,
+ 2, 3, 4, 5, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 3, 3,
+ 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 0, 0, 7, 0, 8, 8, 8, 8, 8, 8, 8, 9, 10, 11, 11, 11,
+ 11, 11, 12, 11, 13, 13, 13, 13, 13, 13, 13, 13, 14, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 15, 16, 16, 16, 16, 16, 17, 18, 18,
+ 18, 18, 18, 18, 19, 20, 21, 21, 22, 23, 21, 24, 21, 21, 21, 21,
+ 21, 25, 21, 21, 26, 26, 26, 26, 26, 21, 21, 21, 27, 27, 27, 27,
+ 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 26, 21, 21, 21, 21, 21,
+ 21, 21, 31, 21, 32, 32, 32, 32, 32, 33, 34, 32, 35, 35, 35, 35,
+ 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37,
+ 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39,
+ 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41,
+ 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43,
+ 43, 43, 43, 43, 44, 44, 44, 45, 44, 44, 44, 44, 46, 46, 46, 46,
+ 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 48, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50,
+ 50, 50, 50, 51, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55,
+ 55, 55, 55, 55, 56, 56, 57, 57, 57, 57, 58, 57, 59, 59, 60, 61,
+ 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 65, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 55, 55, 55, 55, 55, 67, 67, 67, 67,
+ 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, 64, 64, 70, 70, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 8, 8, 8, 8, 8, 72, 72, 72, 72,
+ 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75,
+ 75, 76, 76, 76, 13, 50, 50, 50, 73, 77, 78, 79, 4, 4, 80, 4,
+ 4, 81, 82, 83, 4, 4, 4, 84, 8, 8, 8, 8, 11, 11, 11, 11,
+ 11, 11, 11, 11, 85, 0, 0, 0, 0, 0, 0, 86, 0, 4, 0, 0,
+ 0, 8, 8, 8, 0, 0, 87, 88, 89, 0, 4, 4, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90,
+ 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 4, 4, 92, 92, 92, 92,
+ 92, 92, 92, 92, 50, 50, 50, 93, 93, 93, 93, 93, 53, 53, 53, 53,
+ 53, 53, 13, 13, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
+ 94, 94, 94, 0, 95, 0, 96, 97, 98, 99, 99, 99, 99,100,101,102,
+ 102,102,102,103,104,104,104,105, 52, 52, 52, 52, 52, 0,104,104,
+ 0, 0, 0,102, 52, 52, 0, 0, 0, 0, 52,106, 0, 0, 0, 0,
+ 0,102,102,107,102,102,102,102,102,108, 0, 0, 94, 94, 94, 94,
+ 0, 0, 0, 0,109,109,109,109,109,109,109,109,109,109,109,109,
+ 109,110,110,110,111,111,111,111,111,111,111,111,111,111,111,111,
+ 13, 13, 13, 13, 13, 13,112,112,112,112,112,112, 0, 0,113, 4,
+ 4, 4, 4, 4,114, 4, 4, 4, 4, 4, 4, 4,115,115,115, 0,
+ 116,116,116,116,117,117,117,117,117,117, 32, 32,118,118,119,120,
+ 120,120, 52, 52,121,121,121,121,122,121, 49, 49,123,123,123,123,
+ 123,123, 49, 49,124,124,124,124,124,124,125,125, 53, 53, 53, 4,
+ 4,126,127, 54, 54, 54, 54, 54,125,125,125,125,128,128,128,128,
+ 128,128,128,128, 4,129, 18, 18, 18, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21,130, 21, 21, 21, 21, 8, 0,131, 0,
+ 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21,132, 0, 0, 1, 2,
+ 1, 2,133,101,102,134, 52, 52, 52, 52, 0, 0,135,135,135,135,
+ 135,135,135,135, 0, 0, 0, 0, 11, 11, 11, 11, 11, 0, 11, 11,
+ 11, 0, 0,136,137,137,138,138,138,138,139, 0,140,140,140,141,
+ 141,142,142,142,143,143,144,144,144,144,144,144,145,145,145,145,
+ 145,146,146,146,147,147,147,148,148,148,148,148,149,149,149,150,
+ 150,150,150,151,151,151,151,151,151,151,151,151,152,152,152,152,
+ 152,152,152,152,153,153,153,153,154,154,155,155,156,156,156,156,
+ 156,156,157,157,158,158,159,159,159,159,159,159,160,160,161,161,
+ 161,161,161,161,162,162,162,162,162,162,163,163,164,164,164,164,
+ 165,165,165,165,166,166,166,166,167,167,168,168,169,169,169,169,
+ 169,169,169,169,170,170,170,170,170,170,170,170,171,171,171,171,
+ 171,171,171,171,172,172,172,172,172,172,172,172,173,173,173,173,
+ 173,173,173,173,174,174,174,175,175,175,175,176,176,176,176,177,
+ 177,177,178,178,179,179,179,179,179,179,179,179,180,180,180,180,
+ 180,181,181,181,182,182,182,182,182,183,183,183,184,184,184,184,
+ 184,184,185, 43,186,186,186,186,186,186,186,186,187,187,187,188,
+ 188,188,188,188,189,189,189,190,189,189,189,189,191,191,191,191,
+ 191,191,191,191,192,192,192,192,192,192,192,192,193,193,193,193,
+ 193,193,193,193,194,194,194,194,194,194, 66, 66,195,195,195,195,
+ 195,195,195,195,196,196,196,196,196,196,196,196,197,197,197,197,
+ 197,197,197,197,198,198,198,198,198,198,198,198,199,199,199,199,
+ 199,199,199,199,200,200,200,200,200,200,200,200,201,201,201,201,
+ 201,202,202,202,202,202,202, 55,203,203,203,203,204,204,204,204,
+ 204,204,204,205,205,205,205,205,205,205,205,205,206,206,206,206,
+ 206,206,207,207,207,207,207,207,207,207,207,207,208,208,208,208,
+ 208,208,208,208,110,110,110,110, 39, 39, 39, 39,209,209,209,209,
+ 209,209,209,209,210,210,210,210,210,210,210,210,211,211,211,211,
+ 211,211,211,211,212,212,212,212,212,212,212,212,112,112,112,112,
+ 112,112,112,112,112,112,112,112,213,213,213,214,214,214,214,214,
+ 214,215,215,215,216,216,216,216,216,216,216,216,217,217,217,217,
+ 217,217,217,217,218,218,218,218,218,218,218,218,218,218,218,218,
+ 218,218,219, 94,220,220,220,220,220,220,220,220,221,221,221,221,
+ 221,221,221,221,102,102,102,102,102,102,102,102,222, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,102,102,
+ 102, 99,223,224,224,224,224,224,224,224,224,224,225,225,225,225,
+ 225,225,225,225,225,225, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,227,228, 0,229, 0,
+ 0, 0, 0, 0,230,230,230,230,230,230,230,230, 91, 91, 91, 91,
+ 91, 91, 91, 91,231,231,231,231,231,231,231,231,232,232,232,232,
+ 233,233,233,233,234,234,234,234,234,234,234,234,235,235,235,235,
+ 235,235,235,235,236, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8,
+ 8, 8, 8, 8, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 0,
+ 0, 0, 4, 0, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 5, 0,
+ 2, 5, 6, 0, 7, 7, 7, 7, 8, 9, 8, 10, 8, 11, 8, 8,
+ 8, 8, 8, 8, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 14, 14,
+ 16, 17, 17, 17, 17, 17, 17, 17, 18, 19, 19, 19, 19, 19, 19, 19,
+ 20, 21, 20, 22, 20, 20, 23, 23, 20, 20, 20, 20, 22, 20, 24, 7,
+ 7, 25, 20, 20, 26, 20, 20, 20, 20, 20, 20, 21, 27, 27, 27, 27,
+ 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
+ 32, 20, 20, 20, 33, 33, 33, 33, 34, 35, 33, 33, 33, 36, 33, 33,
+ 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40,
+ 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44,
+ 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 48, 48, 48, 48,
+ 49, 49, 49, 49, 49, 50, 51, 49, 52, 52, 52, 52, 53, 53, 53, 53,
+ 53, 53, 54, 53, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57,
+ 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 62,
+ 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, 0, 0, 66, 66, 66, 66,
+ 67, 67, 67, 67, 68, 68, 68, 68, 69, 70, 71, 71, 71, 71, 71, 71,
+ 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75,
+ 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 79,
+ 80, 80, 80, 80, 81, 81, 81, 81, 82, 7, 7, 7, 83, 7, 84, 85,
+ 0, 84, 86, 0, 2, 87, 88, 2, 2, 2, 2, 89, 90, 87, 91, 2,
+ 2, 2, 92, 2, 2, 2, 2, 93, 0, 0, 0, 86, 1, 0, 0, 94,
+ 0, 95, 96, 0, 4, 0, 0, 0, 0, 0, 0, 4, 97, 97, 97, 97,
+ 98, 98, 98, 98, 13, 13, 13, 13, 99, 99, 99, 99,100,100,100,100,
+ 0,101, 0, 0,102,100,103,104, 0, 0,100, 0,105,106,106,106,
+ 106,106,106,106,106,106,107,105,108,109,109,109,109,109,109,109,
+ 109,109,110,108,111,111,111,111,112, 55, 55, 55, 55, 55, 55,113,
+ 109,109,109,110,109,109, 0, 0,114,114,114,114,115,115,115,115,
+ 116,116,116,116,117,117,117,117, 96, 2, 2, 2, 2, 2, 94, 2,
+ 118,118,118,118,119,119,119,119,120,120,120,120,121,121,121,121,
+ 121,121,121,122,123,123,123,123,124,124,124,124,124,124,124,125,
+ 126,126,126,126,127,127,127,127,128,128,128,128, 2, 2, 3, 2,
+ 2,129,130, 0,131,131,131,131,132, 17, 17, 18, 20, 20, 20,133,
+ 7, 7, 7,134, 20, 20, 20, 23, 0,135,109,109,109,109,109,136,
+ 137,137,137,137, 0, 0, 0,138,139,139,139,139,140,140,140,140,
+ 84, 0, 0, 0,141,141,141,141,142,142,142,142,143,143,143,143,
+ 144,144,144,144,145,145,145,145,146,146,146,146,147,147,147,147,
+ 148,148,148,148,149,149,149,149,150,150,150,150,151,151,151,151,
+ 152,152,152,152,153,153,153,153,154,154,154,154,155,155,155,155,
+ 156,156,156,156,157,157,157,157,158,158,158,158,159,159,159,159,
+ 160,160,160,160,161,161,161,161,162,162,162,162,163,163,163,163,
+ 164,164,164,164,165,165,165,165,166,166,166,166,167,167,167,167,
+ 168,168,168,168,169,169,169,169,170,170,170,170,171,171,171,171,
+ 172,172,172,172,173,173,173,173,174,174,174,174,175,175,175,175,
+ 176,176,176,176,177,177,177,177,178,178,178,178,179,179,179,179,
+ 180,180,180,180,181,181,181,181,182,182,182,182,183,183,183,183,
+ 184,184,184,184,185,185,185,185,186, 45, 45, 45,187,187,187,187,
+ 188,188,188,188,189,189,189,189,190,190,190,190,190,190,191,190,
+ 192,192,192,192,193,193,193,193,194,194,194,194,195,195,195,195,
+ 196,196,196,196,197,197,197,197,198,198,198,198,199,199,199,199,
+ 200,200,200,200,201,201,201,201,202,202,202,202,203,203,203,203,
+ 204,204,204,204,205,205,205,205,206,206,206,206,207,207,207,207,
+ 208,208,208,208,209,209,209,209,210,210,210,210,211,211,211,211,
+ 212,212,212,212,213,213,213,213,214,214,214,214,215,215,215,215,
+ 216,216,216,216,217,217,217,217,218,218,218,218,219,219,219,219,
+ 220,221,221,221,222,222,222,222,221,221,221,221,223,106,106,106,
+ 106,109,109,109,224,224,224,224,225,225,225,225, 0,226, 86, 0,
+ 0, 0,226, 7, 82,138, 7, 0, 0, 0,227, 86,228,228,228,228,
+ 229,229,229,229,230,230,230,230,231,231,231,231,232,232,232,232,
+ 233,233,233,233,234, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 0, 19, 0, 0, 0,
+ 0, 0, 26, 26, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9, 9, 9,
+ 9, 9, 0, 9, 9, 0, 9, 0, 9, 9, 55, 55, 55, 55, 55, 55,
+ 6, 6, 6, 6, 6, 1, 1, 6, 6, 4, 4, 4, 4, 4, 4, 4,
+ 4, 14, 14, 14, 14, 14, 14, 14, 3, 3, 3, 3, 3, 0, 3, 3,
+ 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 1, 1, 1, 3, 3,
+ 1, 3, 3, 3, 37, 37, 37, 37, 38, 38, 38, 38, 64, 64, 64, 64,
+ 90, 90, 90, 90, 95, 95, 95, 95, 3, 3, 0, 3, 7, 7, 7, 7,
+ 7, 1, 1, 1, 1, 7, 7, 7, 0, 0, 7, 7, 5, 5, 5, 5,
+ 11, 11, 11, 11, 10, 10, 10, 10, 21, 21, 21, 21, 22, 22, 22, 22,
+ 23, 23, 23, 23, 16, 16, 16, 16, 20, 20, 20, 20, 36, 36, 36, 36,
+ 24, 24, 24, 24, 24, 24, 24, 0, 18, 18, 18, 18, 25, 25, 25, 25,
+ 25, 0, 0, 0, 0, 25, 25, 25, 33, 33, 33, 33, 8, 8, 8, 8,
+ 8, 8, 8, 0, 12, 12, 12, 12, 30, 30, 30, 30, 29, 29, 29, 29,
+ 28, 28, 28, 28, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 0,
+ 0, 0, 35, 35, 45, 45, 45, 45, 44, 44, 44, 44, 44, 0, 0, 0,
+ 43, 43, 43, 43, 46, 46, 46, 46, 31, 31, 31, 31, 32, 32, 0, 0,
+ 32, 0, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 52, 52, 52, 52,
+ 58, 58, 58, 58, 54, 54, 54, 54, 91, 91, 91, 91, 62, 62, 62, 62,
+ 76, 76, 76, 76, 93, 93, 93, 93, 70, 70, 70, 70, 73, 73, 73, 73,
+ 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
+ 1, 1, 0, 0, 19, 19, 9, 9, 9, 9, 9, 6, 19, 9, 9, 9,
+ 9, 9, 19, 19, 9, 9, 9, 19, 6, 19, 19, 19, 19, 19, 19, 9,
+ 0, 0, 0, 19, 0, 0, 9, 0, 0, 0, 19, 19, 27, 27, 27, 27,
+ 56, 56, 56, 56, 61, 61, 61, 61, 13, 13, 13, 13, 0, 13, 0, 13,
+ 0, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 0, 15, 15, 15,
+ 15, 15, 15, 15, 15, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 0, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12, 12, 0,
+ 39, 39, 39, 39, 86, 86, 86, 86, 77, 77, 77, 77, 79, 79, 79, 79,
+ 60, 60, 60, 60, 65, 65, 65, 65, 75, 75, 75, 75, 69, 69, 69, 69,
+ 69, 69, 0, 69, 74, 74, 74, 74, 84, 84, 84, 84, 84, 84, 84, 0,
+ 68, 68, 68, 68, 92, 92, 92, 92, 87, 87, 87, 87, 19, 9, 19, 19,
+ 19, 19, 0, 0, 2, 2, 2, 2, 19, 19, 19, 4, 3, 3, 0, 0,
+ 1, 1, 6, 6, 0, 0, 17, 17, 17, 17, 0, 0, 49, 49, 49, 49,
+ 0, 1, 1, 1, 71, 71, 71, 71, 67, 67, 67, 67, 42, 42, 42, 42,
+ 41, 41, 41, 41,118,118,118,118, 53, 53, 53, 53, 59, 59, 59, 59,
+ 40, 40, 40, 40, 51, 51, 51, 51, 50, 50, 50, 50,135,135,135,135,
+ 106,106,106,106,104,104,104,104,161,161,161,161,110,110,110,110,
+ 47, 47, 47, 47, 81, 81, 81, 81,120,120,120,120,116,116,116,116,
+ 128,128,128,128, 66, 66, 66, 66, 72, 72, 72, 72, 98, 98, 98, 98,
+ 97, 97, 97, 97, 57, 57, 57, 57, 88, 88, 88, 88,117,117,117,117,
+ 112,112,112,112, 78, 78, 78, 78, 83, 83, 83, 83, 82, 82, 82, 82,
+ 122,122,122,122, 89, 89, 89, 89,130,130,130,130,144,144,144,144,
+ 156,156,156,156,147,147,147,147,148,148,148,148,158,158,158,158,
+ 153,153,153,153,149,149,149,149, 94, 94, 94, 94, 85, 85, 85, 85,
+ 101,101,101,101, 96, 96, 96, 96,111,111,111,111,100,100,100,100,
+ 100, 36, 36, 36,108,108,108,108,129,129,129,129,109,109,109,109,
+ 107,107,107,107,107,107,107, 1,137,137,137,137,124,124,124,124,
+ 123,123,123,123,114,114,114,114,102,102,102,102,126,126,126,126,
+ 142,142,142,142,125,125,125,125,154,154,154,154,150,150,150,150,
+ 141,141,141,141,140,140,140,140,121,121,121,121,133,133,133,133,
+ 134,134,134,134,138,138,138,138,143,143,143,143,145,145,145,145,
+ 63, 63, 63, 63,157,157,157,157, 80, 80, 80, 80,127,127,127,127,
+ 115,115,115,115,159,159,159,159,103,103,103,103,119,119,119,119,
+ 146,146,146,146, 99, 99, 99, 99,136,139, 13, 13,155,155,155,155,
+ 136,136,136,136, 17, 15, 15, 15,139,139,139,139,105,105,105,105,
+ 0, 0, 0, 1, 0, 0, 1, 1,131,131,131,131,151,151,151,151,
+ 160,160,160,160,152,152,152,152,113,113,113,113,132,132,132,132,
+ 15, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9,
+ 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 16, 17, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19, 20, 9,
+ 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30,
+ 0, 0, 31, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 36, 37,
+ 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, 46, 47,
+ 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, 0, 53, 0,
+ 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0,
+ 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 0, 0,
+ 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 67, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,
+ 101,102,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0,105,106, 0,107, 0,
+ 0, 0,108, 0,109, 0,110, 0,111,112,113, 0,114, 0, 0, 0,
+ 115, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,118,119,120,121, 0,122,123,124,125,126,
+ 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,128,129,130,131,132,133,134,135,136,137,138,139,140,141,
+ 142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,
+ 0, 0, 0,158,159,160,161, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,162,163, 0, 0, 0,
+ 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,169,170, 0, 0, 0, 0,171,172, 0,
+ 0, 0,173,174,175,176,177,178,179,180,181,182,183,184,185,186,
+ 187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,
+ 203,204,205,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4,
+};
+static const uint16_t
+_hb_ucd_u16[4888] =
+{
+ 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12,
+ 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23,
+ 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31,
+ 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39,
+ 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13,
+ 13, 13, 13, 35, 9, 42, 11, 11, 43, 44, 32, 45, 46, 47, 47, 48,
+ 49, 50, 47, 47, 51, 32, 52, 53, 47, 47, 47, 47, 47, 54, 55, 56,
+ 57, 58, 47, 32, 59, 47, 47, 47, 47, 47, 60, 53, 61, 47, 62, 63,
+ 47, 64, 65, 66, 47, 67, 47, 47, 68, 69, 47, 47, 70, 32, 71, 32,
+ 72, 47, 47, 73, 74, 75, 76, 77, 78, 47, 47, 79, 80, 81, 82, 83,
+ 84, 47, 47, 85, 86, 87, 88, 89, 84, 47, 47, 79, 90, 47, 82, 91,
+ 92, 47, 47, 93, 94, 95, 82, 96, 97, 47, 47, 98, 99, 100, 101, 102,
+ 103, 47, 47, 104, 105, 106, 82, 107, 108, 47, 47, 93, 109, 110, 82, 111,
+ 112, 47, 47, 113, 114, 115, 82, 116, 92, 47, 47, 47, 117, 118, 101, 119,
+ 47, 47, 47, 120, 121, 122, 66, 66, 47, 47, 47, 123, 124, 125, 47, 47,
+ 126, 127, 128, 129, 47, 47, 47, 130, 131, 32, 32, 132, 133, 134, 66, 66,
+ 47, 47, 135, 136, 122, 137, 138, 139, 140, 141, 9, 9, 9, 11, 11, 142,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 144, 145,
+ 47, 146, 9, 9, 9, 9, 9, 147, 148, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 149, 47, 150, 151, 47, 47, 47, 47, 152, 153,
+ 47, 154, 47, 155, 47, 156, 47, 156, 47, 47, 47, 157, 158, 159, 160, 145,
+ 161, 160, 47, 47, 162, 47, 47, 47, 163, 47, 164, 47, 47, 47, 47, 47,
+ 47, 47, 165, 166, 167, 47, 47, 47, 47, 47, 47, 47, 47, 168, 146, 146,
+ 47, 169, 47, 47, 47, 170, 171, 172, 160, 160, 173, 174, 32, 32, 32, 32,
+ 175, 47, 47, 176, 177, 122, 178, 179, 180, 47, 181, 61, 47, 47, 182, 183,
+ 47, 47, 184, 185, 186, 61, 47, 187, 11, 9, 9, 9, 66, 188, 189, 190,
+ 11, 11, 191, 27, 27, 27, 192, 193, 11, 194, 27, 27, 32, 32, 32, 32,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 195, 13, 13, 13, 13, 13, 13,
+ 196, 196, 196, 196, 196, 197, 196, 11, 198, 198, 198, 199, 200, 201, 201, 200,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 27, 211, 211, 211, 212, 213, 32,
+ 214, 215, 216, 217, 218, 145, 219, 219, 220, 221, 222, 146, 223, 224, 146, 225,
+ 226, 226, 226, 226, 226, 226, 226, 226, 227, 146, 228, 146, 146, 146, 146, 229,
+ 146, 230, 226, 231, 146, 232, 233, 146, 146, 146, 146, 146, 146, 146, 145, 145,
+ 145, 234, 146, 146, 146, 146, 235, 145, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 236, 237, 146, 146, 238, 146, 146, 146, 146, 146, 146, 239, 146,
+ 146, 146, 146, 146, 146, 146, 240, 241, 145, 242, 146, 146, 243, 226, 244, 226,
+ 245, 246, 226, 226, 226, 247, 226, 248, 146, 146, 146, 226, 249, 146, 146, 146,
+ 9, 9, 9, 11, 11, 11, 250, 251, 13, 13, 13, 13, 13, 13, 252, 253,
+ 11, 11, 11, 47, 47, 47, 254, 255, 47, 47, 47, 47, 47, 47, 32, 32,
+ 256, 257, 258, 259, 260, 261, 262, 262, 263, 264, 265, 266, 267, 47, 47, 47,
+ 47, 268, 148, 47, 47, 47, 47, 269, 47, 270, 47, 47, 146, 146, 146, 47,
+ 146, 146, 271, 146, 272, 273, 146, 146, 271, 146, 146, 273, 146, 146, 146, 146,
+ 47, 47, 47, 47, 146, 146, 146, 146, 47, 274, 47, 47, 47, 47, 47, 47,
+ 47, 146, 146, 146, 146, 47, 47, 187, 275, 47, 61, 47, 13, 13, 276, 277,
+ 13, 278, 47, 47, 47, 47, 279, 280, 31, 281, 282, 283, 13, 13, 13, 284,
+ 285, 286, 287, 288, 289, 290, 11, 291, 292, 47, 293, 294, 47, 47, 47, 295,
+ 296, 47, 47, 297, 298, 160, 32, 299, 61, 47, 300, 47, 301, 302, 47, 47,
+ 72, 47, 47, 303, 304, 305, 306, 61, 47, 47, 307, 308, 309, 310, 47, 311,
+ 47, 47, 47, 312, 58, 313, 314, 315, 47, 47, 47, 11, 11, 316, 317, 11,
+ 11, 11, 11, 11, 47, 47, 318, 160, 319, 319, 319, 319, 319, 319, 319, 319,
+ 320, 320, 320, 320, 320, 320, 320, 320, 11, 321, 322, 47, 47, 47, 47, 47,
+ 47, 47, 47, 323, 31, 324, 47, 47, 47, 47, 47, 325, 146, 47, 47, 47,
+ 47, 47, 47, 47, 326, 146, 146, 327, 32, 328, 32, 329, 330, 331, 332, 47,
+ 47, 47, 47, 47, 47, 47, 47, 333, 334, 2, 3, 4, 5, 335, 336, 337,
+ 47, 338, 47, 47, 47, 47, 339, 340, 341, 145, 145, 342, 219, 219, 219, 343,
+ 344, 146, 146, 146, 146, 146, 146, 345, 346, 346, 346, 346, 346, 346, 346, 346,
+ 47, 47, 47, 47, 47, 47, 347, 145, 47, 47, 348, 47, 349, 47, 47, 60,
+ 47, 350, 47, 47, 47, 351, 219, 219, 9, 9, 147, 11, 11, 47, 47, 47,
+ 47, 47, 160, 9, 9, 147, 11, 11, 47, 47, 47, 47, 47, 47, 350, 9,
+ 9, 352, 11, 11, 11, 11, 11, 11, 27, 27, 27, 27, 27, 27, 27, 27,
+ 47, 47, 47, 47, 47, 353, 47, 354, 47, 47, 355, 145, 145, 145, 47, 356,
+ 47, 357, 47, 350, 66, 66, 66, 66, 47, 47, 47, 358, 145, 145, 145, 145,
+ 359, 47, 47, 360, 145, 66, 47, 361, 47, 362, 145, 145, 363, 47, 364, 66,
+ 47, 47, 47, 365, 47, 366, 47, 366, 47, 365, 144, 145, 145, 145, 145, 145,
+ 9, 9, 9, 9, 11, 11, 11, 367, 47, 47, 368, 160, 160, 160, 160, 160,
+ 145, 145, 145, 145, 145, 145, 145, 145, 47, 47, 369, 47, 47, 47, 47, 47,
+ 47, 362, 370, 47, 60, 371, 66, 47, 372, 66, 66, 47, 373, 145, 47, 47,
+ 374, 47, 47, 360, 375, 376, 377, 378, 180, 47, 47, 379, 380, 47, 47, 160,
+ 97, 47, 381, 382, 383, 47, 47, 384, 180, 47, 47, 385, 386, 387, 388, 145,
+ 47, 47, 389, 390, 32, 32, 32, 32, 47, 47, 365, 47, 47, 391, 172, 160,
+ 92, 47, 47, 113, 392, 393, 394, 32, 47, 47, 47, 395, 396, 397, 47, 47,
+ 47, 47, 47, 398, 399, 160, 160, 160, 47, 47, 400, 401, 402, 403, 32, 32,
+ 47, 47, 47, 404, 405, 160, 66, 66, 47, 47, 406, 407, 160, 160, 160, 160,
+ 47, 143, 408, 409, 47, 47, 47, 47, 47, 47, 389, 410, 66, 66, 66, 66,
+ 9, 9, 9, 9, 11, 11, 128, 411, 47, 47, 47, 412, 413, 160, 160, 160,
+ 47, 47, 47, 47, 47, 414, 415, 416, 417, 47, 47, 418, 419, 420, 47, 47,
+ 421, 422, 66, 47, 47, 47, 47, 47, 47, 47, 400, 423, 424, 128, 145, 425,
+ 47, 156, 426, 427, 32, 32, 32, 32, 47, 47, 47, 359, 428, 160, 47, 47,
+ 429, 430, 160, 160, 160, 160, 160, 160, 47, 47, 47, 47, 47, 47, 47, 431,
+ 47, 47, 47, 47, 145, 432, 433, 434, 219, 219, 219, 219, 219, 219, 219, 66,
+ 47, 47, 47, 47, 47, 47, 47, 424, 47, 47, 47, 208, 208, 208, 208, 208,
+ 47, 47, 47, 47, 47, 47, 305, 47, 47, 47, 47, 47, 160, 47, 47, 435,
+ 47, 47, 47, 436, 437, 438, 439, 47, 9, 9, 9, 9, 9, 9, 11, 11,
+ 145, 440, 66, 66, 66, 66, 66, 66, 47, 47, 47, 47, 391, 441, 416, 416,
+ 442, 443, 27, 27, 27, 27, 444, 416, 47, 445, 208, 208, 208, 208, 208, 208,
+ 32, 32, 32, 32, 32, 146, 146, 146, 146, 146, 146, 146, 146, 146, 446, 447,
+ 448, 146, 449, 146, 146, 146, 146, 146, 146, 146, 146, 146, 450, 146, 146, 146,
+ 9, 451, 11, 452, 453, 11, 196, 9, 454, 455, 9, 456, 11, 9, 451, 11,
+ 452, 453, 11, 196, 9, 454, 455, 9, 456, 11, 9, 451, 11, 452, 453, 11,
+ 196, 9, 454, 455, 9, 456, 11, 9, 451, 11, 196, 9, 457, 458, 459, 460,
+ 11, 461, 9, 462, 463, 464, 465, 11, 466, 9, 467, 11, 468, 160, 160, 160,
+ 32, 32, 32, 469, 32, 32, 470, 471, 472, 473, 32, 32, 32, 32, 32, 32,
+ 474, 11, 11, 11, 11, 11, 11, 11, 32, 32, 32, 32, 32, 32, 32, 32,
+ 47, 47, 47, 475, 476, 146, 146, 146, 47, 47, 477, 32, 47, 47, 478, 479,
+ 47, 47, 47, 47, 355, 32, 32, 32, 9, 9, 454, 11, 480, 305, 66, 66,
+ 145, 145, 481, 482, 145, 145, 145, 145, 145, 145, 483, 145, 145, 145, 145, 145,
+ 47, 47, 47, 47, 47, 47, 47, 226, 484, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 485, 146, 146, 146, 146, 146, 146, 146, 160,
+ 208, 208, 208, 208, 208, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962,
+ 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0,
+ 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147,
+ 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0,
+ 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143,
+ 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160,
+ 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0,
+ 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206,
+ 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035,
+ 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250,
+ 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0,
+ 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299,
+ 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340,
+ 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177,
+ 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0,
+ 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165,
+ 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279,
+ 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130,
+ 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5,
+ 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522,
+ 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567,
+ 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549,
+ 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559,
+ 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0,
+ 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648,
+ 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662,
+ 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0,
+ 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671,
+ 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0,
+ 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142,
+ 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381,
+ 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181,
+ 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210,
+ 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222,
+ 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243,
+ 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389,
+ 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284,
+ 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291,
+ 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260,
+ 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343,
+ 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696,
+ 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698,
+ 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359,
+ 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274,
+ 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304,
+ 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707,
+ 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0,
+ 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743,
+ 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770,
+ 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0,
+ 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790,
+ 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800,
+ 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24,
+ 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714,
+ 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750,
+ 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807,
+ 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825,
+ 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829,
+ 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515,
+ 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518,
+ 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830,
+ 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0,
+ 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0,
+ 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847,
+ 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0,
+ 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0,
+ 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0,
+ 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0,
+ 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890,
+ 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897,
+ 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0,
+ 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917,
+ 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924,
+ 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929,
+ 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825,
+ 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500,
+ 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679,
+ 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722,
+ 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540,
+ 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589,
+ 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101,
+ 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110,
+ 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801,
+ 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610,
+ 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494,
+ 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748,
+ 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161,
+ 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727,
+ 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684,
+ 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566,
+ 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729,
+ 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525,
+ 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0,
+ 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213,
+ 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458,
+ 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591,
+ 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735,
+ 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171,
+ 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325,
+ 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438,
+ 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526,
+ 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693,
+ 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777,
+ 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916,
+ 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0,
+ 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599,
+ 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121,
+ 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142,
+ 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169,
+ 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185,
+ 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206,
+ 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224,
+ 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39,
+ 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266,
+ 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286,
+ 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852,
+ 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324,
+ 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351,
+ 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50,
+ 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78,
+ 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55,
+ 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861,
+ 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436,
+ 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467,
+ 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873,
+ 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875,
+ 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531,
+ 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559,
+ 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73,
+ 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898,
+ 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902,
+ 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904,
+ 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81,
+ 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669,
+ 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686,
+ 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719,
+ 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753,
+ 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925,
+ 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800,
+ 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816,
+ 817, 818, 819, 820, 821, 935, 0, 0,
+};
+static const int16_t
+_hb_ucd_i16[196] =
+{
+ 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2,
+ 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1,
+ 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3,
+ -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0,
+ 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0,
+ 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0,
+ 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0,
+ 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0,
+ 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1,
+ -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0,
+ 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106,
+ -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1,
+ -1, 0, 1, -1,
};
static inline uint_fast8_t
_hb_ucd_gc (unsigned u)
{
- return u<1114112u?_hb_ucd_u8[4920+(((_hb_ucd_u8[1104+(((_hb_ucd_u16[((_hb_ucd_u8[272+(((_hb_ucd_u8[u>>1>>3>>3>>5])<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2;
+ return u<1114112u?_hb_ucd_u8[5056+(((_hb_ucd_u8[1168+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2;
}
static inline uint_fast8_t
_hb_ucd_ccc (unsigned u)
{
- return u<125259u?_hb_ucd_u8[6796+(((_hb_ucd_u8[6276+(((_hb_ucd_u8[5844+(((_hb_ucd_u8[5508+(((_hb_ucd_u8[5262+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0;
+ return u<125259u?_hb_ucd_u8[6970+(((_hb_ucd_u8[6426+(((_hb_ucd_u8[5982+(((_hb_ucd_u8[5646+(((_hb_ucd_u8[5400+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0;
}
static inline unsigned
_hb_ucd_b4 (const uint8_t* a, unsigned i)
@@ -6759,17 +6877,17 @@ _hb_ucd_b4 (const uint8_t* a, unsigned i)
static inline int_fast16_t
_hb_ucd_bmg (unsigned u)
{
- return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7672+(((_hb_ucd_u8[7448+(((_hb_ucd_u8[7352+(((_hb_ucd_b4(7288+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0;
+ return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7714+(((_hb_ucd_u8[7594+(((_hb_ucd_b4(7466+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0;
}
static inline uint_fast8_t
_hb_ucd_sc (unsigned u)
{
- return u<918016u?_hb_ucd_u8[11242+(((_hb_ucd_u8[10314+(((_hb_ucd_u8[8938+(((_hb_ucd_u8[8362+(((_hb_ucd_u8[7912+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2;
+ return u<918016u?_hb_ucd_u8[11480+(((_hb_ucd_u8[10532+(((_hb_ucd_u8[9124+(((_hb_ucd_u8[8500+(((_hb_ucd_u8[8050+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2;
}
static inline uint_fast16_t
_hb_ucd_dm (unsigned u)
{
- return u<195102u?_hb_ucd_u16[1536+(((_hb_ucd_u8[12544+(((_hb_ucd_u8[12162+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0;
+ return u<195102u?_hb_ucd_u16[1576+(((_hb_ucd_u8[12802+(((_hb_ucd_u8[12420+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0;
}
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ucd.cc b/thirdparty/harfbuzz/src/hb-ucd.cc
index ad72a26c04..baea224a25 100644
--- a/thirdparty/harfbuzz/src/hb-ucd.cc
+++ b/thirdparty/harfbuzz/src/hb-ucd.cc
@@ -203,9 +203,7 @@ hb_ucd_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
}
-#if HB_USE_ATEXIT
static void free_static_ucd_funcs ();
-#endif
static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_ucd_unicode_funcs_lazy_loader_t>
{
@@ -222,21 +220,17 @@ static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_
hb_unicode_funcs_make_immutable (funcs);
-#if HB_USE_ATEXIT
- atexit (free_static_ucd_funcs);
-#endif
+ hb_atexit (free_static_ucd_funcs);
return funcs;
}
} static_ucd_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_ucd_funcs ()
{
static_ucd_funcs.free_instance ();
}
-#endif
hb_unicode_funcs_t *
hb_ucd_get_unicode_funcs ()
diff --git a/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh b/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh
index eb7776eecb..c216379201 100644
--- a/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh
+++ b/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh
@@ -6,14 +6,14 @@
*
* on file with this header:
*
- * # emoji-data.txt
- * # Date: 2020-01-28, 20:52:38 GMT
- * # © 2020 Unicode®, Inc.
+ * # emoji-data-14.0.0.txt
+ * # Date: 2021-08-26, 17:22:22 GMT
+ * # © 2021 Unicode®, Inc.
* # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
* # For terms of use, see http://www.unicode.org/terms_of_use.html
* #
* # Emoji Data for UTS #51
- * # Version: 13.0
+ * # Used with Emoji Version 14.0 and subsequent minor revisions (if any)
* #
* # For documentation and usage, see http://www.unicode.org/reports/tr51
*/
@@ -24,36 +24,42 @@
#include "hb-unicode.hh"
static const uint8_t
-_hb_emoji_u8[448] =
+_hb_emoji_u8[544] =
{
- 0, 0, 0, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16, 17, 17, 17, 50, 20, 21, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,118,152,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,118,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 7, 9, 10, 11, 0,
- 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0,
- 7, 7, 7, 14, 15, 16, 17, 18, 19, 20, 7, 7, 7, 7, 7, 21,
- 7, 7, 7, 7, 22, 23, 7, 7, 7, 24, 7, 14, 0, 25, 0, 26,
- 27, 28, 29, 14, 30, 31, 7, 7, 7, 7, 7, 14, 0, 0, 0, 0,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 22,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 2, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 7, 3,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,
- 159,255,243,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 31, 0,255,255,255,255,255,255, 31,255, 3, 0, 0, 0, 8, 0,
- 0, 0, 24, 0,120, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 16, 0, 96, 0, 0, 8, 0, 0, 0, 0,
- 255,255,255,255,255,255,255,127, 0, 96, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,240, 1, 64, 0, 0,254, 3, 0,224,255,255,
- 255,255,255,255, 31, 0, 0, 0,254,127, 0, 0, 0, 0,252,115,
- 0,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 3,
- 255,255,255,255,255,255,255, 31,192,255,255,255,255,255,255,255,
- 255,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,127,
- 0, 0,224,255,255,255,255,127, 0,112, 0, 0, 0, 0, 0, 0,
- 0,127, 0,124, 0, 0, 0, 0, 0,127, 0, 0, 0,192,255,255,
- 0,240,255,255,255,255,255,243,159,255,255,255,255,255,255,255,
+ 2, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 8,
+ 0, 0, 0, 9, 0, 0, 10, 11, 12, 13, 14, 13, 15, 16, 17, 0,
+ 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0,
+ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0,
+ 13, 13, 13, 13, 23, 24, 25, 26, 27, 28, 13, 13, 13, 13, 13, 29,
+ 13, 13, 13, 13, 30, 31, 13, 13, 13, 32, 13, 13, 0, 33, 0, 34,
+ 35, 36, 37, 13, 38, 39, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 4, 0, 0, 2, 0, 0,240, 3, 0, 6, 0, 0,
+ 0, 0, 0, 12, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0,128, 0, 0, 0,254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0,120,
+ 191,255,247,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 63, 0,255,255,255,255,255,255, 63,255, 87, 32, 2, 1, 24, 0,
+ 144, 80,184, 0,248, 0, 0, 0, 0, 0,224, 0, 2, 0, 1,128,
+ 0, 0, 0, 0, 0, 0, 48, 0,224, 0, 0, 24, 0, 0, 0, 0,
+ 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32,
+ 0, 0,128, 2, 0, 0, 0, 0, 0,224, 0, 0, 0,128, 0, 0,
+ 0, 0, 0, 0, 0,240, 3,192, 0, 64,254, 7, 0,224,255,255,
+ 255,255,255,255, 63, 0, 0, 0,254,255, 0, 4, 0,128,252,247,
+ 0,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 7,
+ 255,255,255,255,255,255,255, 63,192,255,255,255,255,255,255,255,
+ 255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255,
+ 0, 0,224,255,255,255,255,255, 0,240, 0, 0, 0, 0, 0, 0,
+ 0,255, 0,252, 0, 0, 0, 0, 0,255, 0, 0, 0,192,255,255,
+ 0,240,255,255,255,255,255,247,191,255,255,255,255,255,255,255,
};
static inline unsigned
@@ -69,7 +75,7 @@ _hb_emoji_b1 (const uint8_t* a, unsigned i)
static inline uint_fast8_t
_hb_emoji_is_Extended_Pictographic (unsigned u)
{
- return u<131069u?_hb_emoji_b1(192+_hb_emoji_u8,((_hb_emoji_u8[64+(((_hb_emoji_b4(_hb_emoji_u8,u>>6>>4))<<4)+((u>>6)&15u))])<<6)+((u)&63u)):0;
+ return u<131070u?_hb_emoji_b1(224+_hb_emoji_u8,((_hb_emoji_u8[64+(((_hb_emoji_b4(_hb_emoji_u8,u>>6>>4))<<4)+((u>>6)&15u))])<<6)+((u)&63u)):0;
}
diff --git a/thirdparty/harfbuzz/src/hb-unicode.cc b/thirdparty/harfbuzz/src/hb-unicode.cc
index 7470bb1b6e..83ead6398b 100644
--- a/thirdparty/harfbuzz/src/hb-unicode.cc
+++ b/thirdparty/harfbuzz/src/hb-unicode.cc
@@ -268,7 +268,7 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
hb_unicode_funcs_destroy (ufuncs->parent);
- free (ufuncs);
+ hb_free (ufuncs);
}
/**
diff --git a/thirdparty/harfbuzz/src/hb-unicode.hh b/thirdparty/harfbuzz/src/hb-unicode.hh
index 34d66d7aa3..0a79944107 100644
--- a/thirdparty/harfbuzz/src/hb-unicode.hh
+++ b/thirdparty/harfbuzz/src/hb-unicode.hh
@@ -289,8 +289,8 @@ DECLARE_NULL_INSTANCE (hb_unicode_funcs_t);
#define HB_MODIFIED_COMBINING_CLASS_CCC15 18 /* tsere */
#define HB_MODIFIED_COMBINING_CLASS_CCC16 19 /* segol */
#define HB_MODIFIED_COMBINING_CLASS_CCC17 20 /* patah */
-#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats */
-#define HB_MODIFIED_COMBINING_CLASS_CCC19 14 /* holam */
+#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats & qamats qatan */
+#define HB_MODIFIED_COMBINING_CLASS_CCC19 14 /* holam & holam haser for vav*/
#define HB_MODIFIED_COMBINING_CLASS_CCC20 24 /* qubuts */
#define HB_MODIFIED_COMBINING_CLASS_CCC21 12 /* dagesh */
#define HB_MODIFIED_COMBINING_CLASS_CCC22 25 /* meteg */
@@ -359,6 +359,13 @@ DECLARE_NULL_INSTANCE (hb_unicode_funcs_t);
FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
+#define HB_UNICODE_GENERAL_CATEGORY_IS_LETTER(gen_cat) \
+ (FLAG_UNSAFE (gen_cat) & \
+ (FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) | \
+ FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | \
+ FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | \
+ FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) | \
+ FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER)))
/*
* Ranges, used for bsearch tables.
diff --git a/thirdparty/harfbuzz/src/hb-uniscribe.cc b/thirdparty/harfbuzz/src/hb-uniscribe.cc
index 48a5dc50ad..3dc4c0937d 100644
--- a/thirdparty/harfbuzz/src/hb-uniscribe.cc
+++ b/thirdparty/harfbuzz/src/hb-uniscribe.cc
@@ -44,6 +44,7 @@
#include "hb-uniscribe.h"
+#include "hb-ms-feature-ranges.hh"
#include "hb-open-file.hh"
#include "hb-ot-name-table.hh"
#include "hb-ot-layout.h"
@@ -238,30 +239,26 @@ struct hb_uniscribe_shaper_funcs_t
}
};
-#if HB_USE_ATEXIT
-static void free_static_uniscribe_shaper_funcs ();
-#endif
+static inline void free_static_uniscribe_shaper_funcs ();
static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_uniscribe_shaper_funcs_t,
hb_uniscribe_shaper_funcs_lazy_loader_t>
{
static hb_uniscribe_shaper_funcs_t *create ()
{
- hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) calloc (1, sizeof (hb_uniscribe_shaper_funcs_t));
+ hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) hb_calloc (1, sizeof (hb_uniscribe_shaper_funcs_t));
if (unlikely (!funcs))
return nullptr;
funcs->init ();
-#if HB_USE_ATEXIT
- atexit (free_static_uniscribe_shaper_funcs);
-#endif
+ hb_atexit (free_static_uniscribe_shaper_funcs);
return funcs;
}
static void destroy (hb_uniscribe_shaper_funcs_t *p)
{
- free ((void *) p);
+ hb_free ((void *) p);
}
static hb_uniscribe_shaper_funcs_t *get_null ()
{
@@ -269,13 +266,11 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis
}
} static_uniscribe_shaper_funcs;
-#if HB_USE_ATEXIT
-static
+static inline
void free_static_uniscribe_shaper_funcs ()
{
static_uniscribe_shaper_funcs.free_instance ();
}
-#endif
static hb_uniscribe_shaper_funcs_t *
hb_uniscribe_shaper_get_funcs ()
@@ -284,44 +279,6 @@ hb_uniscribe_shaper_get_funcs ()
}
-struct active_feature_t {
- OPENTYPE_FEATURE_RECORD rec;
- unsigned int order;
-
- HB_INTERNAL static int cmp (const void *pa, const void *pb) {
- const active_feature_t *a = (const active_feature_t *) pa;
- const active_feature_t *b = (const active_feature_t *) pb;
- return a->rec.tagFeature < b->rec.tagFeature ? -1 : a->rec.tagFeature > b->rec.tagFeature ? 1 :
- a->order < b->order ? -1 : a->order > b->order ? 1 :
- a->rec.lParameter < b->rec.lParameter ? -1 : a->rec.lParameter > b->rec.lParameter ? 1 :
- 0;
- }
- bool operator== (const active_feature_t *f)
- { return cmp (this, f) == 0; }
-};
-
-struct feature_event_t {
- unsigned int index;
- bool start;
- active_feature_t feature;
-
- HB_INTERNAL static int cmp (const void *pa, const void *pb)
- {
- const feature_event_t *a = (const feature_event_t *) pa;
- const feature_event_t *b = (const feature_event_t *) pb;
- return a->index < b->index ? -1 : a->index > b->index ? 1 :
- a->start < b->start ? -1 : a->start > b->start ? 1 :
- active_feature_t::cmp (&a->feature, &b->feature);
- }
-};
-
-struct range_record_t {
- TEXTRANGE_PROPERTIES props;
- unsigned int index_first; /* == start */
- unsigned int index_last; /* == end - 1 */
-};
-
-
/*
* shaper face data
*/
@@ -391,7 +348,7 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name)
unsigned int name_table_offset = (length + 3) & ~3;
new_length = name_table_offset + padded_name_table_length;
- void *new_sfnt_data = calloc (1, new_length);
+ void *new_sfnt_data = hb_calloc (1, new_length);
if (!new_sfnt_data)
{
hb_blob_destroy (blob);
@@ -441,7 +398,7 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name)
}
else if (face_index == 0) /* Fail if first face doesn't have 'name' table. */
{
- free (new_sfnt_data);
+ hb_free (new_sfnt_data);
hb_blob_destroy (blob);
return nullptr;
}
@@ -453,20 +410,20 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name)
hb_blob_destroy (blob);
return hb_blob_create ((const char *) new_sfnt_data, new_length,
- HB_MEMORY_MODE_WRITABLE, new_sfnt_data, free);
+ HB_MEMORY_MODE_WRITABLE, new_sfnt_data, hb_free);
}
hb_uniscribe_face_data_t *
_hb_uniscribe_shaper_face_data_create (hb_face_t *face)
{
- hb_uniscribe_face_data_t *data = (hb_uniscribe_face_data_t *) calloc (1, sizeof (hb_uniscribe_face_data_t));
+ hb_uniscribe_face_data_t *data = (hb_uniscribe_face_data_t *) hb_calloc (1, sizeof (hb_uniscribe_face_data_t));
if (unlikely (!data))
return nullptr;
data->funcs = hb_uniscribe_shaper_get_funcs ();
if (unlikely (!data->funcs))
{
- free (data);
+ hb_free (data);
return nullptr;
}
@@ -477,7 +434,7 @@ _hb_uniscribe_shaper_face_data_create (hb_face_t *face)
blob = _hb_rename_font (blob, data->face_name);
if (unlikely (!blob))
{
- free (data);
+ hb_free (data);
return nullptr;
}
@@ -488,7 +445,7 @@ _hb_uniscribe_shaper_face_data_create (hb_face_t *face)
if (unlikely (!data->fh))
{
DEBUG_MSG (UNISCRIBE, face, "Face AddFontMemResourceEx() failed");
- free (data);
+ hb_free (data);
return nullptr;
}
@@ -499,7 +456,7 @@ void
_hb_uniscribe_shaper_face_data_destroy (hb_uniscribe_face_data_t *data)
{
RemoveFontMemResourceEx (data->fh);
- free (data);
+ hb_free (data);
}
@@ -533,7 +490,7 @@ populate_log_font (LOGFONTW *lf,
hb_uniscribe_font_data_t *
_hb_uniscribe_shaper_font_data_create (hb_font_t *font)
{
- hb_uniscribe_font_data_t *data = (hb_uniscribe_font_data_t *) calloc (1, sizeof (hb_uniscribe_font_data_t));
+ hb_uniscribe_font_data_t *data = (hb_uniscribe_font_data_t *) hb_calloc (1, sizeof (hb_uniscribe_font_data_t));
if (unlikely (!data))
return nullptr;
@@ -580,7 +537,7 @@ _hb_uniscribe_shaper_font_data_destroy (hb_uniscribe_font_data_t *data)
DeleteObject (data->hfont);
if (data->script_cache)
ScriptFreeCache (&data->script_cache);
- free (data);
+ hb_free (data);
}
/**
@@ -635,109 +592,6 @@ _hb_uniscribe_shape (hb_shape_plan_t *shape_plan,
const hb_uniscribe_font_data_t *font_data = font->data.uniscribe;
hb_uniscribe_shaper_funcs_t *funcs = face_data->funcs;
- /*
- * Set up features.
- */
- hb_vector_t<OPENTYPE_FEATURE_RECORD> feature_records;
- hb_vector_t<range_record_t> range_records;
- if (num_features)
- {
- /* Sort features by start/end events. */
- hb_vector_t<feature_event_t> feature_events;
- for (unsigned int i = 0; i < num_features; i++)
- {
- active_feature_t feature;
- feature.rec.tagFeature = hb_uint32_swap (features[i].tag);
- feature.rec.lParameter = features[i].value;
- feature.order = i;
-
- feature_event_t *event;
-
- event = feature_events.push ();
- event->index = features[i].start;
- event->start = true;
- event->feature = feature;
-
- event = feature_events.push ();
- event->index = features[i].end;
- event->start = false;
- event->feature = feature;
- }
- feature_events.qsort ();
- /* Add a strategic final event. */
- {
- active_feature_t feature;
- feature.rec.tagFeature = 0;
- feature.rec.lParameter = 0;
- feature.order = num_features + 1;
-
- feature_event_t *event = feature_events.push ();
- event->index = 0; /* This value does magic. */
- event->start = false;
- event->feature = feature;
- }
-
- /* Scan events and save features for each range. */
- hb_vector_t<active_feature_t> active_features;
- unsigned int last_index = 0;
- for (unsigned int i = 0; i < feature_events.length; i++)
- {
- feature_event_t *event = &feature_events[i];
-
- if (event->index != last_index)
- {
- /* Save a snapshot of active features and the range. */
- range_record_t *range = range_records.push ();
-
- unsigned int offset = feature_records.length;
-
- active_features.qsort ();
- for (unsigned int j = 0; j < active_features.length; j++)
- {
- if (!j || active_features[j].rec.tagFeature != feature_records[feature_records.length - 1].tagFeature)
- {
- feature_records.push (active_features[j].rec);
- }
- else
- {
- /* Overrides value for existing feature. */
- feature_records[feature_records.length - 1].lParameter = active_features[j].rec.lParameter;
- }
- }
-
- /* Will convert to pointer after all is ready, since feature_records.array
- * may move as we grow it. */
- range->props.potfRecords = reinterpret_cast<OPENTYPE_FEATURE_RECORD *> (offset);
- range->props.cotfRecords = feature_records.length - offset;
- range->index_first = last_index;
- range->index_last = event->index - 1;
-
- last_index = event->index;
- }
-
- if (event->start)
- {
- active_features.push (event->feature);
- }
- else
- {
- active_feature_t *feature = active_features.find (&event->feature);
- if (feature)
- active_features.remove (feature - active_features.arrayZ);
- }
- }
-
- if (!range_records.length) /* No active feature found. */
- num_features = 0;
-
- /* Fixup the pointers. */
- for (unsigned int i = 0; i < range_records.length; i++)
- {
- range_record_t *range = &range_records[i];
- range->props.potfRecords = (OPENTYPE_FEATURE_RECORD *) feature_records + reinterpret_cast<uintptr_t> (range->props.potfRecords);
- }
- }
-
#define FAIL(...) \
HB_STMT_START { \
DEBUG_MSG (UNISCRIBE, nullptr, __VA_ARGS__); \
@@ -856,8 +710,23 @@ retry:
nullptr, nullptr,
&lang_count, &lang_tag);
OPENTYPE_TAG language_tag = hb_uint32_swap (lang_count ? lang_tag : HB_TAG_NONE);
- hb_vector_t<TEXTRANGE_PROPERTIES*> range_properties;
- hb_vector_t<int> range_char_counts;
+
+ /*
+ * Set up features.
+ */
+ static_assert ((sizeof (TEXTRANGE_PROPERTIES) == sizeof (hb_ms_features_t)), "");
+ static_assert ((sizeof (OPENTYPE_FEATURE_RECORD) == sizeof (hb_ms_feature_t)), "");
+ hb_vector_t<hb_ms_feature_t> feature_records;
+ hb_vector_t<hb_ms_range_record_t> range_records;
+ bool has_features = false;
+ if (num_features)
+ has_features = hb_ms_setup_features (features,
+ num_features,
+ feature_records,
+ range_records);
+
+ hb_vector_t<hb_ms_features_t*> range_properties;
+ hb_vector_t<uint32_t> range_char_counts;
unsigned int glyphs_offset = 0;
unsigned int glyphs_len;
@@ -867,42 +736,14 @@ retry:
unsigned int chars_offset = items[i].iCharPos;
unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
- if (num_features)
- {
- range_properties.shrink (0);
- range_char_counts.shrink (0);
-
- range_record_t *last_range = &range_records[0];
-
- for (unsigned int k = chars_offset; k < chars_offset + item_chars_len; k++)
- {
- range_record_t *range = last_range;
- while (log_clusters[k] < range->index_first)
- range--;
- while (log_clusters[k] > range->index_last)
- range++;
- if (!range_properties.length ||
- &range->props != range_properties[range_properties.length - 1])
- {
- TEXTRANGE_PROPERTIES **props = range_properties.push ();
- int *c = range_char_counts.push ();
- if (unlikely (!props || !c))
- {
- range_properties.shrink (0);
- range_char_counts.shrink (0);
- break;
- }
- *props = &range->props;
- *c = 1;
- }
- else
- {
- range_char_counts[range_char_counts.length - 1]++;
- }
-
- last_range = range;
- }
- }
+ if (has_features)
+ hb_ms_make_feature_ranges (feature_records,
+ range_records,
+ item_chars_len,
+ chars_offset,
+ log_clusters,
+ range_properties,
+ range_char_counts);
/* Asking for glyphs in logical order circumvents at least
* one bug in Uniscribe. */
@@ -914,8 +755,8 @@ retry:
&items[i].a,
script_tags[i],
language_tag,
- range_char_counts.arrayZ,
- range_properties.arrayZ,
+ (int *) range_char_counts.arrayZ,
+ (TEXTRANGE_PROPERTIES**) range_properties.arrayZ,
range_properties.length,
pchars + chars_offset,
item_chars_len,
@@ -955,8 +796,8 @@ retry:
&items[i].a,
script_tags[i],
language_tag,
- range_char_counts.arrayZ,
- range_properties.arrayZ,
+ (int *) range_char_counts.arrayZ,
+ (TEXTRANGE_PROPERTIES**) range_properties.arrayZ,
range_properties.length,
pchars + chars_offset,
log_clusters + chars_offset,
diff --git a/thirdparty/harfbuzz/src/hb-vector.hh b/thirdparty/harfbuzz/src/hb-vector.hh
index 13517a9c29..110d457caf 100644
--- a/thirdparty/harfbuzz/src/hb-vector.hh
+++ b/thirdparty/harfbuzz/src/hb-vector.hh
@@ -69,7 +69,7 @@ struct hb_vector_t
void fini ()
{
- free (arrayZ);
+ hb_free (arrayZ);
init ();
}
void fini_deep ()
@@ -177,6 +177,11 @@ struct hb_vector_t
Type *push (T&& v)
{
Type *p = push ();
+ if (p == &Crap (Type))
+ // If push failed to allocate then don't copy v, since this may cause
+ // the created copy to leak memory since we won't have stored a
+ // reference to it.
+ return p;
*p = hb_forward<T> (v);
return p;
}
@@ -204,7 +209,7 @@ struct hb_vector_t
(new_allocated < (unsigned) allocated) ||
hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
if (likely (!overflows))
- new_array = (Type *) realloc (arrayZ, new_allocated * sizeof (Type));
+ new_array = (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
if (unlikely (!new_array))
{
@@ -310,7 +315,7 @@ struct hb_sorted_vector_t : hb_vector_t<Type>
{ return as_array ().bsearch (x, not_found); }
template <typename T>
bool bfind (const T &x, unsigned int *i = nullptr,
- hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE,
+ hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array ().bfind (x, i, not_found, to_store); }
};
diff --git a/thirdparty/harfbuzz/src/hb-version.h b/thirdparty/harfbuzz/src/hb-version.h
index 6db58c3f7c..70325f88eb 100644
--- a/thirdparty/harfbuzz/src/hb-version.h
+++ b/thirdparty/harfbuzz/src/hb-version.h
@@ -41,13 +41,13 @@ HB_BEGIN_DECLS
*
* The major component of the library version available at compile-time.
*/
-#define HB_VERSION_MAJOR 2
+#define HB_VERSION_MAJOR 3
/**
* HB_VERSION_MINOR:
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 8
+#define HB_VERSION_MINOR 0
/**
* HB_VERSION_MICRO:
*
@@ -60,7 +60,7 @@ HB_BEGIN_DECLS
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "2.8.0"
+#define HB_VERSION_STRING "3.0.0"
/**
* HB_VERSION_ATLEAST:
diff --git a/thirdparty/harfbuzz/src/hb.hh b/thirdparty/harfbuzz/src/hb.hh
index 18516581c7..829b5a1ab7 100644
--- a/thirdparty/harfbuzz/src/hb.hh
+++ b/thirdparty/harfbuzz/src/hb.hh
@@ -117,6 +117,9 @@
#pragma GCC diagnostic ignored "-Wshadow" // TODO fix
#pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations" // TODO fix
#pragma GCC diagnostic ignored "-Wunused-parameter" // TODO fix
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic ignored "-Wunused-result" // TODO fix
+#endif
#endif
/* Ignored intentionally. */
@@ -179,6 +182,9 @@
#include <cassert>
#include <cfloat>
#include <climits>
+#ifdef _MSC_VER
+# define _USE_MATH_DEFINES
+#endif
#include <cmath>
#include <cstdarg>
#include <cstddef>
@@ -220,10 +226,15 @@ extern "C" void* hb_malloc_impl(size_t size);
extern "C" void* hb_calloc_impl(size_t nmemb, size_t size);
extern "C" void* hb_realloc_impl(void *ptr, size_t size);
extern "C" void hb_free_impl(void *ptr);
-#define malloc hb_malloc_impl
-#define calloc hb_calloc_impl
-#define realloc hb_realloc_impl
-#define free hb_free_impl
+#define hb_malloc hb_malloc_impl
+#define hb_calloc hb_calloc_impl
+#define hb_realloc hb_realloc_impl
+#define hb_free hb_free_impl
+#else
+#define hb_malloc malloc
+#define hb_calloc calloc
+#define hb_realloc realloc
+#define hb_free free
#endif
@@ -335,7 +346,6 @@ extern "C" void hb_free_impl(void *ptr);
#else
# define HB_NODISCARD
#endif
-#define hb_success_t HB_NODISCARD bool
/* https://github.com/harfbuzz/harfbuzz/issues/1852 */
#if defined(__clang__) && !(defined(_AIX) && (defined(__IBMCPP__) || defined(__ibmxl__)))
@@ -376,7 +386,7 @@ extern "C" void hb_free_impl(void *ptr);
# define HB_NO_SETLOCALE
# define HB_NO_ERRNO
# endif
-# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+# elif !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
# ifndef HB_NO_GETENV
# define HB_NO_GETENV
# endif
@@ -398,6 +408,9 @@ static int HB_UNUSED _hb_errno = 0;
# define errno _hb_errno
#endif
+#define HB_STMT_START do
+#define HB_STMT_END while (0)
+
#if defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT)
/* atexit() is only safe to be called from shared libraries on certain
* platforms. Whitelist.
@@ -426,16 +439,23 @@ static int HB_UNUSED _hb_errno = 0;
*/
# define HB_USE_ATEXIT 1
# endif
-#endif
+#endif /* defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT) */
#ifdef HB_NO_ATEXIT
# undef HB_USE_ATEXIT
#endif
#ifndef HB_USE_ATEXIT
# define HB_USE_ATEXIT 0
#endif
-
-#define HB_STMT_START do
-#define HB_STMT_END while (0)
+#if !HB_USE_ATEXIT
+# define hb_atexit(_) HB_STMT_START { if (0) (_) (); } HB_STMT_END
+#else /* HB_USE_ATEXIT */
+# ifdef HAVE_ATEXIT
+# define hb_atexit atexit
+# else
+ template <void (*function) (void)> struct hb_atexit_t { ~hb_atexit_t () { function (); } };
+# define hb_atexit(f) static hb_atexit_t<f> _hb_atexit_##__LINE__;
+# endif
+#endif
/* Lets assert int types. Saves trouble down the road. */
static_assert ((sizeof (hb_codepoint_t) == 4), "");