# 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}")