108 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | string (REPLACE " " ";" FILES ${FILES}) # make back into a list | ||
|  | 
 | ||
|  | function(JOIN VALUES GLUE OUTPUT) | ||
|  |   string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}") | ||
|  |   string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping | ||
|  |   set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) | ||
|  | endfunction() | ||
|  | 
 | ||
|  | function (indent) | ||
|  |   foreach (temp RANGE ${level}) | ||
|  |     file (APPEND ${contents_file} "  ") | ||
|  |   endforeach () | ||
|  | endfunction () | ||
|  | 
 | ||
|  | function (end_entry) | ||
|  |   file (APPEND ${contents_file} "\n") | ||
|  |   set(first 0 PARENT_SCOPE) | ||
|  |   math (EXPR level "${level} - 1") | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "]\n") | ||
|  |   math (EXPR level "${level} - 2") | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "}") | ||
|  |   string (FIND "${dirs}" "${cwd}" pos) | ||
|  |   set (level ${level} PARENT_SCOPE) | ||
|  | endfunction () | ||
|  | 
 | ||
|  | file (WRITE ${contents_file} "[") | ||
|  | set (cwd) | ||
|  | set (level 0) | ||
|  | set (first 1) | ||
|  | list (SORT FILES) | ||
|  | foreach (file IN LISTS FILES) | ||
|  |   string (REGEX MATCHALL "[^/]*/" dirs "${file}") | ||
|  |   string (REPLACE "/" "" dirs "${dirs}") | ||
|  |   string (REGEX MATCH "[^/]*$" name "${file}") | ||
|  |   string (FIND "${dirs}" "${cwd}" pos) | ||
|  |   list (LENGTH cwd cwd_count) | ||
|  |   if (${pos} EQUAL 0) | ||
|  |     # same root | ||
|  |     while (${cwd_count} GREATER 0) | ||
|  |       list (REMOVE_AT dirs 0) | ||
|  |       math (EXPR cwd_count "${cwd_count} - 1") | ||
|  |     endwhile () | ||
|  |   else () | ||
|  |     # reduce cwd until matched | ||
|  |     while ((NOT ${pos} EQUAL 0) AND ${cwd_count} GREATER 0) | ||
|  |       math (EXPR cwd_count "${cwd_count} - 1") | ||
|  |       list (REMOVE_AT cwd ${cwd_count}) | ||
|  |       string (FIND "${dirs}" "${cwd}" pos) | ||
|  |       end_entry () | ||
|  |     endwhile () | ||
|  |     # back to same root | ||
|  |     while (${cwd_count} GREATER 0) | ||
|  |       list (REMOVE_AT dirs 0) | ||
|  |       math (EXPR cwd_count "${cwd_count} - 1") | ||
|  |     endwhile () | ||
|  |   endif () | ||
|  |   list (LENGTH cwd cwd_count) | ||
|  |   list (LENGTH dirs path_count) | ||
|  |   while (${path_count} GREATER 0) | ||
|  |     list (GET dirs 0 dir) | ||
|  |     list (APPEND cwd "${dir}") | ||
|  |     list (REMOVE_AT dirs 0) | ||
|  |     if (${first}) | ||
|  |       file (APPEND ${contents_file} "\n") | ||
|  |       set (first 0) | ||
|  |     else () | ||
|  |       file (APPEND ${contents_file} ",\n") | ||
|  |     endif () | ||
|  |     indent () | ||
|  |     file (APPEND ${contents_file} "{\n") | ||
|  |     math (EXPR level "${level} + 1") | ||
|  |     indent () | ||
|  |     file (APPEND ${contents_file} "\"type\": \"directory\",\n") | ||
|  |     indent () | ||
|  |     file (APPEND ${contents_file} "\"name\":  \"${dir}\",\n") | ||
|  |     indent () | ||
|  |     file (APPEND ${contents_file} "\"entries\": [") | ||
|  |     set (first 1) | ||
|  |     math (EXPR level "${level} + 2") | ||
|  |     math (EXPR path_count "${path_count} - 1") | ||
|  |   endwhile () | ||
|  |   JOIN ("${cwd}" "/" path) | ||
|  |   file (COPY "${file}" DESTINATION "${DEST}/web/samples/${path}") | ||
|  |   if (${first}) | ||
|  |     file (APPEND ${contents_file} "\n") | ||
|  |     set (first 0) | ||
|  |   else () | ||
|  |     file (APPEND ${contents_file} ",\n") | ||
|  |   endif () | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "{\n") | ||
|  |   math (EXPR level "${level} + 1") | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "\"type\": \"file\",\n") | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "\"name\": \"${name}\"\n") | ||
|  |   math (EXPR level "${level} - 1") | ||
|  |   indent () | ||
|  |   file (APPEND ${contents_file} "}") | ||
|  |   set (first 0) | ||
|  | endforeach () | ||
|  | if (${level} GREATER 1) | ||
|  |   end_entry () | ||
|  | endif () | ||
|  | file (APPEND ${contents_file} "\n]\n") |