diff options
author | Tiem Song <tiem@google.com> | 2019-08-15 19:47:47 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-08-15 19:47:47 -0700 |
commit | 974b6ae26561f324bbbaffe38a7c77d04aa77060 (patch) | |
tree | 77d416157907f1e3c035a79441dc8dd916bb3d8b | |
parent | a5692bd0e50c1882819eec7db4789907058cbba4 (diff) | |
parent | 3e732660fe4c336e61d62b85fcfc1cd7b8ed05d0 (diff) | |
download | doc_generation-974b6ae26561f324bbbaffe38a7c77d04aa77060.tar.gz |
Add DAC switcher script am: cab78e6e2b am: 8f0a01826f
am: 3e732660fe
Change-Id: Ia7d8ea0e6a0b9ad70133f7dd00df20902c3ee70b
-rw-r--r-- | switcher4.py | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/switcher4.py b/switcher4.py new file mode 100644 index 0000000..07b1ed6 --- /dev/null +++ b/switcher4.py @@ -0,0 +1,259 @@ +#!/usr/bin/python + + +import getopt +import os +import sys + + +# GLOBAL FLAGS + +global stubs +global java_stubs, kotlin_stubs +global work, verbose, show_solo, max_stubs +global java_source_abs_path +global kotlin_source_abs_path + +verbose = False # set True to list all files as they are stubbed (--verbose) +work = False # set True to insert stubs, False to do a dry run for stats (--work) +show_solo = False # set True to list files that only appear in one language, rather than both (--solo) +max_stubs = 0 # set positive to create a limited number of stubs (--max 12) + + +# You must run the script from the refodcs reference/ root directory + +java_ref_root = os.getcwd() +kotlin_ref_root = os.path.join(java_ref_root, "kotlin") +root = os.path.split(java_ref_root)[1] +if root != "reference": + print ("You must cd to the refocs reference/ root directoy") + sys.exit() + + +# This method uses switcher2, which assumes the refdocs stay in their current +# assymetrical dirs (ref/android and ref/kotlin/android) +# And just puts the switcher in the existing docs +def insert_stub(doc, java, both): + global stubs + global java_stubs, kotlin_stubs + global verbose, work, show_solo + global java_source_abs_path + global kotlin_source_abs_path + + stubs = stubs+1 + + if verbose: + print "File: ", stubs, doc + else: + fn = os.path.split(doc) + print "File: ", stubs, fn[1], "\r", + + if (java): + java_stubs = java_stubs + 1 + else: + kotlin_stubs = kotlin_stubs + 1 + + + if (work): + if (java): + file_path = doc[len(java_ref_root)+1:] + stub = doc.replace(java_source_abs_path, kotlin_source_abs_path) + if (both): + slug1 = "sed -i 's/<\/h1>/{}/' {}".format("<\/h1>\\n{% setvar page_path %}_page_path_{% endsetvar %}\\n{% setvar can_switch %}1{% endsetvar %}\\n{% include \"reference\/_java_switcher2.md\" %}",doc) + else: + slug1 = "sed -i 's/<\/h1>/{}/' {}".format("<\/h1>\\n{% include \"reference\/_java_switcher2.md\" %}",doc) + else: + file_path = doc[len(kotlin_ref_root)+1:] + stub = doc.replace(kotlin_source_abs_path, java_source_abs_path) + if (both): + slug1 = "sed -i 's/<\/h1>/{}/' {}".format("<\/h1>\\n{% setvar page_path %}_page_path_{% endsetvar %}\\n{% setvar can_switch %}1{% endsetvar %}\\n{% include \"reference\/_kotlin_switcher2.md\" %}",doc) + else: + slug1 = "sed -i 's/<\/h1>/{}/' {}".format("<\/h1>\\n{% include \"reference\/_kotlin_switcher2.md\" %}",doc) + + os.system(slug1) + if (both): + page_path_slug = "sed -i 's/_page_path_/{}/' {}".format(file_path.replace("/","\/"),doc) + os.system(page_path_slug) + + +def scan_files(stem): + global work, verbose, show_solo, max_stubs + global stubs + global java_stubs, kotlin_stubs + global java_source_abs_path + global kotlin_source_abs_path + + java_source_abs_path = os.path.join(java_ref_root, stem) + kotlin_source_abs_path = os.path.join(kotlin_ref_root, stem) + + # Pass 1 + # Loop over java content, create stubs for java, + # and for corresponding Kotlin (when it exsits) + + # solo is java-only classes + # both is java+kotlin + stubs = 0 + java_stubs = 0 + kotlin_stubs = 0 + solo = 0 + both = 0 + + print "*** PASS1 (Java) ***" + maxed_out = False + for root, dirs, files in os.walk(java_source_abs_path): + if maxed_out: + break; + for file_ in files: + ext = os.path.splitext(file_) + ext = ext[1] + if not ext: + # this catches package-lists with no extension + print "***", os.path.join(root, file_) + elif ext != ".html": + # filter out png, yaml, etc + continue + else: + # we have java content + doc = os.path.join(root, file_) + + + + # look for matching kotlin file + kotlinsource = doc.replace(java_source_abs_path, kotlin_source_abs_path) + if os.path.isfile(kotlinsource): + # corresponding kotlin content exists + insert_stub(doc, True, True) + insert_stub(kotlinsource, False, True) + both = both+1 + else: + # no kotlin content + if (show_solo): + print "solo: ", doc + insert_stub(doc, True, False) + solo = solo+1 + + if max_stubs>0 and stubs>=max_stubs: + print + print "max java stubs: ", max_stubs + maxed_out = True; + break + + print "Java+Kotlin:", both, "Only Java:", solo + print + + + # PASS 2 + # Loop over kotlin content, create stubs for Kotlin-only APIs + print "*** PASS2 (Kotlin) ***" + solo = 0 + both = 0 + maxed_out = False + stubs = 0 + for root, dirs, files in os.walk(kotlin_source_abs_path): + if maxed_out: + break; + for file_ in files: + ext = os.path.splitext (file_) + ext = ext[1] + if not ext: + # this catches package-lists with no extension + print "***", os.path.join(root, file_) + elif ext != ".html": + # filter out png, yaml, etc + continue + else: + # we have kotlin content + doc = os.path.join(root, file_) + javadoc = doc.replace(kotlin_source_abs_path, java_source_abs_path) + file_name = os.path.splitext(file_)[0] + file_path = doc[len(kotlin_source_abs_path)+1:] + include_path = os.path.join("/reference/_kotlin", file_path) + + if os.path.isfile(javadoc): + # corresponding java content exists + # so we already created the kotlin stub file + # nothing to do + both = both+1 + else: + # no java content + # create the kotlin stub file + if (show_solo): + print "solo: ", doc + insert_stub(doc , False, False) + solo = solo+1 + + if (max_stubs>0 and stubs>=max_stubs): + print + print "max koltin stubs: ", max_stubs + maxed_out = True; + break + + + print "Java+Kotlin:", both, "Only Kotlin:", solo + print + print "Java: ", java_stubs, " Kotlin: ", kotlin_stubs, "Total: ", java_stubs + kotlin_stubs + + +def main(argv): + + global work, verbose, show_solo, max_stubs + global java_source_abs_path + global kotlin_source_abs_path + stem = "" + + try: + opts, args = getopt.getopt(argv,"",["work","verbose","solo","max="]) + except getopt.GetoptError: + print 'USAGE: switcher --work --verbose --solo --max=<max_stubs> platform|androidx|support|chrome' + sys.exit(2) + + for opt, arg in opts: + if opt == '--work': + work = True + elif opt == "--verbose": + print "verbose" + verbose = True + elif opt == "--solo": + print "verbose" + show_solo = True + elif opt == "--max": + max_stubs = int(arg) + print "max ", max_stubs + + if len(args)>0: + source = args[0] + if source == "platform": + stem = "android" + print + print "*** PLATFORM PAGES ***" + print "======================" + + elif source == "androidx": + stem = "androidx" + print + print "*** ANDROIDX SUPPORT LIBRARY PAGES ***" + print "======================================" + + elif source == "support": + stem = "android/support/v4/media" + print + print "*** ANDROIDX SUPPORT LIBRARY PAGES ***" + print "======================================" + + elif source == "chrome": + stem = "org/chromium/support_lib_boundary" + print + print "*** ANDROIDX CHROMIUM PAGES ***" + print "===============================" + + if (len(stem)>0): + scan_files(stem) + print " *** DONE ***" + else: + print 'You must specify one of: platform|androidx|support|chrome' + + + +if __name__ == "__main__": + main(sys.argv[1:]) + |