Create 'read' function
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
from smnp.module.system.function import sleep, display, displayln, debug, exit, type
|
from smnp.module.system.function import sleep, display, displayln, debug, exit, type, read
|
||||||
|
|
||||||
functions = [ debug.function, display.function, displayln.function, exit.function, sleep.function, type.function ]
|
functions = [ debug.function, display.function, displayln.function, exit.function, sleep.function, type.function, read.function ]
|
||||||
methods = []
|
methods = []
|
||||||
@@ -1,3 +1,72 @@
|
|||||||
|
from smnp.error.runtime import RuntimeException
|
||||||
|
from smnp.function.model import CombinedFunction, Function
|
||||||
|
from smnp.function.signature import signature
|
||||||
|
from smnp.token.tokenizers.bool import boolTokenizer
|
||||||
|
from smnp.token.tokenizers.note import noteTokenizer
|
||||||
|
from smnp.type.model import Type
|
||||||
|
from smnp.type.signature.matcher.type import ofType
|
||||||
|
|
||||||
|
_signature1 = signature()
|
||||||
|
def _function1(env):
|
||||||
|
value = input()
|
||||||
|
return Type.string(value)
|
||||||
|
|
||||||
|
|
||||||
|
_signature2 = signature(ofType(Type.STRING))
|
||||||
|
def _function2(env, prompt):
|
||||||
|
print(prompt.value, end="")
|
||||||
|
value = input()
|
||||||
|
return Type.string(value)
|
||||||
|
|
||||||
|
|
||||||
|
_signature3 = signature(ofType(Type.TYPE))
|
||||||
|
def _function3(env, type):
|
||||||
|
value = input()
|
||||||
|
return getValueAccordingToType(value, type)
|
||||||
|
|
||||||
|
|
||||||
|
def getValueAccordingToType(value, type):
|
||||||
|
try:
|
||||||
|
if type.value == Type.STRING:
|
||||||
|
return Type.string(value)
|
||||||
|
|
||||||
|
if type.value == Type.INTEGER:
|
||||||
|
return Type.integer(int(value))
|
||||||
|
|
||||||
|
if type.value == Type.BOOL:
|
||||||
|
consumedChars, token = boolTokenizer(value, 0, 0)
|
||||||
|
if consumedChars > 0:
|
||||||
|
return Type.bool(token.value)
|
||||||
|
|
||||||
|
return ValueError()
|
||||||
|
|
||||||
|
if type.value == Type.NOTE:
|
||||||
|
consumedChars, token = noteTokenizer(value, 0, 0)
|
||||||
|
if consumedChars > 0:
|
||||||
|
return Type.note(token.value)
|
||||||
|
|
||||||
|
raise ValueError()
|
||||||
|
|
||||||
|
raise RuntimeException(f"Type {type.value.name.lower()} is not suuported", None)
|
||||||
|
|
||||||
|
except ValueError:
|
||||||
|
raise RuntimeException(f"Invalid value '{value}' for type {type.value.name.lower()}", None)
|
||||||
|
|
||||||
|
|
||||||
|
_signature4 = signature(ofType(Type.STRING), ofType(Type.TYPE))
|
||||||
|
def _function4(env, prompt, type):
|
||||||
|
print(prompt.value, end="")
|
||||||
|
value = input()
|
||||||
|
return getValueAccordingToType(value, type)
|
||||||
|
|
||||||
|
|
||||||
|
function = CombinedFunction(
|
||||||
|
'read',
|
||||||
|
Function(_signature1, _function1),
|
||||||
|
Function(_signature2, _function2),
|
||||||
|
Function(_signature3, _function3),
|
||||||
|
Function(_signature4, _function4)
|
||||||
|
)
|
||||||
|
|
||||||
# TODO read function
|
# TODO read function
|
||||||
# def read(args, env):
|
# def read(args, env):
|
||||||
|
|||||||
Reference in New Issue
Block a user