import os import sys import re import inspect validExtensions = (".cpp", ".h", ".js", ".mdpp") # specify the paths in which docublocks are searched. note that js/apps/* must not be included because it contains js/apps/system/ # and that path also contains copies of some files present in js/ anyway. searchPaths = ["arangod/", "lib/", "js/actions", "js/client", "js/apps/system/_system/cerberus", "js/apps/system/_api/gharial", "js/common", "js/server", "Documentation/Books/Users/"] fullSuccess = True def file_content(filepath): """ Fetches and formats file's content to perform the required operation. """ infile = open(filepath, 'r') filelines = tuple(infile) infile.close() comment_indexes = [] comments = [] _start = None for line in enumerate(filelines): if "@startDocuBlock" in line[1]: # in the mdpp's we have non-terminated startDocuBlocks, else its an error: if _start != None and not 'mdpp' in filepath: print "next startDocuBlock found without endDocuBlock inbetween in file %s [%s]" %(filepath, line) raise _start = line[0] if "@endDocuBlock" in line[1]: try: _end = line[0] + 1 comment_indexes.append([_start, _end]) _start = None except NameError: print "endDocuBlock without previous startDocublock seen while analyzing file %s [%s]" %(filepath, line) raise for index in comment_indexes: comments.append(filelines[index[0]: index[1]]) return comments def example_content(filepath, fh, tag): """ Fetches an example file and inserts it using code """ arangosh = False curl = False first = True lastline = None long = "" longLines = 0 short = "" shortLines = 0 shortable = False showdots = True CURL_STATE_CMD = 1 CURL_STATE_HEADER = 2 CURL_STATE_BODY = 3 curlState = CURL_STATE_CMD # read in the context, split into long and short infile = open(filepath, 'r') for line in infile: if first: arangosh = line.startswith("arangosh>") curl = line.startswith("shell> curl") first = False if not curl and not arangosh: raise Exception("failed to detect curl or arangosh example in %s while inpecting %s", filepath, tag) if arangosh: if line.startswith("arangosh>") or line.startswith("........>"): if lastline != None: # short = short + lastline # shortLines = shortLines + 1 lastline = None short = short + line shortLines = shortLines + 1 showdots = True else: if showdots: if lastline == None: # lastline = line shortable = True showdots = False lastline = None else: # short = short + "~~~hidden~~~\n" # shortLines = shortLines + 1 shortable = True showdots = False lastline = None if curl: if line.startswith("shell> curl"): curlState = CURL_STATE_CMD elif curlState == CURL_STATE_CMD and line.startswith("HTTP/"): curlState = CURL_STATE_HEADER elif curlState == CURL_STATE_HEADER and line.startswith("{"): curlState = CURL_STATE_BODY if curlState == CURL_STATE_CMD or curlState == CURL_STATE_HEADER: short = short + line shortLines = shortLines + 1 else: shortable = True long = long + line longLines = longLines + 1 if lastline != None: short = short + lastline shortLines = shortLines + 1 infile.close() if longLines - shortLines < 5: shortable = False # write example fh.write("\n") fh.write("
\n") # fh.write("```\n") fh.write("%s" % long) # fh.write("```\n") fh.write("\n") fh.write("
\n") # fh.write("```\n") fh.write("%s" % short) # fh.write("```\n") if arangosh: fh.write("\n") elif curl: fh.write(" \n") else: fh.write(" \n") fh.write("