cmake_minimum_required(VERSION 2.9)
if (DEFINED JSonParserGuard)
return()
endif()
set(JSonParserGuard yes)
macro(sbeParseJson prefix jsonString)
cmake_policy(PUSH)
set(json_string “KaTeX parse error: Expected '}', got 'EOF' at end of input: {
{jsonString}}”)
string(LENGTH “${json_string}” json_jsonLen)
set(json_index 0)
set(json_AllVariables ${prefix})
set(json_ArrayNestingLevel 0)
set(json_MaxArrayNestingLevel 0)
_sbeParse(${prefix})
unset(json_index)
unset(json_AllVariables)
unset(json_jsonLen)
unset(json_string)
unset(json_value)
unset(json_inValue)
unset(json_name)
unset(json_inName)
unset(json_newPrefix)
unset(json_reservedWord)
unset(json_arrayIndex)
unset(json_char)
unset(json_end)
unset(json_ArrayNestingLevel)
foreach(json_nestingLevel RANGE KaTeX parse error: Expected group after '_' at position 44: … unset(json_̲{json_nestingLevel}_arrayIndex)
endforeach()
unset(json_nestingLevel)
unset(json_MaxArrayNestingLevel)
cmake_policy(POP)
endmacro()
macro(sbeClearJson prefix)
foreach(json_var KaTeX parse error: Expected '}', got 'EOF' at end of input: {
{prefix}})
unset(${json_var})
endforeach()
unset(${prefix})
unset(json_var)
endmacro()
macro(sbePrintJson prefix)
foreach(json_var KaTeX parse error: Expected '}', got 'EOF' at end of input: {
{prefix}})
message("${json_var} = KaTeX parse error: Expected '}', got 'EOF' at end of input: {
{json_var}}")
endforeach()
endmacro()
macro(_sbeParse prefix)
while(${json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
if("\"" STREQUAL "${json_char}")
_sbeParseNameValue(${prefix})
elseif("{" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
_sbeParseObject(${prefix})
elseif("[" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
_sbeParseArray(${prefix})
endif()
if(${json_index} LESS ${json_jsonLen})
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
else()
break()
endif()
if ("}" STREQUAL "${json_char}" OR "]" STREQUAL "${json_char}")
break()
endif()
_sbeMoveToNextNonEmptyCharacter()
endwhile()
endmacro()
macro(_sbeParseNameValue prefix)
set(json_name “”)
set(json_inName no)
while(${json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
# check if name ends
if("\"" STREQUAL ${json_char} AND json_inName)
set(json_inName no)
_sbeMoveToNextNonEmptyCharacter()
if(NOT ${json_index} LESS ${json_jsonLen})
break()
endif()
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
set(json_newPrefix ${prefix}.${json_name})
set(json_name "")
if(":" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
if(NOT ${json_index} LESS ${json_jsonLen})
break()
endif()
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
if("\"" STREQUAL "${json_char}")
_sbeParseValue(${json_newPrefix})
break()
elseif("{" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
_sbeParseObject(${json_newPrefix})
break()
elseif("[" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
_sbeParseArray(${json_newPrefix})
break()
else()
# reserved word starts
_sbeParseReservedWord(${json_newPrefix})
break()
endif()
else()
# name without value
list(APPEND ${json_AllVariables} ${json_newPrefix})
set(${json_newPrefix} "")
break()
endif()
endif()
if(json_inName)
# remove escapes
if("\\" STREQUAL ${json_char})
math(EXPR json_index "${json_index} + 1")
if(NOT ${json_index} LESS ${json_jsonLen})
break()
endif()
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
endif()
set(json_name "${json_name}${json_char}")
endif()
# check if name starts
if("\"" STREQUAL ${json_char} AND NOT json_inName)
set(json_inName yes)
endif()
_sbeMoveToNextNonEmptyCharacter()
endwhile()
endmacro()
macro(_sbeParseReservedWord prefix)
set(json_reservedWord “”)
set(json_end no)
while(${json_index} LESS j s o n j s o n L e n A N D N O T j s o n e n d ) s t r i n g ( S U B S T R I N G " {json_jsonLen} AND NOT json_end) string(SUBSTRING " jsonjsonLenANDNOTjsonend)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
if("," STREQUAL "${json_char}"
OR "}" STREQUAL "${json_char}"
OR "]" STREQUAL "${json_char}")
set(json_end yes)
else()
set(json_reservedWord "${json_reservedWord}${json_char}")
math(EXPR json_index "${json_index} + 1")
endif()
endwhile()
list(APPEND ${json_AllVariables} p r e f i x ) s t r i n g ( S T R I P " {prefix}) string(STRIP " prefix)string(STRIP"{json_reservedWord}" json_reservedWord)
set(${prefix} ${json_reservedWord})
endmacro()
macro(_sbeParseValue prefix)
set(json_value “”)
set(json_inValue no)
while(${json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
# check if json_value ends, it is ended by "
if("\"" STREQUAL ${json_char} AND json_inValue)
set(json_inValue no)
set(${prefix} ${json_value})
list(APPEND ${json_AllVariables} ${prefix})
_sbeMoveToNextNonEmptyCharacter()
break()
endif()
if(json_inValue)
# if " is escaped consume
if("\\" STREQUAL ${json_char})
math(EXPR json_index "${json_index} + 1")
if(NOT ${json_index} LESS ${json_jsonLen})
break()
endif()
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
if(NOT "\"" STREQUAL "${json_char}")
# if it is not " then copy also escape character
set(json_char "\\${json_char}")
endif()
endif()
set(json_value "${json_value}${json_char}")
endif()
# check if value starts
if("\"" STREQUAL ${json_char} AND NOT json_inValue)
set(json_inValue yes)
endif()
math(EXPR json_index "${json_index} + 1")
endwhile()
endmacro()
macro(_sbeParseObject prefix)
_sbeParse(${prefix})
_sbeMoveToNextNonEmptyCharacter()
endmacro()
macro(_sbeParseArray prefix)
math(EXPR json_ArrayNestingLevel "KaTeX parse error: Expected group after '_' at position 42: … 1") set(json_̲{json_ArrayNestingLevel}_arrayIndex 0)
set(${prefix} “”)
list(APPEND ${json_AllVariables} ${prefix})
while(${json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
if("\"" STREQUAL "${json_char}")
# simple value
list(APPEND ${prefix} ${json_${json_ArrayNestingLevel}_arrayIndex})
_sbeParseValue(${prefix}_${json_${json_ArrayNestingLevel}_arrayIndex})
elseif("{" STREQUAL "${json_char}")
# object
_sbeMoveToNextNonEmptyCharacter()
list(APPEND ${prefix} ${json_${json_ArrayNestingLevel}_arrayIndex})
_sbeParseObject(${prefix}_${json_${json_ArrayNestingLevel}_arrayIndex})
else()
list(APPEND ${prefix} ${json_${json_ArrayNestingLevel}_arrayIndex})
_sbeParseReservedWord(
${prefix}_${json_${json_ArrayNestingLevel}_arrayIndex})
endif()
if(NOT ${json_index} LESS ${json_jsonLen})
break()
endif()
string(SUBSTRING "${json_string}" ${json_index} 1 json_char)
if("]" STREQUAL "${json_char}")
_sbeMoveToNextNonEmptyCharacter()
break()
elseif("," STREQUAL "${json_char}")
math(EXPR json_${json_ArrayNestingLevel}_arrayIndex
"${json_${json_ArrayNestingLevel}_arrayIndex} + 1")
endif()
_sbeMoveToNextNonEmptyCharacter()
endwhile()
if(${json_MaxArrayNestingLevel} LESS ${json_ArrayNestingLevel})
set(json_MaxArrayNestingLevel j s o n A r r a y N e s t i n g L e v e l ) e n d i f ( ) m a t h ( E X P R j s o n A r r a y N e s t i n g L e v e l " {json_ArrayNestingLevel}) endif() math(EXPR json_ArrayNestingLevel " jsonArrayNestingLevel)endif()math(EXPRjsonArrayNestingLevel"{json_ArrayNestingLevel} - 1")
endmacro()
macro(_sbeMoveToNextNonEmptyCharacter)
math(EXPR json_index “ j s o n i n d e x + 1 " ) i f ( {json_index} + 1") if( jsonindex+1")if({json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}” j s o n i n d e x 1 j s o n c h a r ) w h i l e ( {json_index} 1 json_char) while( jsonindex1jsonchar)while({json_char} MATCHES “[ \t\n\r]”
AND ${json_index} LESS j s o n j s o n L e n ) m a t h ( E X P R j s o n i n d e x " {json_jsonLen}) math(EXPR json_index " jsonjsonLen)math(EXPRjsonindex"{json_index} + 1")
if(${json_index} LESS j s o n j s o n L e n ) s t r i n g ( S U B S T R I N G " {json_jsonLen}) string(SUBSTRING " jsonjsonLen)string(SUBSTRING"{json_string}" ${json_index} 1 json_char)
endif()
endwhile()
endif()
endmacro()