// // CMTextView.m // sequel-pro // // Created by Carsten BlŸm. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // More info at // Or mail to #import "CMTextView.h" @implementation CMTextView - (NSArray *)completionsForPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int *)index { NSString *partialString = [[self string] substringWithRange:charRange]; unsigned int partialLength = [partialString length]; unsigned int options = NSCaseInsensitiveSearch | NSAnchoredSearch; unsigned int i; NSRange partialRange = NSMakeRange(0, partialLength); NSMutableArray *compl = [[NSMutableArray alloc] initWithCapacity:32]; NSArray *keywords = [self keywords]; // Get the document // id tableDocument = [[[self window] windowController] document]; id tableDocument = [[self window] delegate]; //NSLog(@"doc: %@", [[[self window] windowController] document]); // Get an array of table names for the current database id tableNames = [[tableDocument valueForKeyPath:@"tablesListInstance"] valueForKey:@"tables"]; // Add matching table names to compl for (i = 0; i < [tableNames count]; i ++) { if ([[tableNames objectAtIndex:i] length] > partialLength) { NSRange range = [[tableNames objectAtIndex:i] rangeOfString:partialString options:options range:partialRange]; if (range.location != NSNotFound) { [compl addObject:[tableNames objectAtIndex:i]]; } } } // Add matching keywords to compl for (i = 0; i < [keywords count]; i ++) { if ([[keywords objectAtIndex:i] length] > partialLength) { NSRange range = [[keywords objectAtIndex:i] rangeOfString:partialString options:options range:partialRange]; if (range.location != NSNotFound) { [compl addObject:[keywords objectAtIndex:i]]; } } } return [compl autorelease]; } -(NSArray *)keywords { return [NSArray arrayWithObjects: @"ADD", @"ALL", @"ALTER", @"ANALYZE", @"AND", @"ASC", @"ASENSITIVE", @"BEFORE", @"BETWEEN", @"BIGINT", @"BINARY", @"BLOB", @"BOTH", @"CALL", @"CASCADE", @"CASE", @"CHANGE", @"CHAR", @"CHARACTER", @"CHECK", @"COLLATE", @"COLUMN", @"COLUMNS", @"CONDITION", @"CONNECTION", @"CONSTRAINT", @"CONTINUE", @"CONVERT", @"CREATE", @"CROSS", @"CURRENT_DATE", @"CURRENT_TIME", @"CURRENT_TIMESTAMP", @"CURRENT_USER", @"CURSOR", @"DATABASE", @"DATABASES", @"DAY_HOUR", @"DAY_MICROSECOND", @"DAY_MINUTE", @"DAY_SECOND", @"DEC", @"DECIMAL", @"DECLARE", @"DEFAULT", @"DELAYED", @"DELETE", @"DESC", @"DESCRIBE", @"DETERMINISTIC", @"DISTINCT", @"DISTINCTROW", @"DIV", @"DOUBLE", @"DROP", @"DUAL", @"EACH", @"ELSE", @"ELSEIF", @"ENCLOSED", @"ESCAPED", @"EXISTS", @"EXIT", @"EXPLAIN", @"FALSE", @"FETCH", @"FIELDS", @"FLOAT", @"FOR", @"FORCE", @"FOREIGN", @"FOUND", @"FROM", @"FULLTEXT", @"GOTO", @"GRANT", @"GROUP", @"HAVING", @"HIGH_PRIORITY", @"HOUR_MICROSECOND", @"HOUR_MINUTE", @"HOUR_SECOND", @"IGNORE", @"INDEX", @"INFILE", @"INNER", @"INOUT", @"INSENSITIVE", @"INSERT", @"INT", @"INTEGER", @"INTERVAL", @"INTO", @"ITERATE", @"JOIN", @"KEY", @"KEYS", @"KILL", @"LEADING", @"LEAVE", @"LEFT", @"LIKE", @"LIMIT", @"LINES", @"LOAD", @"LOCALTIME", @"LOCALTIMESTAMP", @"LOCK", @"LONG", @"LONGBLOB", @"LONGTEXT", @"LOOP", @"LOW_PRIORITY", @"MATCH", @"MEDIUMBLOB", @"MEDIUMINT", @"MEDIUMTEXT", @"MIDDLEINT", @"MINUTE_MICROSECOND", @"MINUTE_SECOND", @"MOD", @"NATURAL", @"NOT", @"NO_WRITE_TO_BINLOG", @"NULL", @"NUMERIC", @"ON", @"OPTIMIZE", @"OPTION", @"OPTIONALLY", @"ORDER", @"OUT", @"OUTER", @"OUTFILE", @"PRECISION", @"PRIMARY", @"PRIVILEGES", @"PROCEDURE", @"PURGE", @"READ", @"REAL", @"REFERENCES", @"REGEXP", @"RENAME", @"REPEAT", @"REPLACE", @"REQUIRE", @"RESTRICT", @"RETURN", @"REVOKE", @"RIGHT", @"RLIKE", @"SECOND_MICROSECOND", @"SELECT", @"SENSITIVE", @"SEPARATOR", @"SET", @"SHOW", @"SMALLINT", @"SONAME", @"SPATIAL", @"SPECIFIC", @"SQL", @"SQLEXCEPTION", @"SQLSTATE", @"SQLWARNING", @"SQL_BIG_RESULT", @"SQL_CALC_FOUND_ROWS", @"SQL_SMALL_RESULT", @"SSL", @"STARTING", @"STRAIGHT_JOIN", @"TABLE", @"TABLES", @"TERMINATED", @"THEN", @"TINYBLOB", @"TINYINT", @"TINYTEXT", @"TRAILING", @"TRIGGER", @"TRUE", @"UNDO", @"UNION", @"UNIQUE", @"UNLOCK", @"UNSIGNED", @"UPDATE", @"USAGE", @"USE", @"USING", @"UTC_DATE", @"UTC_TIME", @"UTC_TIMESTAMP", @"VALUES", @"VARBINARY", @"VARCHAR", @"VARCHARACTER", @"VARYING", @"WHEN", @"WHERE", @"WHILE", @"WITH", @"WRITE", @"XOR", @"YEAR_MONTH", @"ZEROFILL", nil]; } @end