JSON-js IOT -立哥开发

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()

猜你喜欢

转载自blog.csdn.net/weixin_45806384/article/details/106974396
IOT