add files from prior development
							parent
							
								
									f5a2b665c9
								
							
						
					
					
						commit
						1779e464e8
					
				|  | @ -0,0 +1,51 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!-- This is an example file for PyHP (Python Hypertext Preprocessor). | ||||||
|  |      PyHP is intended to work similarly to PHP replacing the at times quirky | ||||||
|  |      PHP language with Python while still allowing for embedding in | ||||||
|  |      hypertext documents. | ||||||
|  | --> | ||||||
|  | <?py | ||||||
|  |     # Start of a python code block: | ||||||
|  |     # The block starts after the first line break after "<?py". | ||||||
|  |     # The indent of the first line of the block is assumed to be equivalent | ||||||
|  |     # to 0 (unless specified otherwise) in a normal python file to allow for | ||||||
|  |     # nice indented code blocks without messing up the Python syntax. | ||||||
|  |     # An example of specifying the indent is provided below. | ||||||
|  | 
 | ||||||
|  |     title = "PyHP - Python Hypertext Preprocessor" | ||||||
|  |     text1 = "An attempt at replacing PHP with Python. " | ||||||
|  |     text2 = "This is an example file that roughly describes the format." | ||||||
|  | ?> | ||||||
|  | <!-- End of python block: | ||||||
|  |      The block ends at the last line break before "?>". | ||||||
|  |      Unless specified otherwise, the python indent of the text after a | ||||||
|  |      python block is assumed to be 0. | ||||||
|  |      An example of specifying the indent is provided below. | ||||||
|  | --> | ||||||
|  | <html> | ||||||
|  |     <head> | ||||||
|  |         <!-- insert variables just like in PHP --> | ||||||
|  |         <title> <?= title ?> </title> | ||||||
|  |     </head> | ||||||
|  |     <body> | ||||||
|  |         <h1> <?= title ?> </h1> | ||||||
|  |         <p> <?= text1, text2 ?> </p> | ||||||
|  | 
 | ||||||
|  |         <!-- Here is an example of an automatically populated table: --> | ||||||
|  |         <table> | ||||||
|  |             <?py | ||||||
|  |                 hello_world = "Hello World!" | ||||||
|  |                 for i in range(0,len(hello_world)+1): | ||||||
|  |             4 ?> | ||||||
|  |             <!-- python indent for the following hypertext is 4 spaces --> | ||||||
|  |             <tr> | ||||||
|  |                 <td> <?= i ?> </td> | ||||||
|  |                 <td> <?= hello_world ?> </td> | ||||||
|  |             </tr> | ||||||
|  |             <?py 4 | ||||||
|  |                 # start the python block with an indent of 4 spaces | ||||||
|  |                 hello_world = hello_world[:-1] | ||||||
|  |             ?> | ||||||
|  |         </table> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  | if [ -z "$PYHP" ]; then | ||||||
|  |   PYHP=""$(dirname "$0")"/pyhp.py" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | PYH="$1" | ||||||
|  | shift | ||||||
|  | 
 | ||||||
|  | HYPERTEXT=$("$PYHP" "$PYH" | python3 - "$@") | ||||||
|  | 
 | ||||||
|  | # check for headers, if present assume the pyh file is going to handle them | ||||||
|  | if head -n1 <<< "$HYPERTEXT" | grep "[A-Za-z][A-Za-z0-9\-]*: "; then | ||||||
|  |   ; | ||||||
|  | else | ||||||
|  |   echo -ne "Content-type: text/html\\n\\n" | ||||||
|  | fi | ||||||
|  | @ -0,0 +1,127 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | 
 | ||||||
|  | # This is a naive implementation of the Python Hypertext preprocessor. | ||||||
|  | # For example, we just assume that we can hold the entire code in memory. | ||||||
|  | # Also, this is just the preprocessor, the resulting code will not be | ||||||
|  | # executed. | ||||||
|  | 
 | ||||||
|  | # Yes, the comments were here first and I wrote the code after writing them and then adjusted them to reality. | ||||||
|  | 
 | ||||||
|  | import sys | ||||||
|  | 
 | ||||||
|  | fd = open(sys.argv[1], "r") | ||||||
|  | lines = fd.read().split("\n") | ||||||
|  | fd.close() | ||||||
|  | 
 | ||||||
