diff --git a/utils_doc/rna_manual_reference_updater.py b/utils_doc/rna_manual_reference_updater.py index 5d2ad1de2ce5ba6257aec61ec0080cf934a154ac..7384ff8ae45d49c89ca47efcfc22aad72d065810 100644 --- a/utils_doc/rna_manual_reference_updater.py +++ b/utils_doc/rna_manual_reference_updater.py @@ -15,89 +15,147 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ##### END GPL LICENSE BLOCK ##### -# -# ##### RNA MANUAL REFERENCES ##### -# -# This file generates 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] + +''' +RNA Manual Reference Mapping Updater + +This script generates a file that maps RNA strings to online URL's +for the context menu documentation access. + +This script either downloads a sphinx requirement file from the manual +or optionally can take a path to the file using `--input`. + +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 as soi -# Download and decode objects.inv -inv = soi.Inventory(url="https://docs.blender.org/manual/en/dev/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 generated from rna_manual_reference_updater.py\n\n") -fw("import bpy\n\n") -fw("if bpy.app.version_cycle in {'rc', 'release'}:\n") -fw(" manual_version = '%d.%d' % bpy.app.version[:2]\n") -fw("else:\n") -fw(" manual_version = 'dev'\n\n") -fw("url_manual_prefix = \"https://docs.blender.org/manual/en/\" + manual_version + \"/\"\n\n") -fw("language = bpy.context.preferences.view.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") # Ukrainian -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("\"vi_VN\": \"vi\",\n") # Vietnamese -fw("\"zh_CN\": \"zh-hans\",\n") # Simplified Chinese -fw("\"zh_TW\": \"zh-hant\",\n") # Traditional 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 -lines = [o.data_line() for o in inv.objects if o.name.startswith("bpy.types") or o.name.startswith("bpy.ops")] -# Finding first space will return length of rna path -lines.sort(key=lambda l: l.find(" "), reverse=True) -for line in lines: - split = line.split(" ") - fw("\t(\"" + split[0] + "*\", \"" + split[3] + "\"),\n") - -fw(")\n") +def write_mappings(inv, output): + print("Writing...") + # Write the file + file = open(output, "w", encoding="utf-8") + fw = file.write + + fw("# Do not edit this file.") + fw(" This file is auto generated from rna_manual_reference_updater.py\n\n") + fw("import bpy\n\n") + fw("if bpy.app.version_cycle in {'rc', 'release'}:\n") + fw(" manual_version = '%d.%d' % bpy.app.version[:2]\n") + fw("else:\n") + fw(" manual_version = 'dev'\n\n") + fw("url_manual_prefix = \"https://docs.blender.org/manual/en/\" + manual_version + \"/\"\n\n") + fw("language = bpy.context.preferences.view.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") # Ukrainian + 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("\"vi_VN\": \"vi\",\n") # Vietnamese + fw("\"zh_CN\": \"zh-hans\",\n") # Simplified Chinese + fw("\"zh_TW\": \"zh-hant\",\n") # Traditional 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 + lines = [o.data_line() for o in inv.objects if o.name.startswith("bpy.types") or o.name.startswith("bpy.ops")] + # Finding first space will return length of rna path + lines.sort(key=lambda l: l.find(" "), reverse=True) + for line in lines: + split = line.split(" ") + fw("\t(\"" + split[0] + "*\", \"" + split[3] + "\"),\n") + + fw(")\n") + + +def is_valid_file(parser, arg): + if not os.path.isfile(arg) : + parser.error("The file %s does not exist!" % arg) + else: + return arg + +def main(): + import argparse + + parser = argparse.ArgumentParser( + usage=__doc__ + ) + + parser.add_argument( + "--input", + dest="filename", + required=False, + help="sphinx inventory file (objects.inv)", + metavar="FILE", + type=lambda x: is_valid_file(parser, x)) + + parser.add_argument( + "--output", + dest="output", + default="../../../release/scripts/modules/rna_manual_reference.py", + required=False, + help="path to output including filename and extentsion", + metavar="FILE") + + parser.add_argument( + "--url", + dest="url", + default="https://docs.blender.org/manual/en/dev/objects.inv", + required=False, + help="url to sphinx inventory file (objects.inv)", + metavar="FILE") + + args = parser.parse_args() + + if args.filename: + # Download and decode objects.inv + print("Loading from file...") + inv = soi.Inventory(args.filename) + else: + # Load and decode objects.inv + print("Downloading...") + inv = soi.Inventory(url=args.url) + + write_mappings(inv, args.output) + print("Done!") + +if __name__ == "__main__": + main()