diff --git a/tools/AttachResults.py b/tools/AttachResults.py new file mode 100644 index 00000000..05e08736 --- /dev/null +++ b/tools/AttachResults.py @@ -0,0 +1,95 @@ +#! py -3 +""" +Append output and error files to Java files +""" +TODO = """ +- 1st and last 10 lines, with ... in between? {OutputFirstAndLast: 10 Lines} + +- {NoOutput} +""" +from pathlib import Path +import pprint +import textwrap +import os, sys, re +from itertools import chain +from betools import CmdLine, visitDir, ruler, head + +maxlinewidth = 60 +examplePath = Path(r"C:\Users\Bruce\Dropbox\__TIJ4-ebook\ExtractedExamples") + +class JFile: + def __init__(self, javaFilePath): + with javaFilePath.open() as doc: + self.code = doc.read() + self.lines = self.code.splitlines() + def has_output(self): + return "} /* Output:" in self.code + def output_line(self): + for line in self.lines: + if "} /* Output:" in line: + return line + +def newOutput(javaFilePath): + outfile = javaFilePath.with_name(javaFilePath.stem + "-output.txt") + errfile = javaFilePath.with_name(javaFilePath.stem + "-erroroutput.txt") + result ="" + if outfile.exists(): + with outfile.open() as f: + out = f.read().strip() + if out: + result += out + "\n" + if errfile.exists(): + with errfile.open() as f: + err = f.read().strip() + if err: + result += "--[ Error Output ]--\n" + result += err + return textwrap.wrap(result, width=maxlinewidth) + + +def appendOutputFiles(javaFilePath): + jfile = JFile(javaFilePath) + output = newOutput(javaFilePath) + if not output: + return + if not self.output_tags.has_output: # no /* Output: at all + with self.javaFilePath.open() as jf: + code = jf.read() + lines = code.splitlines() + while lines[-1].strip() is "": + lines.pop() + assert lines[-1].rstrip() == "} ///:~" + lines[-1] = "} /* Output:" + lines.append(self.new_output) + lines.append("*///:~") + result = "\n".join(lines) + "\n" + with self.javaFilePath.open("w") as jf: + jf.write(result) + return result + else: + print("{} already has Output!".format(self.javaFilePath)) + sys.exit() + +@CmdLine('t') +def outputTagTypes(): + """Show different output tag variations""" + types = set() + os.chdir(str(examplePath)) + for jfp in Path(".").rglob("*.java"): + jf = JFile(jfp) + if jf.has_output(): + types.add(jf.output_line()) + pprint.pprint(types) + +@CmdLine('a') +def attachFiles(): + """Attach standard and error output to all files""" + os.chdir(str(examplePath)) + for jfp in Path(".").rglob("*.java"): + jf = JFile(jfp) + if jf.has_output(): + head(jfp) + print("\t{}".format(jf.output_line())) + + +if __name__ == '__main__': CmdLine.run() diff --git a/tools/Examples.py b/tools/Examples.py index a7aa9e97..a142f836 100644 --- a/tools/Examples.py +++ b/tools/Examples.py @@ -424,5 +424,4 @@ def findAllCommentTags(): if __name__ == '__main__': - print(__doc__) CmdLine.run() diff --git a/tools/Validate.py b/tools/Validate.py index 8ef5e6b7..799fecca 100644 --- a/tools/Validate.py +++ b/tools/Validate.py @@ -18,6 +18,7 @@ from collections import defaultdict from itertools import chain from betools import CmdLine, visitDir, ruler, head +maxlinewidth = 60 examplePath = Path(r"C:\Users\Bruce\Dropbox\__TIJ4-ebook\ExtractedExamples") maindef = re.compile("public\s+static\s+void\s+main") @@ -275,8 +276,9 @@ class Result: with self.errFilePath.open() as f: err = f.read().strip() if err: + result += "--[ Error Output ]--\n" result += err - return result.rstrip() + return textwrap.wrap(result, width=maxlinewidth) def __repr__(self): result = "\n" + ruler(self.javaFilePath, "=") +"\n" @@ -301,6 +303,8 @@ class Result: return result def appendOutputFiles(self): + if not self.new_output: + return if not self.output_tags.has_output: # no /* Output: at all with self.javaFilePath.open() as jf: code = jf.read() @@ -478,7 +482,7 @@ def checkWidth(): for n, line in enumerate(code.readlines()): if "///:~" in line or "/* Output:" in line: break - if len(line) > 60: + if len(line) > maxlinewidth: if not displayed: #print(str(example).replace("\\", "/")) displayed = True diff --git a/tools/a.bat b/tools/a.bat new file mode 100644 index 00000000..1244d565 --- /dev/null +++ b/tools/a.bat @@ -0,0 +1,2 @@ +@echo off +python C:\Users\Bruce\Dropbox\__TIJ4-ebook\AttachResults.py %* diff --git a/tools/backup.bat b/tools/backup.bat index d85e7cf0..b3bce1f3 100644 --- a/tools/backup.bat +++ b/tools/backup.bat @@ -44,8 +44,8 @@ cp(dest, gdrive) cp(dest, idrive) shortcut = Path(r"C:\Python34\Scripts") -tools = ["Examples.py", "Validate.py", "backup.bat", "go.bat", "update_git.py", - shortcut / "v.bat", shortcut / "e.bat", shortcut / "g.bat", shortcut / "home.bat"] +tools = ["Examples.py", "Validate.py", "AttachResults.py", "backup.bat", "go.bat", "update_git.py", + shortcut / "a.bat", shortcut / "v.bat", shortcut / "e.bat", shortcut / "g.bat", shortcut / "home.bat"] print("\nCopying tools to Github") for tool in tools: