From a0bab32829dadde8096392c21abf61d78a1cbf7a Mon Sep 17 00:00:00 2001 From: "James A. Clark" Date: Fri, 17 Sep 2021 12:16:35 -0500 Subject: [PATCH] MAJOR UPDATE 3! added long_script.potscr, added interactive shell, made website a lot easier to look at, added multiplication and division, made a function for doing math operations, made potscr logo, did a bunch of other crap to make potscr better --- README.md | 16 +- examples/long_script.potscr | 1 + files/shell.py | 128 ++++++++++++++++ index.html | 16 +- potscr.py | 277 ++++++++++++++++++++++------------ website/cli.html | 19 +-- website/css/style.css | 35 +++++ website/guide.html | 41 ++--- website/{ => img}/favicon.png | Bin website/img/potscr.png | Bin 0 -> 34748 bytes 10 files changed, 382 insertions(+), 151 deletions(-) create mode 100644 examples/long_script.potscr create mode 100644 files/shell.py create mode 100644 website/css/style.css rename website/{ => img}/favicon.png (100%) create mode 100644 website/img/potscr.png diff --git a/README.md b/README.md index 2ad8d5a..22ca1c1 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,8 @@ go [here](https://nanobot567.github.io/potscr) ### how to parse potatoscript -* download the latest version of python from [the website](https://python.org/downloads/) -* clone the latest version of potscr -* open command prompt and change your directory to wherever you downloaded potscr-main to -* type ```python potscr.py (potatoscript file path)``` -* your output will be showed in command prompt! - -### to-do - -- add an interactive shell -- add more stuff to the cli -- unlimited char numeric addition \ No newline at end of file +1. download the latest version of python from [the website](https://python.org/downloads/) +2. clone the latest version of potscr +3. open command prompt and change your directory to wherever you downloaded potscr-main to +4. type ```python potscr.py (potatoscript file path)``` +5. your output will be showed in command prompt! \ No newline at end of file diff --git a/examples/long_script.potscr b/examples/long_script.potscr new file mode 100644 index 0000000..c50af98 --- /dev/null +++ b/examples/long_script.potscr @@ -0,0 +1 @@ +~-Please type an integer: _%#%//-That integer plus, minus, times, and divided by 5: _/+%^`%`%^+%>%^&%&%^~ \ No newline at end of file diff --git a/files/shell.py b/files/shell.py new file mode 100644 index 0000000..6fa41e4 --- /dev/null +++ b/files/shell.py @@ -0,0 +1,128 @@ +from sys import stdout +from time import sleep + +storednum = 0 + +def shell(): + global storednum + txtfound = "" + curnum = 0 + lookinfortxt = "" + firstTime = True + stored = "" + shellver = 1.0 + + while True: + curnum = 0 + shellIn = "" + if firstTime: + print(f"potscr shell v{shellver}\n") + print("type 'quit' to exit.") + firstTime = False + + shellIn = input("> ") + if shellIn == "quit" or shellIn == "q" or shellIn == "bye" or shellIn == "exit": + exit() + + # code in potscr.py starts here + + def mathsomethin(type): + global storednum + try: + if shellIn[curnum+1] == "%": + if shellIn[curnum+2].isnumeric(): + if type == "+": + storednum += int(shellIn[curnum+2]) + elif type == "-": + storednum -= int(shellIn[curnum+2]) + elif type == "*": + storednum = storednum * int(shellIn[curnum+2]) + elif type == "/": + storednum = storednum / int(shellIn[curnum+2]) + else: + if type == "+": + storednum += 5 + elif type == "-": + storednum -= 5 + elif type == "*": + storednum = storednum * 5 + elif type == "/": + storednum = storednum / 5 + except IndexError: + if type == "+": + storednum += 1 + elif type == "-": + storednum -= 1 + elif type == "*": + storednum = storednum * 1 + elif type == "/": + storednum = storednum / 1 + + + + for i in range(0,shellIn.__len__()): + char = shellIn[curnum] + if char == "-": # start of print + lookinfortxt = True + elif char == "_": # end of print + lookinfortxt = False + try: + if shellIn[curnum+1] == "%": # percentage after means an alt version of the command, in this case no newline + stdout.write(txtfound[1:]) + stdout.flush() + txtfound = "" + else: + print(txtfound[1:]) + txtfound = "" + except IndexError: + print(txtfound[1:]) + txtfound = "" + elif char == "#": # get input + temp = input() + try: + if temp.isnumeric() and shellIn[curnum+1] == "%": + storednum = int(temp) + elif shellIn[curnum+1] == "%" and not temp.isnumeric(): + print("ERROR: Input must be an integer!") + exit() + else: + stored = temp + except: + stored = temp + + elif char == "$": # print stored var + print(stored,end="") + elif char == "/": # newline + print("") + elif char == "*": # reset stored number + storednum = 0 + elif char == "+": # number + + mathsomethin("+") + elif char == "`": # number - + mathsomethin("-") + elif char == ">": # number multiplied + mathsomethin("*") + elif char == "&": # number divided + mathsomethin("/") + elif char == "^": # print stored num + try: + if shellIn[curnum+1] == "%": + print(storednum,end="") + else: + print(storednum) + except IndexError: + print(storednum) + + elif char == "@": # sleep + try: + sleep(int(shellIn[curnum+1])) + except ValueError: + print(f"\nERROR: Char {curnum}: An integer is required for sleeping") + exit() + + + + if lookinfortxt: + txtfound += char + + curnum += 1 \ No newline at end of file diff --git a/index.html b/index.html index a775bd8..7c876b5 100644 --- a/index.html +++ b/index.html @@ -1,23 +1,21 @@ potatoscript - home - + + -

potatoscript

+ +

potatoscript is an esoteric programming language, similar to unlambda.

- potatoscript programming guide +

- cli usage guide + \ No newline at end of file diff --git a/potscr.py b/potscr.py index 7544c05..886a2dc 100644 --- a/potscr.py +++ b/potscr.py @@ -1,34 +1,37 @@ #! python -from sys import argv -import sys +from sys import argv, stdout from time import sleep -import os +from os import remove +from files.shell import shell +from shutil import rmtree -ver = "2.18" # format: major potscr release number (dot) commit number +ver = "3.19" # format: major potscr release number (dot) commit number using_py = False script_ok = False lookinfortxt = False +shell_ok = False logit = False len = 0 curnum = 0 +storednum = 0 txtfound = "" stored = "" logpath = "" -storednum = 0 helptxt = f""" potatoscript parser v{ver} -usage: potscr [-h] (input file) [-l (log file)] +usage: potscr [-s] [-h] (input file) [-l (log file)] arguments: -h,--help: shows help -l,--logpath (log file): sets a path for the log file - +-s,--shell: interactive potatoscript shell + """ noargtxt = f""" @@ -38,6 +41,7 @@ """ +rmtree("files\__pycache__") if argv[0] == "potscr" or argv[0] == "potscr.py": using_py = True @@ -70,14 +74,18 @@ if i == "--logpath" or i == "-l": logit = True try: - print(argv[tempnum+1]) logpath = argv[tempnum+1] logfile = open(logpath,"x") except FileExistsError: - os.remove(logpath) - print(argv[tempnum+1]) + remove(logpath) logpath = argv[tempnum+1] logfile = open(logpath,"x") + except IndexError: + print("ERROR: no path specified for log file") + +if "-s" in argv or "--shell" in argv: + shell_ok = True + if using_py: if argv[1].endswith(".potscr") or argv[1].endswith(".potato") or argv[1].endswith(".pscr"): @@ -85,114 +93,185 @@ readit = file.read() if not readit.startswith("~"): print("ERROR: This is not a potatoscript file! Did you forget the ~ in the beginning?") + exit() else: if not readit.endswith("~"): print("ERROR: This file has no ending indicator!") - else: - script_ok = True + exit() + else: if argv[0].endswith(".potscr") or argv[0].endswith(".potato") or argv[0].endswith(".pscr"): file = open(argv[0],"r") readit = file.read() if not readit.startswith("~"): print("ERROR: This is not a potatoscript file! Did you forget the ~ in the beginning?") + exit() else: if not readit.endswith("~"): print("ERROR: This file has no ending indicator!") - else: - script_ok = True - -if not script_ok: - exit() - -for c in readit: - len += 1 - -for i in range(0,len): - char = readit[curnum] - if char == "-": # start of print - lookinfortxt = True - if logit: - logfile.write("LOG: print start\n") - elif char == "_": # end of print - lookinfortxt = False - if readit[curnum+1] == "%": # percentage after means an alt version of the command, in this case no newline - sys.stdout.write(txtfound[1:]) - sys.stdout.flush() - if logit: - logfile.write("LOG: print end (no newline)\n") - logfile.write(f"LOG: printed {txtfound[1:]}\n") - txtfound = "" - else: - print(txtfound[1:]) - if logit: - logfile.write("LOG: print end\n") - logfile.write(f"LOG: printed {txtfound[1:]}\n") - txtfound = "" - elif char == "#": # get input - temp = input() - if temp.isnumeric() and readit[curnum+1] == "%": - storednum = int(temp) - if logit: - logfile.write("LOG: got input from user\n") - logfile.write(f"LOG: storednum = {storednum}\n") - else: - stored = temp - if logit: - logfile.write("LOG: got input from user\n") - logfile.write(f"LOG: stored = {stored}\n") - - elif char == "$": # print stored var - print(stored,end="") - if logit: - logfile.write(f"LOG: printed stored ({stored})\n") - elif char == "/": # newline - print("") - if logit: - logfile.write("LOG: printed newline\n") - elif char == "*": # reset stored number - storednum = 0 - if logit: - logfile.write("LOG: storednum reset\n") - elif char == "+": # number +1 + exit() + + + +if shell_ok: + shell() + + + +# when this is updated, copy-paste into shell.py + +if not shell_ok: + def mathsomethin(type): + global storednum if readit[curnum+1] == "%": if readit[curnum+2].isnumeric(): - storednum += int(readit[curnum+2]) + if type == "+": + storednum += int(readit[curnum+2]) + elif type == "-": + storednum -= int(readit[curnum+2]) + elif type == "*": + storednum = storednum * int(readit[curnum+2]) + elif type == "/": + storednum = storednum / int(readit[curnum+2]) + + if logit: + if type == "+": + logfile.write(f"LOG: added {int(readit[curnum+2])} to storednum (now {storednum})\n") + elif type == "-": + logfile.write(f"LOG: subtracted {int(readit[curnum+2])} from storednum (now {storednum})\n") + elif type == "*": + logfile.write(f"LOG: multiplied {int(readit[curnum+2])} by storednum (now {storednum})\n") + elif type == "/": + logfile.write(f"LOG: divided {int(readit[curnum+2])} by storednum (now {storednum})\n") else: - storednum += 5 - if logit: - logfile.write(f"LOG: added five to storednum (now {storednum})\n") + if type == "+": + storednum += 5 + elif type == "-": + storednum -= 5 + elif type == "*": + storednum = storednum * 5 + elif type == "/": + storednum = storednum / 5 + + if logit: + if type == "+": + logfile.write(f"LOG: added 5 to storednum (now {storednum})\n") + elif type == "-": + logfile.write(f"LOG: subtracted 5 from storednum (now {storednum})\n") + elif type == "*": + logfile.write(f"LOG: multiplied 5 by storednum (now {storednum})\n") + elif type == "/": + logfile.write(f"LOG: divided 5 by storednum (now {storednum})\n") else: - storednum += 1 + if type == "+": + storednum += 1 + elif type == "-": + storednum -= 1 + elif type == "*": + storednum = storednum * 1 + elif type == "/": + storednum = storednum / 1 + if logit: - logfile.write(f"LOG: added one to storednum (now {storednum})\n") - - elif char == "`": # number -1 - if readit[curnum+1] == "%": - if readit[curnum+2].isnumeric(): - storednum -= int(readit[curnum+2]) + if type == "+": + logfile.write(f"LOG: added 1 to storednum (now {storednum})\n") + elif type == "-": + logfile.write(f"LOG: subtracted 1 from storednum (now {storednum})\n") + elif type == "*": + logfile.write(f"LOG: multiplied 1 by storednum (now {storednum})\n") + elif type == "/": + logfile.write(f"LOG: divided 1 by storednum (now {storednum})\n") + + + + for i in range(0,readit.__len__()): + char = readit[curnum] + if char == "-": # start of print + lookinfortxt = True + if logit: + logfile.write("LOG: print start\n") + elif char == "_": # end of print + lookinfortxt = False + try: + if readit[curnum+1] == "%": # percentage after means an alt version of the command, in this case no newline + stdout.write(txtfound[1:]) + stdout.flush() + if logit: + logfile.write("LOG: print end (no newline)\n") + logfile.write(f"LOG: printed {txtfound[1:]}\n") + txtfound = "" + else: + print(txtfound[1:]) + if logit: + logfile.write("LOG: print end\n") + logfile.write(f"LOG: printed {txtfound[1:]}\n") + txtfound = "" + except IndexError: + print(txtfound[1:]) + if logit: + logfile.write("LOG: print end\n") + logfile.write(f"LOG: printed {txtfound[1:]}\n") + txtfound = "" + elif char == "#": # get input + temp = input() + if temp.isnumeric() and readit[curnum+1] == "%": + storednum = int(temp) + if logit: + logfile.write("LOG: got input from user\n") + logfile.write(f"LOG: storednum = {storednum}\n") + elif readit[curnum+1] == "%" and not temp.isnumeric(): + print("ERROR: Input must be an integer!") + if logit: + logfile.write("ERROR: Input must be an integer!") + exit() else: - storednum -= 5 + stored = temp + if logit: + logfile.write("LOG: got input from user\n") + logfile.write(f"LOG: stored = {stored}\n") + + elif char == "$": # print stored var + print(stored,end="") if logit: - logfile.write(f"LOG: subtracted five from storednum (now {storednum})\n") - else: - storednum -= 1 + logfile.write(f"LOG: printed stored ({stored})\n") + elif char == "/": # newline + print("") if logit: - logfile.write(f"LOG: subtracted one from storednum (now {storednum})\n") - elif char == "^": # print stored num - print(storednum,end="") - if logit: - logfile.write(f"LOG: printed storednum ({storednum})\n") - elif char == "@": # sleep - try: - sleep(int(readit[curnum+1])) + logfile.write("LOG: printed newline\n") + elif char == "*": # reset stored number + storednum = 0 if logit: - logfile.write(f"LOG: slept for {int(readit[curnum+1])} second(s)\n") - except ValueError: - print(f"\nERROR: Char {curnum}: An integer is required for sleeping") - exit() - - if lookinfortxt: - txtfound += char + logfile.write("LOG: storednum reset\n") + elif char == "+": # number + + mathsomethin("+") + elif char == "`": # number - + mathsomethin("-") + elif char == ">": # number multiplied + mathsomethin("*") + elif char == "&": # number divided + mathsomethin("/") + elif char == "^": # print stored num + if readit[curnum+1] == "%": + print(storednum,end="") + else: + print(storednum) + + if logit: + logfile.write(f"LOG: printed storednum ({storednum})\n") + elif char == "@": # sleep + try: + sleep(int(readit[curnum+1])) + if logit: + logfile.write(f"LOG: slept for {int(readit[curnum+1])} second(s)\n") + except ValueError: + print(f"\nERROR: Char {curnum}: An integer is required for sleeping") + exit() + + + + if lookinfortxt: + txtfound += char + + curnum += 1 - curnum += 1 + \ No newline at end of file diff --git a/website/cli.html b/website/cli.html index 6f4bc1e..6642f80 100644 --- a/website/cli.html +++ b/website/cli.html @@ -1,22 +1,15 @@ potatoscript - cli - + + - back +

potatoscript cli

usage

to parse a potatoscript file, follow these steps:

@@ -28,7 +21,7 @@

to parse a potatoscript file, follow these steps:

navigate to the directory where your potatoscript file is stored using cd.
  • - run "(path_to_potscr.py) (potatoscript file)"". if no errors are found, the code will excecute. + run "(path_to_potscr.py) (potatoscript file)". if no errors are found, the code will excecute.
  • arguments

    @@ -38,5 +31,7 @@

    -l or --logpath

    sets a path for a log file.

    example:

    potscr.py test_files/maths.potscr --logpath maths_log.txt +

    -s or --shell

    +

    starts the potatoscript shell prompt

    \ No newline at end of file diff --git a/website/css/style.css b/website/css/style.css new file mode 100644 index 0000000..6775588 --- /dev/null +++ b/website/css/style.css @@ -0,0 +1,35 @@ +h1{ + color:sienna; + font-family: "Segoe UI"; + font-size: 45px; + width:100%; + overflow:hidden; + } +code{ + color: sienna; + font-size: 15px; + } + +img{ + animation: slide 3s; + width: 400px; +} +button{ + background-color: sienna; + color: white; +} + + +@keyframes slide { + from { + margin-left: 20%; + opacity: 0%; + } + + to { + margin-left: 0%; + opacity: 100%; + + } + +} \ No newline at end of file diff --git a/website/guide.html b/website/guide.html index ce4bc96..6fd68f5 100644 --- a/website/guide.html +++ b/website/guide.html @@ -1,23 +1,14 @@ - + potatoscript - guide + - back +

    potatoscript guide

    basics

    @@ -72,6 +63,12 @@

    indicators

  • "`" - subtract one from the stored number
  • +
  • + ">" - multiply the stored number by the integer specified +
  • +
  • + "&" - divide the stored number by the integer specified +
  • "^" - print the stored number
  • @@ -79,18 +76,22 @@

    indicators

    "@" - sleep for the integer after the indicator
  • - "%" - alt version of command + "%" - alt version of the indicator
  • alt commands

    -

    +

    -

    depending on how you use %, the + indicator can do different things.

    -

    if % is behind an integer and is in front of +, the stored number is increased by that integer.

    -

    if not, the stored number is increased by 5.

    +

    +, -, >, and & (math indicators)

    +

    depending on how you use %, these indicators can do different things.

    +

    if % is behind an integer and is in front of a math indicator, the stored number is increased, decreased, multiplied, or divided by that integer, depending on which indicator you use.

    +

    if not, the stored number is increased, decreased, multiplied, or divided by 5.

    +

    +

    NOTE: the integer to be used can only be 1 character long for the operation to work as expected.

    +

    +

    _ (print end)

    +

    if % is in front of _, the string printed has no newline printed at the end.

    -

    NOTE: the integer to be added can only be 1 character long for the addition to work properly.

    -

    -

    -

    the same commands as + are preformed if % is in front of -.

    +

    # (get input)

    +

    if % is used, the input gathered from the user is stored as an integer.

    \ No newline at end of file diff --git a/website/favicon.png b/website/img/favicon.png similarity index 100% rename from website/favicon.png rename to website/img/favicon.png diff --git a/website/img/potscr.png b/website/img/potscr.png new file mode 100644 index 0000000000000000000000000000000000000000..92fa35def1e21759dbbf60601e496860d6cd4b54 GIT binary patch literal 34748 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 M>N;M1& literal 0 HcmV?d00001