diff options
author | Haoyu Qiu <timothyqiu32@gmail.com> | 2022-11-25 18:54:37 +0800 |
---|---|---|
committer | Haoyu Qiu <timothyqiu32@gmail.com> | 2022-11-25 18:54:37 +0800 |
commit | c0e9d928e6b0b20442bb98246a43c53e667ce29d (patch) | |
tree | e7e81713ac966c02930fd21a3ba0ea95cf923e5a | |
parent | 34df77285c68dd11c43571c90d41d803f2f97f5a (diff) |
Improve editor property capitalization
* Captialize stop words when they are the last word.
* Add stop words logic in `extract.py`.
-rw-r--r-- | editor/editor_property_name_processor.cpp | 6 | ||||
-rwxr-xr-x | editor/translations/extract.py | 26 |
2 files changed, 25 insertions, 7 deletions
diff --git a/editor/editor_property_name_processor.cpp b/editor/editor_property_name_processor.cpp index bd8b753720..9587e65cad 100644 --- a/editor/editor_property_name_processor.cpp +++ b/editor/editor_property_name_processor.cpp @@ -64,8 +64,8 @@ String EditorPropertyNameProcessor::_capitalize_name(const String &p_name) const Vector<String> parts = p_name.split("_", false); for (int i = 0; i < parts.size(); i++) { - // Articles/conjunctions/prepositions which should only be capitalized if first word. - if (i != 0 && stop_words.find(parts[i]) != -1) { + // Articles/conjunctions/prepositions which should only be capitalized when not at beginning and end. + if (i > 0 && i + 1 < parts.size() && stop_words.find(parts[i]) != -1) { continue; } HashMap<String, String>::ConstIterator remap = capitalize_string_remaps.find(parts[i]); @@ -260,6 +260,8 @@ EditorPropertyNameProcessor::EditorPropertyNameProcessor() { capitalize_string_remaps["yz"] = "YZ"; // Articles, conjunctions, prepositions. + // The following initialization is parsed in `editor/translations/extract.py` with a regex. + // The word definition format should be kept synced with the regex. stop_words = LocalVector<String>({ "a", "an", diff --git a/editor/translations/extract.py b/editor/translations/extract.py index cecdb3939d..04661abcbd 100755 --- a/editor/translations/extract.py +++ b/editor/translations/extract.py @@ -71,11 +71,24 @@ matches.sort() remaps = {} remap_re = re.compile(r'^\t*capitalize_string_remaps\["(?P<from>.+)"\] = (String::utf8\()?"(?P<to>.+)"') +stop_words = set() +stop_words_re = re.compile(r'^\t*"(?P<word>.+)",') +is_inside_stop_words = False with open("editor/editor_property_name_processor.cpp") as f: for line in f: - m = remap_re.search(line) - if m: - remaps[m.group("from")] = m.group("to") + if is_inside_stop_words: + m = stop_words_re.search(line) + if m: + stop_words.add(m.group("word")) + else: + is_inside_stop_words = False + else: + m = remap_re.search(line) + if m: + remaps[m.group("from")] = m.group("to") + + if not is_inside_stop_words and not stop_words: + is_inside_stop_words = "stop_words = " in line main_po = """ @@ -147,9 +160,12 @@ capitalize_re = re.compile(r"(?<=\D)(?=\d)|(?<=\d)(?=\D([a-z]|\d))") def _process_editor_string(name): # See EditorPropertyNameProcessor::process_string(). capitalized_parts = [] - for segment in name.split("_"): - if not segment: + parts = list(filter(bool, name.split("_"))) # Non-empty only. + for i, segment in enumerate(parts): + if i > 0 and i + 1 < len(parts) and segment in stop_words: + capitalized_parts.append(segment) continue + remapped = remaps.get(segment) if remapped: capitalized_parts.append(remapped) |