diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 00a6111..7845950 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -109,14 +109,14 @@ 2 false - -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} 0 C:\Users\14354\Documents\Qt Projects\MicrologicIDE\build\Desktop_Qt_6_7_2_MinGW_64_bit-Debug @@ -166,14 +166,14 @@ 2 false - -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} C:\Users\14354\Documents\Qt Projects\MicrologicIDE\build\Desktop_Qt_6_7_2_MinGW_64_bit-Release @@ -222,14 +222,14 @@ 2 false - -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} C:\Users\14354\Documents\Qt Projects\MicrologicIDE\build\Desktop_Qt_6_7_2_MinGW_64_bit-RelWithDebInfo @@ -276,14 +276,14 @@ 2 false - -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} 0 C:\Users\14354\Documents\Qt Projects\MicrologicIDE\build\Desktop_Qt_6_7_2_MinGW_64_bit-Profile @@ -331,14 +331,14 @@ 2 false - -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + -DCMAKE_BUILD_TYPE:STRING=MinSizeRel -DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} C:\Users\14354\Documents\Qt Projects\MicrologicIDE\build\Desktop_Qt_6_7_2_MinGW_64_bit-MinSizeRel diff --git a/Micrologic.exe b/Micrologic.exe index c11983d..acf0d89 100644 Binary files a/Micrologic.exe and b/Micrologic.exe differ diff --git a/MicrologicIDE.cpp b/MicrologicIDE.cpp index c537d84..fadb298 100644 --- a/MicrologicIDE.cpp +++ b/MicrologicIDE.cpp @@ -533,6 +533,7 @@ std::vector MicrologicIDE::grammarCheck(std::vector lines){ if(atoi(args[1].c_str()) MicrologicIDE::grammarCheck(std::vector lines){ } else ans[i]=false; } + else ans[i]=false; } else if(args[0]=="input"&&args.size()==3){ if(isNumber(args[1])&&isNumber(args[2])){ @@ -566,6 +568,7 @@ std::vector MicrologicIDE::grammarCheck(std::vector lines){ if(atoi(args[1].c_str()) MicrologicIDE::grammarCheck(std::vector lines){ else if(args[0]=="path"&&args.size()==2){ ans[i]=true; } - else if(args[0]=="open"&&args.size()==2){ + else if((args[0]=="open"||args[0]=="safe-open")&&args.size()==2){ ans[i]=true; } - else if(args[0]=="open"&&count(line.begin(),line.end(),'\"')>=2){ + else if((args[0]=="open"||args[0]=="safe-open")&&count(line.begin(),line.end(),'\"')>=2){ ans[i]=true; } else if(args[0]=="mod"&&args.size()==3){ modBlock.insert({args[1],0}); ans[i]=true; } + else if(args[0]=="check-mod"&&args.size()==1){ + ans[i]=true; + } else if(args[0]=="block"&&args.size()>=3){ if(mods.count(args[1])!=0){ if(args.size()==2+mods[args[1]].first+mods[args[1]].second) ans[i]=true; @@ -597,6 +603,17 @@ std::vector MicrologicIDE::grammarCheck(std::vector lines){ } else ans[i]=false; } + else if(args[0]=="block-type"&&args.size()==2){ + if(isNumber(args[1])){ + int blockCount=0; + for(const std::pair& p:modBlock){ + if(p.first!="N"&&p.first!="A"&&p.first!="R"&&p.first!="T"&&p.first!="C"&&p.first!="P") blockCount+=p.second; + } + if(atoi(args[1].c_str()) MicrologicIDE::grammarCheck(std::vector lines){ else if(args[0]=="check-output"&&atoi(args[1].c_str()) MicrologicIDE::grammarCheck(std::vector lines){ } else ans[i]=false; } + else if(args[0]=="del"&&args.size()==3){ + if(args[1]=="line"){ + if(isNumber(args[2])&&atoi(args[2].c_str()) MicrologicIDE::grammarCheck(std::vector lines){ else ans[i]=false; } else if(args[0]=="lang"&&args.size()==2){ - ans[i]=std::count(langs.begin(),langs.end(),args[1])==1; + ans[i]=std::count(langs.begin(),langs.end(),args[1])>0; } else if(args[0]=="neko"&&args.size()==1){ ans[i]=true; diff --git a/MicrologicIDE.h b/MicrologicIDE.h index affe2a0..c0276fa 100644 --- a/MicrologicIDE.h +++ b/MicrologicIDE.h @@ -30,7 +30,7 @@ class MicrologicIDE : public QMainWindow std::string debugInfo{}; std::vector blankChars; - const std::vector keys={"end","line","wline","N","A","R","T","C","P","set","check","input:","input","output:","output","tick","tick!","speed","path","open","mod","block","inspect","echo","@echo","clear","help","clear"}; + const std::vector keys={"end","line","wline","N","A","R","T","C","P","set","check","input:","input","output:","output","tick","tick!","speed","path","open","safe-open","mod","check-mods","block","block-type","tag","type","check-input","check-output","inspect","del","export","echo","@echo","clear","help","lang"}; const std::vector nums={"0","1","2","3","4","5","6","7","8","9"}; explicit MicrologicIDE(QWidget *parent = 0); @@ -98,7 +98,7 @@ class MicrologicIDE : public QMainWindow return l; } - std::vector langs={"list","zh_cn","en_us"}; + std::vector langs={"list"}; private slots: diff --git a/help.txt b/help.txt index e58060e..d51a2fe 100644 --- a/help.txt +++ b/help.txt @@ -41,10 +41,14 @@ tick [TIMES] Tick mutiple times. tick! Tick once, and output values of all lines after it. tick! [TIMES] Tick mutiple times, and output values of all lines after every tick. speed [SPEED] Set speed. The default speed is 1. +path Check current path. path [PATH] Set path of scripts. Use double quotation marks when the path name include spaces. open [FILE] Open an Micrologic script file. Use double quotation marks when the file name include spaces. +safe-open [FILE] Similar to open, but disable some commands. mod [MOD] [FILE] Give an file a mod name, in order to use it as a block afterwards. +check-mods Check all current mods. block [MOD] [INPUT [INPUT ...]] [OUTPUT [OUTPUT ...]] Creates a user-defined block. +block-type [BLOCK] Check the type of a designated block. tag [ALINE] Check whether a line is set as input or output. type [ALINE] Check whether a line is wide. check-input Lists the line order numbers of input lines. @@ -52,6 +56,9 @@ check-input [INPUT] Lists the line order n check-output Lists the line order numbers of output lines. check-output [OUTPUT] Lists the line order number of a designated output line. inspect [BLOCKTYPE] [BLOCK] Checks whether a block connects correct line type. +del [BLOCKTYPE] [BLOCK] Delete a designated block. +del line [ALINE] Delete a designated line. No bugs were found in tn test but you'd betterbe careful of those blocks without line connection. +export Export current blocks. echo [MESSAGE] Outputs a message. @echo [ECHO] Set whether to echo messages. Requires 0 or 1. clear Clear the interpreter' data and restart. diff --git a/lang.json b/lang.json new file mode 100644 index 0000000..4ea38bd --- /dev/null +++ b/lang.json @@ -0,0 +1,216 @@ +{ + "en_us": { + "LINE": "No.%d line added.\n", + + "LINES": "No.%d~%d line added.\n", + + "WLINE": "No.%d wide line added.\n", + + "WLINES": "No.%d~%d wide line added.\n", + + "BLOCKN": "No.%d blockN added. Input: No.%d line. Output: No.%d line.\n", + + "BLOCKA": "No.%d blockA added. Input: No.%d&%d line. Output: No.%d line.\n", + + "BLOCKR": "No.%d blockR added. Input: No.%d&%d line. Output: No.%d line.\n", + + "BLOCKT": "No.%d blockT added. Input: No.%d line. Output: No.%d line.\n", + + "BLOCKC": "No.%d blockC added. Input: No.%d %d %d %d line. Output: No.%d line.\n", + + "BLOCKP": "No.%d blockP added. Input: No.%d line. Output: No.%d %d %d %d line.\n", + + "CHECK": "Value of No.%d line is %s\n", + + "CHECKS": "Value of lines are: ", + + "SET": "Set value of No.%d line to %d.\n", + + "SETW": "Set wide value of No.%d line to %d%d%d%d.\n", + + "INPUT:": "Added line No.%d as input line No.%d.\n", + + "INPUT": "Inputted value %d to input line No.%d.\n", + + "INPUTW": "Inputted value %d%d%d%d to input line No.%d.\n", + + "OUTPUT:": "Added line No.%d as output line No.%d.\n", + + "OUTPUT": "Value of No.%d output line is %s\n", + + "OUTPUTS": "Value of output lines are: ", + + "TICK": "Ticked.\n", + + "TICKS": "Ticked for %d times.\n", + + "TICK!": "Value of lines after ticking are: ", + + "TICKS!": "Value of lines after ticking are: ", + + "SPEED": "Set speed to %d.\n", + + "OPEN": "Opened: %s\n\n", + + "SAFE_OPEN": "Safe-opened: %s\n\n", + + "MOD": "Loaded Mod: %s (%s)\n", + + "CHECK_MODS": "All current mods: ", + + "BLOCK1": "No.%d block (%s) added. Input: No.", + + "BLOCK2": "line. Output: No.", + + "BLOCK3": "line.\n", + + "BLOCK_TYPE": "Type of block No.%d is %s.\n", + + "CHECK_INPUT": "No.%d input line is line No.%d.\n", + + "CHECK_INPUTS": "Input lines are: ", + + "CHECK_OUTPUT": "No.%d output line is line No.%d.\n", + + "CHECK_OUTPUTS": "Output lines are: ", + + "TAG": "No.%d line is: ", + + "TAG--": "neither input nor output.\n", + + "TAGI-": "input.\n", + + "TAG-O": "output.\n", + + "TAGIO": "both input and output.\n", + + "TYPE": "No.%d line is: ", + + "TYPEL": "line.\n", + + "TYPEW": "wideline.\n", + + "INSPECT": "Inspection result of %s No.%d is %d.\n", + + "DEL": "Deleted %s No.%d.\n", + + "PATH": "Current Path: %s\n", + + "PATH_SET": "Set path to: %s\n", + + "CLEAR": "Cleared.\n", + + "LANG": "Set language to %s.\n", + + "LANG_LIST": "All languages: ", + + "NEKO": "Meow~Have a nice day~\n" + }, + "zh_cn": { + "LINE": "添加了第%d条线。\n", + + "LINES": "添加了第%d~%d条线。\n", + + "WLINE": "添加了第%d条宽线。\n", + + "WLINES": "添加了第%d~%d条宽线。\n", + + "BLOCKN": "添加了第%d个N块,输入线号为%d,输出线号为%d。\n", + + "BLOCKA": "添加了第%d个A块,输入线号为%d和%d,输出线号为%d。\n", + + "BLOCKR": "添加了第%d个R块,输入线号为%d和%d,输出线号为%d。\n", + + "BLOCKT": "添加了第%d个T块,输入线号为%d,输出线号为%d。\n", + + "BLOCKC": "添加了第%d个C块,输入线号为%d %d %d %d,输出线号为%d。\n", + + "BLOCKP": "添加了第%d个C块,输入线号为%d,输出线号为%d %d %d %d。\n", + + "CHECK": "第%d条线的值是%s\n", + + "CHECKS": "所有线的值是:", + + "SET": "将第%d条线的值设置为%d。\n", + + "SETW": "将第%d条线的值设置为%d%d%d%d。\n", + + "INPUT:": "将第%d条线设置为第%d条输入线。\n", + + "INPUT": "输入%d到第%d条输入线。\n", + + "INPUTW": "输入%d%d%d%d到第%d条输入线。\n", + + "OUTPUT:": "将第%d条线设置为第%d条输出线。\n", + + "OUTPUT": "第%d条输出线的值是%s\n", + + "OUTPUTS": "所有输出线的值是:", + + "TICK": "更新1刻。\n", + + "TICKS": "更新%d刻。\n", + + "TICK!": "更新后的值是:", + + "TICKS!": "更新后的值是:", + + "SPEED": "将速度设为%d。\n", + + "OPEN": "打开文件:%s\n\n", + + "SAFE_OPEN": "以安全模式打开文件:%s\n\n", + + "MOD": "加载模块:%s(%s)\n", + + "CHECK_MODS": "所有当前模块:", + + "BLOCK1": "添加了第%d个块(类型为%s),输入线号为", + + "BLOCK2": ",输出线号为", + + "BLOCK3": "。\n", + + "BLOCK_TYPE": "第%d个块的类型为%s。\n", + + "CHECK_INPUT": "第%d条输入线的线编号是%d。\n", + + "CHECK_INPUTS": "所有输入线的编号是:", + + "CHECK_OUTPUT": "第%d条输出线的线编号是%d。\n", + + "CHECK_OUTPUTS": "所有输出线的编号是:", + + "TAG": "第%d条线是:", + + "TAG--": "既非输入也非输出。\n", + + "TAGI-": "输入。\n", + + "TAG-O": "输出。\n", + + "TAGIO": "既是输入也是输出。\n", + + "TYPE": "第%d条线是:", + + "TYPEL": "线。\n", + + "TYPEW": "宽线。\n", + + "INSPECT": "所有块%s中的第%d个的校验结果是%d。\n", + + "DEL": "已删除%s中的第%d个。\n", + + "PATH": "当前目录:%s\n", + + "PATH_SET": "将目录设为:%s\n", + + "CLEAR": "已清空。\n", + + "LANG": "将语言设为%s。\n", + + "LANG_LIST": "所有语言:", + + "NEKO": "喵呜~今天也是美好的一天喵~\n" + } +} \ No newline at end of file