You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.3 KiB
103 lines
3.3 KiB
# 1. Concatenate all PDE files |
|
# 2. Write #include "WProgram.h" |
|
# 3. Write prototypes |
|
# 4. Write original sources |
|
# |
|
# |
|
# Prefix Writer |
|
# 1. Scrub comments |
|
# 2. Optionally subsitute Unicode |
|
# 3. Find imports |
|
# 4. Find prototypes |
|
# |
|
# Find prototypes |
|
# 1. Strip comments, quotes, preprocessor directives |
|
# 2. Collapse braches |
|
# 3. Regex |
|
|
|
|
|
set(SINGLE_QUOTES_REGEX "('.')") |
|
set(DOUBLE_QUOTES_REGEX "(\"([^\"\\\\]|\\\\.)*\")") |
|
set(SINGLE_COMMENT_REGEX "([ ]*//[^\n]*)") |
|
set(MULTI_COMMENT_REGEX "(/[*][^/]*[*]/)") |
|
set(PREPROC_REGEX "([ ]*#(\\\\[\n]|[^\n])*)") |
|
|
|
#"[\w\[\]\*]+\s+[&\[\]\*\w\s]+\([&,\[\]\*\w\s]*\)(?=\s*\{)" |
|
set(PROTOTPYE_REGEX "([a-zA-Z0-9]+[ ]*)*[a-zA-Z0-9]+[ ]*\([^{]*\)[ ]*{") |
|
|
|
function(READ_SKETCHES VAR_NAME ) |
|
set(SKETCH_SOURCE) |
|
foreach(SKETCH ${ARGN}) |
|
if(EXISTS ${SKETCH}) |
|
message(STATUS "${SKETCH}") |
|
file(READ ${SKETCH} SKETCH_CONTENTS) |
|
set(SKETCH_SOURCE "${SKETCH_SOURCE}\n${SKETCH_CONTENTS}") |
|
else() |
|
message(FATAL_ERROR "Sketch file does not exist: ${SKETCH}") |
|
endif() |
|
endforeach() |
|
set(${VAR_NAME} "${SKETCH_SOURCE}" PARENT_SCOPE) |
|
endfunction() |
|
|
|
function(STRIP_SOURCES VAR_NAME SOURCES) |
|
string(REGEX REPLACE "${SINGLE_QUOTES_REGEX}|${DOUBLE_QUOTES_REGEX}|${SINGLE_COMMENT_REGEX}|${MULTI_COMMENT_REGEX}|${PREPROC_REGEX}" |
|
"" |
|
SOURCES |
|
"${SOURCES}") |
|
set(${VAR_NAME} "${SOURCES}" PARENT_SCOPE) |
|
endfunction() |
|
|
|
function(COLLAPSE_BRACES VAR_NAME SOURCES) |
|
set(PARSED_SOURCES) |
|
string(LENGTH "${SOURCES}" SOURCES_LENGTH) |
|
math(EXPR SOURCES_LENGTH "${SOURCES_LENGTH}-1") |
|
|
|
set(NESTING 0) |
|
set(START 0) |
|
foreach(INDEX RANGE ${SOURCES_LENGTH}) |
|
string(SUBSTRING "${SOURCES}" ${INDEX} 1 CURRENT_CHAR) |
|
#message("${CURRENT_CHAR}") |
|
if(CURRENT_CHAR STREQUAL "{") |
|
if(NESTING EQUAL 0) |
|
math(EXPR SUBLENGTH "${INDEX}-${START} +1") |
|
string(SUBSTRING "${SOURCES}" ${START} ${SUBLENGTH} CURRENT_CHUNK) |
|
set(PARSED_SOURCES "${PARSED_SOURCES}${CURRENT_CHUNK}") |
|
#message("INDEX: ${INDEX} START: ${START} LENGTH: ${SUBLENGTH}") |
|
endif() |
|
math(EXPR NESTING "${NESTING}+1") |
|
elseif(CURRENT_CHAR STREQUAL "}") |
|
math(EXPR NESTING "${NESTING}-1") |
|
if(NESTING EQUAL 0) |
|
set(START ${INDEX}) |
|
endif() |
|
endif() |
|
endforeach() |
|
|
|
math(EXPR SUBLENGTH "${SOURCES_LENGTH}-${START} +1") |
|
string(SUBSTRING "${SOURCES}" ${START} ${SUBLENGTH} CURRENT_CHUNK) |
|
set(PARSED_SOURCES "${PARSED_SOURCES}${CURRENT_CHUNK}") |
|
|
|
set(${VAR_NAME} "${PARSED_SOURCES}" PARENT_SCOPE) |
|
endfunction() |
|
|
|
function(extract_prototypes VAR_NAME SOURCES) |
|
string(REGEX MATCHALL "${PROTOTPYE_REGEX}" |
|
SOURCES |
|
"${SOURCES}") |
|
set(${VAR_NAME} "${SOURCES}" PARENT_SCOPE) |
|
endfunction() |
|
|
|
read_sketches(SKETCH_SOURCE ${FILES}) |
|
strip_sources(SKETCH_SOURCE "${SKETCH_SOURCE}") |
|
collapse_braces(SKETCH_SOURCE "${SKETCH_SOURCE}") |
|
extract_prototypes(SKETCH_SOURCE "${SKETCH_SOURCE}") |
|
|
|
|
|
|
|
|
|
message("===============") |
|
foreach(ENTRY ${SKETCH_SOURCE}) |
|
message("START]]]${ENTRY}[[[END") |
|
endforeach() |
|
message("===============") |
|
#message("${SKETCH_SOURCE}")
|
|
|