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 = []
|
||||
@@ -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
|
||||
# def read(args, env):
|
||||
|
||||
Reference in New Issue
Block a user