/* * CIntendation.c * Intender * * Created by Lucas on 20/01/2007. * Distributed under the GNU General Public Licence * */ #include "CIntendation.h" #include "Utilities.h" #include #include #include #define NO 0 #define YES 1 typedef enum { black = 0, red = 1, blue = 2, green = 3, blockGreen = 4, string = 5 } Color; /* -ed- ajoute const */ static unsigned char stringIsEqualToString (char const *str1, char const *str2) { if ((str1 == NULL) && (str2 == NULL)) return YES; if (str1 == NULL) return NO; if (str2 == NULL) return NO; if (strlen (str1) != strlen (str2)) return NO; /* -ed- mis les types en conformite */ size_t len = strlen (str1); size_t i; for (i = 0; i < len; i++) { if (str1[i] != str2[i]) return NO; } return YES; } /* -ed- des globales ? Quelle horreur ! ajoute 'static' et g_, c'est le minimum legal !) */ static char *g_stringToReturn; static char *currentWord; static Color currentColor; /* -ed- un parametre de type 'char' est inutile. C'est 'int' miniumum */ void breakWordAndAddChar (int chr) { #pragma mark "//" if (stringIsEqualToString (currentWord, "//") == YES) { if ((currentColor != black) && (currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) g_stringToReturn = strFromStrings (g_stringToReturn, ""); if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "//"); currentColor = green; } else { g_stringToReturn = strFromStrings (g_stringToReturn, "//"); } currentWord = NULL; #pragma mark "/ *" /* -ed ca trouble mon colorateur syntaxique. Ajoute un ' ' */ } else if (stringIsEqualToString (currentWord, "/*") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != black) && (currentColor != string) && (currentColor != blue)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); } if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = blockGreen; } g_stringToReturn = strFromStrings (g_stringToReturn, "/*"); currentWord = NULL; #pragma mark "*/" } else if (stringIsEqualToString (currentWord, "*/") == YES) { g_stringToReturn = strFromStrings (g_stringToReturn, "*/"); if (currentColor == blockGreen) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = black; } currentWord = NULL; #pragma mark "if" } else if (stringIsEqualToString (currentWord, "if") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "if"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "if"); } currentWord = NULL; #pragma mark "else" } else if (stringIsEqualToString (currentWord, "else") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "else"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "else"); } currentWord = NULL; #pragma mark "switch" } else if (stringIsEqualToString (currentWord, "switch") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "switch"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "switch"); } currentWord = NULL; #pragma mark "case" } else if (stringIsEqualToString (currentWord, "case") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "case"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "case"); } currentWord = NULL; #pragma mark "break" } else if (stringIsEqualToString (currentWord, "break") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "break"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "break"); } currentWord = NULL; #pragma mark "default" } else if (stringIsEqualToString (currentWord, "default") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "default"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "default"); } currentWord = NULL; #pragma mark "NULL" } else if (stringIsEqualToString (currentWord, "NULL") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "NULL"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "NULL"); } currentWord = NULL; #pragma mark "for" } else if (stringIsEqualToString (currentWord, "for") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "for"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "for"); } currentWord = NULL; #pragma mark "while" } else if (stringIsEqualToString (currentWord, "while") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "while"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "while"); } currentWord = NULL; #pragma mark "return" } else if (stringIsEqualToString (currentWord, "return") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "return"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "return"); } currentWord = NULL; #pragma mark "const" } else if (stringIsEqualToString (currentWord, "const") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "const"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "const"); } currentWord = NULL; #pragma mark "static" } else if (stringIsEqualToString (currentWord, "static") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "static"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "static"); } currentWord = NULL; #pragma mark "unsigned" } else if (stringIsEqualToString (currentWord, "unsigned") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "unsigned"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "unsigned"); } currentWord = NULL; #pragma mark "char" } else if (stringIsEqualToString (currentWord, "char") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "char"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "char"); } currentWord = NULL; #pragma mark "short" } else if (stringIsEqualToString (currentWord, "short") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "short"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "short"); } currentWord = NULL; #pragma mark "int" } else if (stringIsEqualToString (currentWord, "int") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "int"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "int"); } currentWord = NULL; #pragma mark "long" } else if (stringIsEqualToString (currentWord, "long") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "long"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "long"); } currentWord = NULL; #pragma mark "double" } else if (stringIsEqualToString (currentWord, "double") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "double"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "double"); } currentWord = NULL; #pragma mark "float" } else if (stringIsEqualToString (currentWord, "float") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "float"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "float"); } currentWord = NULL; #pragma mark "void" } else if (stringIsEqualToString (currentWord, "void") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "void"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "void"); } currentWord = NULL; #pragma mark "sizeof" } else if (stringIsEqualToString (currentWord, "sizeof") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "sizeof"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "sizeof"); } currentWord = NULL; #pragma mark "typedef" } else if (stringIsEqualToString (currentWord, "typedef") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "typedef"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "typedef"); } currentWord = NULL; #pragma mark "enum" } else if (stringIsEqualToString (currentWord, "enum") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "enum"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "enum"); } currentWord = NULL; #pragma mark "struct" } else if (stringIsEqualToString (currentWord, "struct") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "struct"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "struct"); } currentWord = NULL; #pragma mark "union" } else if (stringIsEqualToString (currentWord, "union") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "union"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "union"); } currentWord = NULL; #pragma mark "extern" } else if (stringIsEqualToString (currentWord, "extern") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "extern"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "extern"); } currentWord = NULL; #pragma mark "nil" } else if (stringIsEqualToString (currentWord, "nil") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "nil"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "nil"); } currentWord = NULL; #pragma mark "IBOutlet" } else if (stringIsEqualToString (currentWord, "IBOutlet") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "IBOutlet"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "IBOutlet"); } currentWord = NULL; #pragma mark "IBAction" } else if (stringIsEqualToString (currentWord, "IBAction") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "IBAction"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "IBAction"); } currentWord = NULL; #pragma mark "@implementation" } else if (stringIsEqualToString (currentWord, "@implementation") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@implementation"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@implementation"); } currentWord = NULL; #pragma mark "@interface" } else if (stringIsEqualToString (currentWord, "@interface") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@interface"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@interface"); } currentWord = NULL; #pragma mark "@end" } else if (stringIsEqualToString (currentWord, "@end") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@end"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@end"); } currentWord = NULL; #pragma mark "@class" } else if (stringIsEqualToString (currentWord, "@class") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@class"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@class"); } currentWord = NULL; #pragma mark "@private" } else if (stringIsEqualToString (currentWord, "@private") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@private"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@private"); } currentWord = NULL; #pragma mark "@protected" } else if (stringIsEqualToString (currentWord, "@protected") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@protected"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@protected"); } currentWord = NULL; #pragma mark "@public" } else if (stringIsEqualToString (currentWord, "@public") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "@public"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "@public"); } currentWord = NULL; #pragma mark "BOOL" } else if (stringIsEqualToString (currentWord, "BOOL") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "BOOL"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "BOOL"); } currentWord = NULL; #pragma mark "self" } else if (stringIsEqualToString (currentWord, "self") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "self"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "self"); } currentWord = NULL; #pragma mark "super" } else if (stringIsEqualToString (currentWord, "super") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "super"); } else { g_stringToReturn = strFromStrings (g_stringToReturn, "super"); } currentWord = NULL; #pragma mark autres... } else { g_stringToReturn = strFromStrings (g_stringToReturn, currentWord); currentWord = NULL; } if (chr == '<') { g_stringToReturn = strFromStrings (g_stringToReturn, "<"); } else if (chr == '>') { g_stringToReturn = strFromStrings (g_stringToReturn, ">"); } else if (chr == '&') { g_stringToReturn = strFromStrings (g_stringToReturn, "&"); } else if (chr == '\t') { g_stringToReturn = strFromStrings (g_stringToReturn, " "); } else { /* -ed- conversion de chr en chaine */ char chaine[2] = { chr }; g_stringToReturn = strFromStrings (g_stringToReturn, chaine); } } void addBasicLetterToWord (int chr) { char chaine[2] = { chr }; currentWord = strFromStrings (currentWord, chaine); #pragma mark "//" if (stringIsEqualToString (currentWord, "//") == YES) { if ((currentColor != black) && (currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) g_stringToReturn = strFromStrings (g_stringToReturn, ""); if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, "//"); currentColor = green; } else { g_stringToReturn = strFromStrings (g_stringToReturn, "//"); } currentWord = NULL; #pragma mark "/ *" } else if (stringIsEqualToString (currentWord, "/*") == YES) { if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != black) && (currentColor != string) && (currentColor != blue)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); } if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = blockGreen; } g_stringToReturn = strFromStrings (g_stringToReturn, "/*"); currentWord = NULL; #pragma mark "*/" } else if ((stringIsEqualToString (currentWord, "*/") == YES) #if 0 /* -ed- fonction inconnue */ || (strcasestr (currentWord, "*/") != NULL) #endif ) { g_stringToReturn = strFromStrings (g_stringToReturn, currentWord); if (currentColor == blockGreen) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = black; } currentWord = NULL; } } void treatChar (int aChr) { switch (aChr) { case ' ': breakWordAndAddChar (' '); break; case '\n': breakWordAndAddChar (' '); if ((currentColor != black) && (currentColor != blockGreen)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = black; } g_stringToReturn = strFromStrings (g_stringToReturn, "\n "); break; case '\t': breakWordAndAddChar ('\t'); break; case '\'': if ((currentColor != green) && (currentColor != blockGreen)) { if (currentColor == blue) { breakWordAndAddChar ('\''); g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = black; } else { g_stringToReturn = strFromStrings (g_stringToReturn, ""); breakWordAndAddChar ('\''); currentColor = blue; } } else { breakWordAndAddChar ('\''); } break; case '\"': if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != red)) { if (currentColor == string) { breakWordAndAddChar ('\"'); g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = black; } else { g_stringToReturn = strFromStrings (g_stringToReturn, ""); breakWordAndAddChar ('\"'); currentColor = string; } } else { breakWordAndAddChar ('\"'); } break; case '#': if ((currentColor != green) && (currentColor != blockGreen) && (currentColor != string)) { g_stringToReturn = strFromStrings (g_stringToReturn, ""); currentColor = red; } breakWordAndAddChar ('#'); break; case '<': breakWordAndAddChar ('<'); break; case '>': breakWordAndAddChar ('>'); break; case '(': breakWordAndAddChar ('('); break; case ')': breakWordAndAddChar (')'); break; case '{': breakWordAndAddChar ('{'); break; case '}': breakWordAndAddChar ('}'); break; case '[': breakWordAndAddChar ('['); break; case ']': breakWordAndAddChar (']'); break; case ':': breakWordAndAddChar (':'); break; case ';': breakWordAndAddChar (';'); break; case '-': breakWordAndAddChar ('-'); break; case '+': breakWordAndAddChar ('+'); break; case '=': breakWordAndAddChar ('='); break; case ',': breakWordAndAddChar (','); break; default: addBasicLetterToWord (aChr); break; } } char *intendedHTMLCodeFromString (char const *aString) { currentWord = NULL; currentColor = black; g_stringToReturn = strFromStrings (NULL, "\n// Intended and colored by Intender - Copyright 2006-2007 Spootnik-Dev\n// http://spootnikdev.dyndns.org/\n"); if (g_stringToReturn != NULL) { printf ("%s", g_stringToReturn); } /* -ed- mis les bons types */ size_t len = strlen (aString); size_t i; printf("%lu caracters to be processed\n", (unsigned long) len); for (i = 0; i < len; i++) { treatChar (aString[i]); } treatChar ('\n'); return g_stringToReturn; }