UV: Document pack islands features and new ui #104468

Closed
Chris Blackbourn wants to merge 63 commits from Chris_Blackbourn/blender-manual:uv_pack_islands into blender-v3.6-release

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Showing only changes of commit f0a6b14201 - Show all commits

View File

@ -69,14 +69,14 @@ def check_spelling_body(text):
continue continue
# now we've gotten rid of typical roles, strip other chars # now we've gotten rid of typical roles, strip other chars
w = w.strip(":`()<>{}") w = w.strip(":`()<>{}.,")
# skip python references # skip python references
if w.startswith("bpy."): if w.startswith("bpy."):
continue continue
# skip document references and keyboard shortcuts # skip document references and keyboard shortcuts
if w.startswith("doc:") or w.startswith("kbd:") or w.startswith("menuselection:") or w.startswith("ref:"): if w.startswith(("doc:", "kbd:", "menuselection:", "ref:", "https:", "http:", "abbr:")):
continue continue
w_ = w w_ = w
@ -192,6 +192,7 @@ directives.register_directive('highlight', directive_ignore_recursive)
directives.register_directive('parsed-literal', directive_ignore_recursive) directives.register_directive('parsed-literal', directive_ignore_recursive)
# Custom directives from extensions # Custom directives from extensions
directives.register_directive('youtube', directive_ignore_recursive) directives.register_directive('youtube', directive_ignore_recursive)
directives.register_directive('peertube', directive_ignore_recursive)
directives.register_directive('vimeo', directive_ignore_recursive) directives.register_directive('vimeo', directive_ignore_recursive)
directives.register_directive('todolist', directive_ignore_recursive) directives.register_directive('todolist', directive_ignore_recursive)
@ -223,7 +224,7 @@ def role_ignore_recursive(
name, rawtext, text, lineno, inliner, name, rawtext, text, lineno, inliner,
options={}, content=[], options={}, content=[],
): ):
return [RoleIgnore("", '', *(), **{})], [] return [RoleIgnoreRecursive("", '', *(), **{})], []
roles.register_canonical_role('abbr', role_ignore) roles.register_canonical_role('abbr', role_ignore)
@ -306,13 +307,21 @@ def check_spelling(filename):
doc.walkabout(visitor) doc.walkabout(visitor)
RST_CONTEXT_FLAG_LITERAL = 1 << 0
RST_CONTEXT_FLAG_LITERAL_BLOCK = 1 << 1
RST_CONTEXT_FLAG_MATH = 1 << 2
RST_CONTEXT_FLAG_COMMENT = 1 << 3
class RstSpellingVisitor(docutils.nodes.NodeVisitor): class RstSpellingVisitor(docutils.nodes.NodeVisitor):
__slots__ = ( __slots__ = (
"document", "document",
"skip_context",
) )
def __init__(self, doc): def __init__(self, doc):
self.document = doc self.document = doc
self.skip_context = 0
# ----------------------------- # -----------------------------
# Visitors (docutils callbacks) # Visitors (docutils callbacks)
@ -400,8 +409,10 @@ class RstSpellingVisitor(docutils.nodes.NodeVisitor):
# check_spelling_body(text) # check_spelling_body(text)
def visit_Text(self, node): def visit_Text(self, node):
# Visiting text in a sipped context (literal for example).
if self.skip_context:
return
text = node.astext() text = node.astext()
# print(text)
check_spelling_body(text) check_spelling_body(text)
def depart_Text(self, node): def depart_Text(self, node):
@ -420,37 +431,48 @@ class RstSpellingVisitor(docutils.nodes.NodeVisitor):
self.is_emphasis = False self.is_emphasis = False
def visit_math(self, node): def visit_math(self, node):
self.skip_context |= RST_CONTEXT_FLAG_MATH
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode
def depart_math(self, node): def depart_math(self, node):
pass self.skip_context &= ~RST_CONTEXT_FLAG_MATH
def visit_literal(self, node): def visit_literal(self, node):
self.skip_context |= RST_CONTEXT_FLAG_LITERAL
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode
def depart_literal(self, node): def depart_literal(self, node):
pass self.skip_context &= ~RST_CONTEXT_FLAG_LITERAL
def visit_literal_block(self, node): def visit_literal_block(self, node):
self.skip_context |= RST_CONTEXT_FLAG_LITERAL_BLOCK
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode
def depart_literal_block(self, node): def depart_literal_block(self, node):
self.skip_context &= ~RST_CONTEXT_FLAG_LITERAL_BLOCK
pass pass
def visit_code_block(self, node): def visit_code_block(self, node):
# No need to flag.
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode
def depart_code_block(self, node): def depart_code_block(self, node):
pass pass
def visit_reference(self, node): def visit_reference(self, node):
raise docutils.nodes.SkipNode pass
def depart_reference(self, node): def depart_reference(self, node):
pass pass
def visit_title_reference(self, node):
pass
def depart_title_reference(self, node):
pass
def visit_download_reference(self, node): def visit_download_reference(self, node):
raise docutils.nodes.SkipNode pass
def depart_download_reference(self, node): def depart_download_reference(self, node):
pass pass
@ -466,10 +488,11 @@ class RstSpellingVisitor(docutils.nodes.NodeVisitor):
# # metadata['searchable_text'] = node.astext() # # metadata['searchable_text'] = node.astext()
def visit_comment(self, node): def visit_comment(self, node):
self.skip_context |= RST_CONTEXT_FLAG_COMMENT
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode
def depart_comment(self, node): def depart_comment(self, node):
pass self.skip_context &= ~RST_CONTEXT_FLAG_COMMENT
def visit_raw(self, node): def visit_raw(self, node):
raise docutils.nodes.SkipNode raise docutils.nodes.SkipNode