diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake index c2567ee1c4..cddc804d15 100644 --- a/cmake/scripts/SquirrelExport.cmake +++ b/cmake/scripts/SquirrelExport.cmake @@ -28,30 +28,30 @@ endmacro() macro(dump_class_templates NAME) string(REGEX REPLACE "^Script" "" REALNAME ${NAME}) - string(APPEND SQUIRREL_EXPORT "\n template <> struct Param<${NAME} *> { static inline ${NAME} *Get(HSQUIRRELVM vm, int index) { return static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") - string(APPEND SQUIRREL_EXPORT "\n template <> struct Param<${NAME} &> { static inline ${NAME} &Get(HSQUIRRELVM vm, int index) { return *static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") - string(APPEND SQUIRREL_EXPORT "\n template <> struct Param { static inline const ${NAME} *Get(HSQUIRRELVM vm, int index) { return static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") - string(APPEND SQUIRREL_EXPORT "\n template <> struct Param { static inline const ${NAME} &Get(HSQUIRRELVM vm, int index) { return *static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Param<${NAME} *> { static inline ${NAME} *Get(HSQUIRRELVM vm, int index) { return static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Param<${NAME} &> { static inline ${NAME} &Get(HSQUIRRELVM vm, int index) { return *static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Param { static inline const ${NAME} *Get(HSQUIRRELVM vm, int index) { return static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Param { static inline const ${NAME} &Get(HSQUIRRELVM vm, int index) { return *static_cast<${NAME} *>(Squirrel::GetRealInstance(vm, index, \"${REALNAME}\")); } };") if("${NAME}" STREQUAL "ScriptEvent") - string(APPEND SQUIRREL_EXPORT "\n template <> struct Return<${NAME} *> { static inline int Set(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Return<${NAME} *> { static inline int Set(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; } };") elseif("${NAME}" STREQUAL "ScriptText") string(APPEND SQUIRREL_EXPORT "\n") - string(APPEND SQUIRREL_EXPORT "\n template <> struct Param {") - string(APPEND SQUIRREL_EXPORT "\n static inline Text *Get(HSQUIRRELVM vm, int index) {") - string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_INSTANCE) {") - string(APPEND SQUIRREL_EXPORT "\n return Param::Get(vm, index);") - string(APPEND SQUIRREL_EXPORT "\n }") - string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_STRING) {") - string(APPEND SQUIRREL_EXPORT "\n return new RawText(Param::Get(vm, index));") - string(APPEND SQUIRREL_EXPORT "\n }") - string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_NULL) {") - string(APPEND SQUIRREL_EXPORT "\n return nullptr;") - string(APPEND SQUIRREL_EXPORT "\n }") - string(APPEND SQUIRREL_EXPORT "\n throw sq_throwerror(vm, fmt::format(\"parameter {} has an invalid type ; expected: 'Text'\", index - 1));") - string(APPEND SQUIRREL_EXPORT "\n }") - string(APPEND SQUIRREL_EXPORT "\n };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Param {") + string(APPEND SQUIRREL_EXPORT "\n\t\tstatic inline Text *Get(HSQUIRRELVM vm, int index) {") + string(APPEND SQUIRREL_EXPORT "\n\t\t\tif (sq_gettype(vm, index) == OT_INSTANCE) {") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t\treturn Param::Get(vm, index);") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t}") + string(APPEND SQUIRREL_EXPORT "\n\t\t\tif (sq_gettype(vm, index) == OT_STRING) {") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t\treturn new RawText(Param::Get(vm, index));") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t}") + string(APPEND SQUIRREL_EXPORT "\n\t\t\tif (sq_gettype(vm, index) == OT_NULL) {") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t\treturn nullptr;") + string(APPEND SQUIRREL_EXPORT "\n\t\t\t}") + string(APPEND SQUIRREL_EXPORT "\n\t\t\tthrow sq_throwerror(vm, fmt::format(\"parameter {} has an invalid type ; expected: 'Text'\", index - 1));") + string(APPEND SQUIRREL_EXPORT "\n\t\t}") + string(APPEND SQUIRREL_EXPORT "\n\t};") else() - string(APPEND SQUIRREL_EXPORT "\n template <> struct Return<${NAME} *> { static inline int Set(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; } };") + string(APPEND SQUIRREL_EXPORT "\n\ttemplate <> struct Return<${NAME} *> { static inline int Set(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; } };") endif() endmacro() @@ -111,7 +111,7 @@ foreach(LINE IN LISTS SOURCE_LINES) continue() endif() - if("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + if("${LINE}" MATCHES "^([\t ]*)\\* @api (.*)$") set(LINE ${CMAKE_MATCH_2}) # By default, classes are not selected if(NOT CLS_LEVEL) @@ -150,12 +150,12 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # Ignore forward declarations of classes - if("${LINE}" MATCHES "^( *)class(.*);") + if("${LINE}" MATCHES "^(\t*)class(.*);") continue() endif() # We only want to have public functions exported for now - if("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") + if("${LINE}" MATCHES "^(\t*)class (.*) (: public|: protected|: private|:) ([^ ]*)") if(NOT CLS_LEVEL) if(NOT DEFINED API_SELECTED) message(WARNING "${SCRIPT_API_FILE}:${NUM_LINE}: Class '${CMAKE_MATCH_2}' has no @api. It won't be published to any API.") @@ -182,19 +182,19 @@ foreach(LINE IN LISTS SOURCE_LINES) math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") continue() endif() - if("${LINE}" MATCHES "^( *)public") + if("${LINE}" MATCHES "^(\t*)public") if(CLS_LEVEL EQUAL 1) set(IS_PUBLIC TRUE) endif() continue() endif() - if("${LINE}" MATCHES "^( *)protected") + if("${LINE}" MATCHES "^(\t*)protected") if(CLS_LEVEL EQUAL 1) unset(IS_PUBLIC) endif() continue() endif() - if("${LINE}" MATCHES "^( *)private") + if("${LINE}" MATCHES "^(\t*)private") if(CLS_LEVEL EQUAL 1) unset(IS_PUBLIC) endif() @@ -222,7 +222,7 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # We need to make specialized conversions for structs - if("${LINE}" MATCHES "^( *)struct ([^ ]*)") + if("${LINE}" MATCHES "^(\t*)struct ([^ ]*)") math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") # Check if we want to publish this struct @@ -244,7 +244,7 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # We need to make specialized conversions for enums - if("${LINE}" MATCHES "^( *)enum ([^ ]*)") + if("${LINE}" MATCHES "^(\t*)enum ([^ ]*)") math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") # Check if we want to publish this enum @@ -281,7 +281,7 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # Empty/white lines. When we may do the Squirrel export, do that export. - if("${LINE}" MATCHES "^([ ]*)$") + if("${LINE}" MATCHES "^([ \t]*)$") if(NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) continue() endif() @@ -319,7 +319,7 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") set(NAMESPACE_OPENED TRUE) endif() - string(APPEND SQUIRREL_EXPORT "\n /* Allow inner classes/structs to be used as Squirrel parameters */") + string(APPEND SQUIRREL_EXPORT "\n\t/* Allow inner classes/structs to be used as Squirrel parameters */") foreach(STRUCT IN LISTS STRUCTS) dump_class_templates(${STRUCT}) endforeach() @@ -331,7 +331,7 @@ foreach(LINE IN LISTS SOURCE_LINES) else() string(APPEND SQUIRREL_EXPORT "\n") endif() - string(APPEND SQUIRREL_EXPORT "\n /* Allow ${CLS} to be used as Squirrel parameter */") + string(APPEND SQUIRREL_EXPORT "\n\t/* Allow ${CLS} to be used as Squirrel parameter */") dump_class_templates(${CLS}) string(APPEND SQUIRREL_EXPORT "\n} // namespace SQConvert") @@ -347,17 +347,17 @@ foreach(LINE IN LISTS SOURCE_LINES) # Then do the registration functions of the class. string(APPEND SQUIRREL_EXPORT "\nvoid SQ${API_CLS}_Register(Squirrel &engine)") string(APPEND SQUIRREL_EXPORT "\n{") - string(APPEND SQUIRREL_EXPORT "\n DefSQClass<${CLS}, ScriptType::${APIUC}> SQ${API_CLS}(\"${API_CLS}\");") + string(APPEND SQUIRREL_EXPORT "\n\tDefSQClass<${CLS}, ScriptType::${APIUC}> SQ${API_CLS}(\"${API_CLS}\");") if("${SUPER_CLS}" STREQUAL "Text") - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine);") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.PreRegister(engine);") else() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") endif() if(NOT "${SUPER_CLS}" MATCHES "^ScriptEvent" AND NOT "${CLS}" STREQUAL "ScriptEvent") if("${CLS_PARAM_2}" STREQUAL "v") - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.AddSQAdvancedConstructor(engine);") else() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddConstructor(engine, \"${CLS_PARAM_2}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.AddConstructor(engine, \"${CLS_PARAM_2}\");") endif() endif() string(APPEND SQUIRREL_EXPORT "\n") @@ -377,7 +377,7 @@ foreach(LINE IN LISTS SOURCE_LINES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") endforeach() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${ENUM_VALUE},${SPACES}\"${ENUM_VALUE}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQConst(engine, ${CLS}::${ENUM_VALUE},${SPACES}\"${ENUM_VALUE}\");") endforeach() if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") @@ -398,7 +398,7 @@ foreach(LINE IN LISTS SOURCE_LINES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") endforeach() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${CONST_VALUE},${SPACES}\"${CONST_VALUE}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQConst(engine, ${CLS}::${CONST_VALUE},${SPACES}\"${CONST_VALUE}\");") endforeach() if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") @@ -424,7 +424,7 @@ foreach(LINE IN LISTS SOURCE_LINES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") endforeach() - string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMap(${ENUM_STRING},${SPACES}${CLS}::${ENUM_ERROR});") + string(APPEND SQUIRREL_EXPORT "\n\tScriptError::RegisterErrorMap(${ENUM_STRING},${SPACES}${CLS}::${ENUM_ERROR});") endforeach() if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") @@ -445,7 +445,7 @@ foreach(LINE IN LISTS SOURCE_LINES) foreach(i RANGE ${LEN}) string(APPEND SPACES " ") endforeach() - string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMapString(${CLS}::${ENUM_ERROR_TO_STRING},${SPACES}\"${ENUM_ERROR_TO_STRING}\");") + string(APPEND SQUIRREL_EXPORT "\n\tScriptError::RegisterErrorMapString(${CLS}::${ENUM_ERROR_TO_STRING},${SPACES}\"${ENUM_ERROR_TO_STRING}\");") endforeach() if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") @@ -479,9 +479,9 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SPACES " ") endforeach() if("${TYPES}" STREQUAL "v") - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQAdvancedStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") else() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}\"${TYPES}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}\"${TYPES}\");") endif() endforeach() if(MLEN) @@ -516,16 +516,16 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SPACES " ") endforeach() if("${TYPES}" STREQUAL "v") - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQAdvancedMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") else() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}\"${TYPES}\");") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.DefSQMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}\"${TYPES}\");") endif() endforeach() if(MLEN) string(APPEND SQUIRREL_EXPORT "\n") endif() - string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PostRegister(engine);") + string(APPEND SQUIRREL_EXPORT "\n\tSQ${API_CLS}.PostRegister(engine);") string(APPEND SQUIRREL_EXPORT "\n}") reset_reader() @@ -548,7 +548,7 @@ foreach(LINE IN LISTS SOURCE_LINES) # Add enums if(IN_ENUM) - string(REGEX MATCH "([^, ]+)" ENUM_VALUE "${LINE}") + string(REGEX MATCH "([^,\t ]+)" ENUM_VALUE "${LINE}") list(APPEND ENUM_VALUES "${ENUM_VALUE}") # Check if this a special error enum @@ -556,12 +556,12 @@ foreach(LINE IN LISTS SOURCE_LINES) if("${ENUM}" MATCHES ".*::ErrorMessages") # syntax: # enum ErrorMessages { - # ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] + #\tERR_SOME_ERROR,\t// [STR_ITEM1, STR_ITEM2, ...] # } # Set the mappings if("${LINE}" MATCHES "\\[(.*)\\]") - string(REGEX REPLACE "[ ]" "" MAPPINGS "${CMAKE_MATCH_1}") + string(REGEX REPLACE "[ \t]" "" MAPPINGS "${CMAKE_MATCH_1}") string(REPLACE "," ";" MAPPINGS "${MAPPINGS}") foreach(MAPPING IN LISTS MAPPINGS) @@ -579,11 +579,11 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() # Add a const (non-enum) value - if("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + if("${LINE}" MATCHES "^[ \t]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") continue() endif() - if("${LINE}" MATCHES "^[ ]*static constexpr [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + if("${LINE}" MATCHES "^[ \t]*static constexpr [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") continue() endif() @@ -606,7 +606,7 @@ foreach(LINE IN LISTS SOURCE_LINES) set(IS_STATIC TRUE) endif() - string(REGEX REPLACE "(virtual|static|const)[ ]+" "" LINE "${LINE}") + string(REGEX REPLACE "(virtual|static|const)[ \t]+" "" LINE "${LINE}") string(REGEX REPLACE "{.*" "" LINE "${LINE}") set(PARAM_S "${LINE}") string(REGEX REPLACE "\\*" "" LINE "${LINE}") @@ -617,7 +617,7 @@ foreach(LINE IN LISTS SOURCE_LINES) string(REGEX REPLACE "\\).*" "" PARAM_S "${PARAM_S}") string(REGEX REPLACE "^\\(" "" PARAM_S "${PARAM_S}") - string(REGEX MATCH "([^ ]+)( ([^ ]+))?" RESULT "${LINE}") + string(REGEX MATCH "([^ \t]+)( ([^ ]+))?" RESULT "${LINE}") set(FUNCTYPE "${CMAKE_MATCH_1}") set(FUNCNAME "${CMAKE_MATCH_3}") if("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) @@ -631,7 +631,7 @@ foreach(LINE IN LISTS SOURCE_LINES) endif() elseif(NOT FUNCNAME) continue() - endif() + endif() string(REPLACE "," ";" PARAMS "${PARAM_S}") if(IS_STATIC)