Files
c-prime/source/fileManager.c
2025-11-17 10:28:09 +01:00

431 lines
7.7 KiB
C

#include "fileManager.h"
array * fileManager_composeFiles( array * includedFilePaths ) {
int FileNameCount = array_length( includedFilePaths );
struct array * files = array_new();
for ( int i = 0; i < FileNameCount; ++i )
{
char * filePath = array_get( includedFilePaths, i );
struct file * fileInstance = file_new();
fileInstance->filename = basename( text_copy( filePath ) );
fileInstance->dirname = dirname( text_copy( filePath ) );
if( filePath[0] == 47 ) {
memmove( filePath, filePath + 1, strlen( filePath ) );
}
fileInstance->path = filePath;
printf("basename: %s\n\n", fileInstance->filename);
fileInstance->source = file_getSource( text_copy( fileInstance->path ) );
array_add( files, fileInstance );
}
return files;
}
void fileManager_removeComments( array * files ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_removeComments( fileInstance );
}
}
struct file * fileManager_getFileByPath( array * files, char * filePath ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
//printf("compare: %s \n", fileInstance->path);
if( strcmp( fileInstance->path, filePath ) == 0 ) {
return fileInstance;
}
}
return NULL;
}
bool array_includes( array * processedFiles, char * value ) {
int count = array_length( processedFiles );
for (int i = 0; i < count; ++i)
{
char * currentValue = array_get( processedFiles, i );
if ( strcmp( value, currentValue ) == 0 )
{
return true;
}
}
return false;
}
/*
void file_fixIncudes( struct file * currentFile, array * files, array * processedFiles ) {
int includeCount = array_length( currentFile->includes );
printf("entering %s \n\n", currentFile->filename );
for (int i = 0; i < includeCount; ++i)
{
struct include * includeInstance = array_get( currentFile->includes, i );
char * includePath = file_getFileNameFromIncludeFixed( includeInstance->path );
char * includeFileBaseName = file_removeExtensionFromFileName( includePath );
//char * includePath = includeInstance->path;
struct text * relativePath = text_new( currentFile->dirname );
text_append( relativePath, "/" );
text_append( relativePath, includeFileBaseName );
char * resolvedPath = resolve( relativePath->value );
//printf("%s \n", resolvedPath );
struct file * fileInstance = fileManager_getFileByPath( files, resolvedPath );
if( fileInstance != NULL ) {
if( !array_includes( processedFiles, resolvedPath ) ) {
printf(" adding %s to %s \n\n", resolve( relativePath->value ), currentFile->filename );
includeInstance->enabled = true;
array_set( currentFile->includes, i, includeInstance );
array_add( processedFiles, resolvedPath );
file_fixIncudes( fileInstance, files, processedFiles );
}
}
}
}
void fileManager_fixIncludes( array * files ) {
printf("\n\n\n\n\n Fix includes \n\n\n\n");
struct file * rootFile = array_get( files, 0 );
struct array * processedFiles = array_new();
printf(" rootFile: %s\n\n\n", rootFile->filename);
file_fixIncudes( rootFile, files, processedFiles );
printf("\n\n");
//exit( 0 );
}
*/
void fileManager_extractMacros( array * files ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_extractMacros( fileInstance );
}
}
void fileManager_parseMacros( array * files ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
char * source = fileInstance->source;
//file_parseMacros( fileInstance, files );
}
}
void fileManager_extractClasses( array * files, struct application * applicationInstance ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
char * source = fileInstance->source;
file_extractClasses( fileInstance );
}
}
void fileManager_validateCurlyBrackets( array * files ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
char * source = fileInstance->source;
text_validateCurlyBrackets( source );
}
}
void fileManager_extractMethodsAndProperties( array * files ) {
printf( "\n" );
console_logColor( "\n\n\nDone.\n\n\n", "green" );
console_logColor( " 2. Extract Methods and Properties.\n\n", "yellow" );
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_extractMethodsAndProperties( fileInstance );
}
}
void fileManager_extractFunctions( array * files ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_extractFunctions( fileInstance );
}
}
void fileManager_parseMethods( array * files ) {
printf( ANSI_COLOR_GREEN "\n\n\nDone.\n\n\n" ANSI_COLOR_RESET );
printf( ANSI_COLOR_BRIGHT_YELLOW " 3. Parse Method bodies.\n\n" ANSI_COLOR_RESET);
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
printf("%s.c:\n\n", fileInstance->path);
printf(" Classes:\n\n");
file_parseMethods( fileInstance, files );
//printf(" Functions:\n\n");
}
}
void fileManager_parseFunctions( array * files ) {
printf( ANSI_COLOR_BRIGHT_YELLOW " 4. Parse Function bodies.\n\n" ANSI_COLOR_RESET);
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
printf("file: %s\n", fileInstance->filename);
file_parseFunctions( fileInstance, files );
}
}
void fileManager_extendClasses( array * files ) {
int fileCount = array_length( files );
printf( "\n" );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_extendClasses( fileInstance );
}
}
void fileManager_extractTemplates( array * files ) {
printf("\n\n\n\n\n\n 5. Extract templates\n\n\n\n\n\n\n");
int fileCount = array_length( files );
printf( "\n" );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_extractTemplates( fileInstance );
}
}
void fileManager_instantiateTemplates( array * files ) {
printf("\n\n\n\n\n\n file_instanciateTemplates\n\n\n\n\n\n\n");
int fileCount = array_length( files );
printf( "\n" );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
file_instanciateTemplates( fileInstance );
}
}
int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}
void fileManager_removeFilesFromOutputDirectory( struct array * files, struct application * currentApplication ) {
char * outputDirectory = currentApplication->output;
printf("Delete directory: %s\n\n\n\n", outputDirectory);
nftw( outputDirectory, unlink_cb, 64, FTW_DEPTH | FTW_PHYS );
fileSystem_ensureDirectory( outputDirectory );
}
void fileManager_composeSourceAndHeaderFiles( struct array * files, struct application * currentApplication ) {
int fileCount = array_length( files );
for (int i = 0; i < fileCount; ++i)
{
struct file * fileInstance = array_get( files, i );
//printf("before crash: %s\n\n\n\n", fileInstance->filename);
file_compose( fileInstance, currentApplication );
}
}