diff --git a/utils/rna_manual_reference_updater.py b/utils/rna_manual_reference_updater.py new file mode 100644 index 0000000000000000000000000000000000000000..1b74f02672fe369fc4b3a8916082aa51cbabaf7c --- /dev/null +++ b/utils/rna_manual_reference_updater.py @@ -0,0 +1,112 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### +# +# ##### RNA MANUAL REFERENCES ##### +# +# This file geneates a file that maps RNA strings to online URL's +# for the context menu documentation access +# +# To make international, we made a script, +# pointing the manuals to the proper language, +# specified in the 'User Preferences Window' by the users. +# Some Languages have their manual page, using a prefix or +# being preceded by their respective reference, for example: +# +# manual/ --> manual/ru/ +# +# The table in the script, contains all of the languages we have in the +# Blender manual website, for those other languages that still +# does not have a team of translators, +# and/or don't have a manual for their languages we commented the lines below, +# you should add them to the language table when they have a proper manual, +# or added to the Blender UI translation table. +# +# URL is the: url_manual_prefix + url_manual_mapping[#id] + +import os +import sphobjinv +import urllib.request + +# Download the objects.inv file +urlretrieve = urllib.request.urlretrieve +urlretrieve("https://docs.blender.org/manual/en/dev/objects.inv", "objects.inv") + +# Decode objects.inv +objects = sphobjinv.readfile('objects.inv') +objects_data = sphobjinv.decode(objects) +sphobjinv.writefile('objects.tmp', objects_data) # TODO leave in memory +os.remove("objects.inv") + + +# Write the fire +filepath = os.path.join("rna_manual_reference.py") +file = open(filepath, "w", encoding="utf-8") +fw = file.write + +fw("# Do not edit this file.") +fw(" This file is auto genereated from rna_manual_reference_updater.py\n\n") +fw("import bpy\n\n") +fw("url_manual_prefix = \"https://docs.blender.org/manual/en/dev/\"\n\n") +fw("language = \"\"\n") +fw("if bpy.context.user_preferences.system.use_international_fonts:\n") +fw(" language = bpy.context.user_preferences.system.language\n") +fw(" if language == 'DEFAULT':\n") +fw(" import os\n") +fw(" language = os.getenv('LANG', '').split('.')[0]\n\n") +fw("LANG = {\n") +#fw(" \"ar_EG": \"ar",\n") +#fw(" \"bg_BG": \"bg",\n") +#fw(" \"ca_AD": \"ca",\n") +#fw(" \"cs_CZ": \"cz",\n") +fw(" \"de_DE\": \"de\",\n") # German +#fw(" \"el_GR": \"el",\n") +fw(" \"ru_RU\": \"ru\",\n") # Russian +#fw(" \"sr_RS": \"sr",\n") +#fw(" \"sv_SE": \"sv",\n") +#fw(" \"tr_TR": \"th",\n") +#fw(" \"uk_UA": \"uk",\n") +fw(" \"es\": \"es\",\n") # Spanish +#fw(" \"fi_FI": \"fi",\n") +fw(" \"fr_FR\": \"fr\",\n") # French +#fw(" \"id_ID": \"id",\n") +fw(" \"it_IT\": \"it\",\n") # Italian +fw(" \"ja_JP\": \"ja\",\n") # Japanese +fw(" \"ko_KR\": \"ko\",\n") # Korean +#fw(" \"nl_NL": \"nl",\n") +#fw(" \"pl_PL": \"pl",\n") +fw(" \"pt_PT\": \"pt\",\n") # Portuguese +fw(" \"pt_BR\": \"pt\",\n") # Portuguese - for until we have a pt_BR version +fw(" \"zh_CN\": \"zh.cn\",\n") # Chinese - Should be changed to "zh_cn" but there is a bug in sphinx-intl +fw(" \"zh_TW\": \"zh.tw\",\n") # Taiwanese Chinese +fw("}.get(language)\n\n") +fw("if LANG is not None:\n") +fw(" url_manual_prefix = url_manual_prefix.replace(\"manual/en\", \"manual/\" + LANG)\n\n") +fw("url_manual_mapping = (\n") + + +# Logic to manipulate strings from objects.inv +with open("objects.tmp", encoding="utf8") as obj_tmp: + lines = [l for l in obj_tmp if (l.startswith("bpy.types") or l.startswith("bpy.ops"))] + lines.sort(key=lambda l: l.find(" "), reverse=True) # Finding first space will return length of rna path... + for line in lines: + split = line.split(" ") + fw("\t(\"" + split[0] + "*\", \"" + split[3] + "\"),\n") + +fw(")\n") + +os.remove("objects.tmp")