|  | # start text | ||||||
|  | output = "print(\"\"\"" | ||||||
|  | # while not end of file | ||||||
|  | while len(lines)>0: | ||||||
|  |     # grab a line to process | ||||||
|  |     line = lines.pop(0) | ||||||
|  |     # iterate over line | ||||||
|  |     i=0 | ||||||
|  |     while i < len(line): | ||||||
|  |         # attempt to grab the next few characters | ||||||
|  |         try: | ||||||
|  |             # variable(s) or code | ||||||
|  |             if line[i:i+3] in ["<?p", "<?="]: | ||||||
|  |                 # end text | ||||||
|  |                 output = output + "\"\"\"" | ||||||
|  |                 # variable(s) | ||||||
|  |                 if line[i:i+3] == "<?=": | ||||||
|  |                     output = output + " + str(" | ||||||
|  |                     # store variable list | ||||||
|  |                     # (may span more than just one line) | ||||||
|  |                     variable_list = "" | ||||||
|  |                     i = i+3 | ||||||
|  |                     # walk until we either encounter a ?> or a line break | ||||||
|  |                     while True: | ||||||
|  |                         # if line break, attempt to go to next line | ||||||
|  |                         if len(line[i:])<2: | ||||||
|  |                             variable_list = variable_list + line[i:] | ||||||
|  |                             i = -1 | ||||||
|  |                             try: | ||||||
|  |                                 line = lines.pop(0) | ||||||
|  |                             except IndexError: | ||||||
|  |                                 print("Unexpected end of file: No closing ?> found.", file=sys.stderr) | ||||||
|  |                                 sys.exit(1) | ||||||
|  |                         else: | ||||||
|  |                             if line[i:i+2]=="?>": | ||||||
|  |                                 i = i+1 | ||||||
|  |                                 break | ||||||
|  |                             else: | ||||||
|  |                                 # add to variable list | ||||||
|  |                                 variable_list = variable_list + line[i] | ||||||
|  |                         i = i+1 | ||||||
|  |                     # split at comma and add the variables | ||||||
|  |                     output = output + ") + str(".join(variable_list.split(",")) + ") + " | ||||||
|  |                 # code | ||||||
|  |                 elif line[i:i+4] == "<?py": | ||||||
|  |                     output = output + ", end=\"\")\n" | ||||||
|  |                     # determine indent | ||||||
|  |                     #default to 0 | ||||||
|  |                     indent = 0 | ||||||
|  |                     try: | ||||||
|  |                         # any non whitespace characters left on line? | ||||||
|  |                         if not line[i+4:].strip()=="": | ||||||
|  |                             # attempt to use that as indent value | ||||||
|  |                             indent = int(line[i+4:]) | ||||||
|  |                     # determining indent failed | ||||||
|  |                     except ValueError: | ||||||
|  |                         print("Invalid indent: \""+line[i+4:]+"\"\n" + line, file=sys.stderr) | ||||||
|  |                         sys.exit(1) | ||||||
|  |                     # attempt to check for end of code | ||||||
|  |                     try: | ||||||
|  |                         # grab code line | ||||||
|  |                         line = lines.pop(0) | ||||||
|  |                         # determine appropriate unindent length to get | ||||||
|  |                         # "raw" code | ||||||
|  |                         unindent_length = len(line)-len(line.lstrip()) | ||||||
|  |                         while not "?>" in line: | ||||||
|  |                             # fix indent | ||||||
|  |                             line = indent*" "+line[unindent_length:] | ||||||
|  |                             # add code line | ||||||
|  |                             output = output + line + "\n" | ||||||
|  |                             # grab next code line | ||||||
|  |                             line = lines.pop(0) | ||||||
|  |                     # checking for end of code failed | ||||||
|  |                     except IndexError: | ||||||
|  |                         print("Unexpected end of file: No closing ?> found.", file=sys.stderr) | ||||||
|  |                         sys.exit(1) | ||||||
|  |                     # attempt to determine indent after end of code | ||||||
|  |                     indent = 0 | ||||||
|  |                     try: | ||||||
|  |                         if not line[:line.find("?>")].strip()=="": | ||||||
|  |                             indent = int(line[:line.find("?>")]) | ||||||
|  |                     except ValueError: | ||||||
|  |                         print("Invalid indent: \""+line[:line.find("?>")]+"\"\n" + line, file=sys.stderr) | ||||||
|  |                         sys.exit(1) | ||||||
|  |                     # add indent after end of code | ||||||
|  |                     output = output + " "*indent + "print(" | ||||||
|  |                     # set i accordingly to add rest of line after code | ||||||
|  |                     # block end | ||||||
|  |                     i = line.find("?>")+2 | ||||||
|  |                 # assume accidental match | ||||||
|  |                 else: | ||||||
|  |                     # start text | ||||||
|  |                     output = output + " + \"" | ||||||
|  |                     # add text | ||||||
|  |                     output = output + line[i] | ||||||
|  |                     # end text | ||||||
|  |                     output = output + "\" + " | ||||||
|  |                 # start text | ||||||
|  |                 output = output + "\"\"\"" | ||||||
|  |             else: | ||||||
|  |                 # add text | ||||||
|  |                 output = output + line[i] | ||||||
|  |         # handle last characters of line | ||||||
|  |         except IndexError: | ||||||
|  |             # add text | ||||||
|  |             output = output + line[i] | ||||||
|  |         i = i+1 | ||||||
|  |     output = output + "\n" | ||||||
|  | # end text | ||||||
|  | output = output + "\"\"\", end=\"\")\n" | ||||||
|  | 
 | ||||||
|  | print(output) | ||||||
		Loading…
	
		Reference in New Issue
	
	 Jan Danielzick
						Jan Danielzick