/*--------------------------------------------------------------------------*/ char *completelineforjava(char *currentLine,char *stringToAdd,BOOL isFile, char *postCaretLine) { char *assembledLine = NULL; char *patternFile = getFilePartLevel(currentLine); char *patternLine = getPartLevel(currentLine); assembledLine = completeLine(currentLine,stringToAdd,patternFile,patternLine,isFile, postCaretLine); if (patternFile) {FREE(patternFile); patternFile = NULL;} if (patternLine) {FREE(patternLine); patternLine = NULL;} return assembledLine; }
static void doCompletion(char *wk_buf, unsigned int *cursor, unsigned int *cursor_max) { char *LineBeforeCaret = getLineBeforeCaret(wk_buf, cursor); char *LineAfterCaret = getLineAfterCaret(wk_buf, cursor, cursor_max); char *fileSearchedPattern = getFilePartLevel(LineBeforeCaret); char *SearchedPattern = getPartLevel(LineBeforeCaret); char **completionDictionaryFiles = NULL; int sizecompletionDictionaryFiles = 0; completionDictionaryFiles = completionOnFiles(fileSearchedPattern, &sizecompletionDictionaryFiles); if (completionDictionaryFiles) { TermCompletionOnFiles(completionDictionaryFiles, sizecompletionDictionaryFiles, LineBeforeCaret, LineAfterCaret, fileSearchedPattern, SearchedPattern, wk_buf, cursor, cursor_max); freeArrayOfString(completionDictionaryFiles, sizecompletionDictionaryFiles); } else { TermCompletionOnAll(LineBeforeCaret, LineAfterCaret, SearchedPattern, wk_buf, cursor, cursor_max); } if (LineBeforeCaret) { FREE(LineBeforeCaret); LineBeforeCaret = NULL; } if (LineAfterCaret) { FREE(LineAfterCaret); LineAfterCaret = NULL; } if (fileSearchedPattern) { FREE(fileSearchedPattern); fileSearchedPattern = NULL; } if (SearchedPattern) { FREE(SearchedPattern); SearchedPattern = NULL; } }
/*--------------------------------------------------------------------------*/ int sci_getfilepartlevel(char *fname, unsigned long fname_len) { CheckRhs(1, 1); CheckLhs(1, 1); if (GetType(1) == sci_strings) { int m = 0, n = 0; char **InputString = NULL; GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &m, &n, &InputString); if ( (m == 1) && (n == 1) ) { char *result = NULL; result = getFilePartLevel(InputString[0]); if (result == NULL) { int l = 0; m = 0, n = 0; CreateVar(Rhs + 1, STRING_DATATYPE, &m, &n, &l); } else { n = 1; CreateVarFromPtr(Rhs + 1, STRING_DATATYPE, (m = (int)strlen(result), &m), &n, &result); if (result) { FREE(result); result = NULL; } } LhsVar(1) = Rhs + 1; } else { freeArrayOfString(InputString, m * n); Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 1); } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1); } return 0; }
/*--------------------------------------------------------------------------*/ void TermCompletion(void) { char *LineBeforeCaret = getLineBeforeCaret(); char *LineAfterCaret = getLineAfterCaret(); char *fileSearchedPattern = getFilePartLevel(LineBeforeCaret); char *SearchedPattern = getPartLevel(LineBeforeCaret); char **completionDictionaryFiles = NULL; int sizecompletionDictionaryFiles = 0; completionDictionaryFiles = completionOnFiles(fileSearchedPattern, &sizecompletionDictionaryFiles); if (completionDictionaryFiles) { TermCompletionOnFiles(completionDictionaryFiles, sizecompletionDictionaryFiles, LineBeforeCaret, LineAfterCaret, fileSearchedPattern, SearchedPattern); freeArrayOfString(completionDictionaryFiles, sizecompletionDictionaryFiles); } else { TermCompletionOnAll(LineBeforeCaret, LineAfterCaret, SearchedPattern); } if (LineBeforeCaret) { FREE(LineBeforeCaret); LineBeforeCaret = NULL; } if (LineAfterCaret) { FREE(LineAfterCaret); LineAfterCaret = NULL; } if (fileSearchedPattern) { FREE(fileSearchedPattern); fileSearchedPattern = NULL; } if (SearchedPattern) { FREE(SearchedPattern); SearchedPattern = NULL; } }
/*--------------------------------------------------------------------------*/ char *completeLine(char *currentline, char *stringToAdd, char *filePattern, char *defaultPattern, BOOL stringToAddIsPath, char *postCaretLine) { char *new_line = NULL; int lengthNewLine = 0; char *stringToAddAtTheEnd = NULL; int lenstringToAddAtTheEnd = 0; char *res = NULL; int lencurrentline = 0; int iposInsert = 0; if (currentline == NULL) { return os_strdup(""); } lencurrentline = (int)strlen(currentline); if (postCaretLine == NULL) { stringToAddAtTheEnd = os_strdup(""); lenstringToAddAtTheEnd = (int)strlen(stringToAddAtTheEnd); } else { stringToAddAtTheEnd = os_strdup(postCaretLine); lenstringToAddAtTheEnd = (int)strlen(stringToAddAtTheEnd); } if ( (stringToAdd == NULL) || (strcmp(stringToAdd, "") == 0) ) { lengthNewLine = lencurrentline + lenstringToAddAtTheEnd; new_line = (char*)MALLOC(sizeof(char) * (lengthNewLine + 1)); if (new_line) { strcpy(new_line, currentline); strcat(new_line, stringToAddAtTheEnd); } FREE(stringToAddAtTheEnd); stringToAddAtTheEnd = NULL; return new_line; } if (stringToAddIsPath == FALSE) { char *filePatternBuf = NULL; BOOL bfilePatternBuf = FALSE; if (filePattern != NULL) { filePatternBuf = filePattern; } else { filePatternBuf = getFilePartLevel(currentline); bfilePatternBuf = TRUE; } if (filePatternBuf) { char* drv = (char*)MALLOC(sizeof(char) * (PATH_MAX + 1)); char* dir = (char*)MALLOC(sizeof(char) * (PATH_MAX + 1)); char* name = (char*)MALLOC(sizeof(char) * (PATH_MAX + 1)); char* ext = (char*)MALLOC(sizeof(char) * (PATH_MAX + 1)); splitpath(filePatternBuf, TRUE, drv, dir, name, ext); if (bfilePatternBuf) { FREE(filePatternBuf); filePatternBuf = NULL; } if ( strcmp(drv, "") || strcmp(dir, "") ) { /* bug 4365 */ /*cd SCI/modules/arnoldi/nonreg_tes */ FREE(drv); drv = NULL; FREE(dir); dir = NULL; FREE(name); name = NULL; FREE(ext); ext = NULL; lengthNewLine = lencurrentline + lenstringToAddAtTheEnd; new_line = (char*)MALLOC(sizeof(char) * (lengthNewLine + 1)); if (new_line) { strcpy(new_line, currentline); strcat(new_line, stringToAddAtTheEnd); } FREE(stringToAddAtTheEnd); stringToAddAtTheEnd = NULL; return new_line; } FREE(drv); drv = NULL; FREE(dir); dir = NULL; FREE(name); name = NULL; FREE(ext); ext = NULL; } } // Does the end of line (currentLine) matches the beginning of completed word (stringToAdd) ? iposInsert = findMatchingPrefixSuffix(currentline, stringToAdd, stringToAddIsPath); res = stristr(stringToAdd, ¤tline[iposInsert]); if (res == NULL) { // No, find the last occurence of completed word word in line char* foundCompletedWordPtr = NULL; char* nextFoundCompletedWordPtr = stristr(currentline, stringToAdd); while (nextFoundCompletedWordPtr) { foundCompletedWordPtr = nextFoundCompletedWordPtr; nextFoundCompletedWordPtr = stristr(foundCompletedWordPtr + strlen(foundCompletedWordPtr), stringToAdd); } if (foundCompletedWordPtr) { iposInsert = (int) (foundCompletedWordPtr - currentline); } } // if it is a path, we add at the end if ((currentline[lencurrentline - 1] == '/') || (currentline[lencurrentline - 1] == '\\')) { iposInsert = lencurrentline; } lengthNewLine = (int)(strlen(currentline) + strlen(stringToAdd) + lenstringToAddAtTheEnd); new_line = (char*)MALLOC(sizeof(char) * (lengthNewLine + 1)); if (new_line) { strcpy(new_line, currentline); new_line[iposInsert] = 0; strcat(new_line, stringToAdd); strcat(new_line, stringToAddAtTheEnd); } FREE(stringToAddAtTheEnd); stringToAddAtTheEnd = NULL; return new_line; }