diff options
| author | nyamatongwe <unknown> | 2009-05-14 12:10:06 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2009-05-14 12:10:06 +0000 | 
| commit | 805e109be2f52c0ea446511fc33efb3746a3bc18 (patch) | |
| tree | 3b57cf166d494a0dba47befcea94deba3da0fbda /cocoa/ScintillaTest/AppController.mm | |
| parent | 8e12be32e9d14363f1e2f0fe6fc305b68a64ceb5 (diff) | |
| download | scintilla-mirror-805e109be2f52c0ea446511fc33efb3746a3bc18.tar.gz | |
First upload of Cocoa platform from Mike Lischke at Sun.
Diffstat (limited to 'cocoa/ScintillaTest/AppController.mm')
| -rw-r--r-- | cocoa/ScintillaTest/AppController.mm | 215 | 
1 files changed, 215 insertions, 0 deletions
| diff --git a/cocoa/ScintillaTest/AppController.mm b/cocoa/ScintillaTest/AppController.mm new file mode 100644 index 000000000..37192163b --- /dev/null +++ b/cocoa/ScintillaTest/AppController.mm @@ -0,0 +1,215 @@ +/** + * AppController.m + * ScintillaTest + * + * Created by Mike Lischke on 01.04.09. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt). + */ + +#import "AppController.h" +#import "ScintillaView.h" + +#include "Scintilla.h" + +using namespace Scintilla; + +const char major_keywords[] = +  "accessible add all alter analyze and as asc asensitive " +  "before between bigint binary blob both by " +  "call cascade case change char character check collate column 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 float float4 float8 for force foreign from fulltext " +  "goto grant group " +  "having high_priority hour_microsecond hour_minute hour_second " +  "if ignore in index infile inner inout insensitive insert int int1 int2 int3 int4 int8 integer " +    "interval into is iterate " +  "join " +  "key keys kill " +  "label leading leave left like limit linear lines load localtime localtimestamp lock long " +    "longblob longtext loop low_priority " +  "master_ssl_verify_server_cert match mediumblob mediumint mediumtext middleint minute_microsecond " +    "minute_second mod modifies " +  "natural not no_write_to_binlog null numeric " +  "on optimize option optionally or order out outer outfile " +  "precision primary procedure purge " +  "range read reads read_only read_write real references regexp release rename repeat replace " +    "require restrict return revoke right rlike " +  "schema schemas second_microsecond select sensitive separator set show smallint spatial specific " +    "sql sqlexception sqlstate sqlwarning sql_big_result sql_calc_found_rows sql_small_result ssl " +    "starting straight_join " +  "table terminated then tinyblob tinyint tinytext to trailing trigger true " +  "undo union unique unlock unsigned update upgrade usage use using utc_date utc_time utc_timestamp " +  "values varbinary varchar varcharacter varying " +  "when where while with write " +  "xor " +  "year_month " +  "zerofill"; + +const char procedure_keywords[] = // Not reserved words but intrinsic part of procedure definitions. +  "begin comment end"; + +const char client_keywords[] = // Definition of keywords only used by clients, not the server itself. +  "delimiter"; + +const char user_keywords[] = // Definition of own keywords, not used by MySQL. +  "edit"; + +//-------------------------------------------------------------------------------------------------- + +@implementation AppController + +- (void) awakeFromNib +{ +  // Manually set up the scintilla editor. Create an instance and dock it to our edit host. +  // Leave some free space around the new view to avoid overlapping with the box borders. +  NSRect newFrame = mEditHost.frame; +  newFrame.size.width -= 2 * newFrame.origin.x; +  newFrame.size.height -= 3 * newFrame.origin.y; +   +  mEditor = [[[ScintillaView alloc] initWithFrame: newFrame] autorelease]; +   +  [mEditHost.contentView addSubview: mEditor]; +  [mEditor setAutoresizesSubviews: YES]; +  [mEditor setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; +   +  // Let's load some text for the editor, as initial content. +  NSError* error = nil; +   +  NSString* path = [[NSBundle mainBundle] pathForResource: @"TestData"  +                                                   ofType: @"sql" inDirectory: nil]; +   +  NSString* sql = [NSString stringWithContentsOfFile: path +                                            encoding: NSUTF8StringEncoding +                                               error: &error]; +  if (error && [[error domain] isEqual: NSCocoaErrorDomain]) +    NSLog(@"%@", error); +   +  [mEditor setString: sql]; + +  [self setupEditor]; +} + +//-------------------------------------------------------------------------------------------------- + +/** + * Initialize scintilla editor (styles, colors, markers, folding etc.]. + */ +- (void) setupEditor +{   +  // Lexer type is MySQL. +  [mEditor setGeneralProperty: SCI_SETLEXER parameter: SCLEX_MYSQL value: 0]; +  // alternatively: [mEditor setEditorProperty: SCI_SETLEXERLANGUAGE parameter: nil value: (sptr_t) "mysql"]; +   +  // Number of styles we use with this lexer. +  [mEditor setGeneralProperty: SCI_SETSTYLEBITS parameter: 5 value: 0]; +   +  // Keywords to highlight. Indices are: +  // 0 - Major keywords (reserved keywords) +  // 1 - Normal keywords (everything not reserved but integral part of the language) +  // 2 - Database objects +  // 3 - Function keywords +  // 4 - System variable keywords +  // 5 - Procedure keywords (keywords used in procedures like "begin" and "end") +  // 6..8 - User keywords 1..3 +  [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 0 value: major_keywords]; +  [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 5 value: procedure_keywords]; +  [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 6 value: client_keywords]; +  [mEditor setReferenceProperty: SCI_SETKEYWORDS parameter: 7 value: user_keywords]; +   +  // Colors and styles for various syntactic elements. First the default style. +  [mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Andale Mono"]; +  // [mEditor setStringProperty: SCI_STYLESETFONT parameter: STYLE_DEFAULT value: @"Monospac821 BT"]; // Very pleasing programmer's font. +  [mEditor setGeneralProperty: SCI_STYLESETSIZE parameter: STYLE_DEFAULT value: 14]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_DEFAULT value: [NSColor blackColor]]; +   +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DEFAULT value: [NSColor blackColor]]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENT fromHTML: @"#097BF7"]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_COMMENTLINE fromHTML: @"#097BF7"]; +  // [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#097BF7"]; +  // [mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_HIDDENCOMMAND fromHTML: @"#F0F0F0"]; +   +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_VARIABLE fromHTML: @"378EA5"]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SYSTEMVARIABLE fromHTML: @"378EA5"]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KNOWNSYSTEMVARIABLE fromHTML: @"#3A37A5"]; +   +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_NUMBER fromHTML: @"#7F7F00"]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_SQSTRING fromHTML: @"#FFAA3E"]; +   +  // Note: if we were using ANSI quotes we would set the DQSTRING to the same color as the  +  //       the back tick string. +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DQSTRING fromHTML: @"#274A6D"]; + +  // Keyword highlighting. +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_MAJORKEYWORD fromHTML: @"#007F00"]; +  [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_MAJORKEYWORD value: 1]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_KEYWORD fromHTML: @"#007F00"]; +  [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_KEYWORD value: 1]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_PROCEDUREKEYWORD fromHTML: @"#56007F"]; +  [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_MYSQL_PROCEDUREKEYWORD value: 1]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER1 fromHTML: @"#808080"]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_USER2 fromHTML: @"#808080"]; +  [mEditor setColorProperty: SCI_STYLESETBACK parameter: SCE_MYSQL_USER2 fromHTML: @"#F0E0E0"]; +   +  // The following 3 styles have no impact as we did not set a keyword list for any of them. +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_DATABASEOBJECT value: [NSColor redColor]]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_FUNCTION value: [NSColor redColor]]; +   +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_IDENTIFIER value: [NSColor blackColor]]; +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: SCE_MYSQL_QUOTEDIDENTIFIER fromHTML: @"#274A6D"]; +  [mEditor setGeneralProperty: SCI_STYLESETBOLD parameter: SCE_SQL_OPERATOR value: 1]; +   +  // Line number style. +  [mEditor setColorProperty: SCI_STYLESETFORE parameter: STYLE_LINENUMBER fromHTML: @"#F0F0F0"]; +  [mEditor setColorProperty: SCI_STYLESETBACK parameter: STYLE_LINENUMBER fromHTML: @"#808080"]; +   +  [mEditor setGeneralProperty: SCI_SETMARGINTYPEN parameter: 0 value: SC_MARGIN_NUMBER]; +	[mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 0 value: 35]; +   +  // Markers. +  [mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 1 value: 16]; +   +  // Some special lexer properties. +  [mEditor setLexerProperty: @"fold" value: @"1"]; +  [mEditor setLexerProperty: @"fold.compact" value: @"0"]; +  [mEditor setLexerProperty: @"fold.comment" value: @"1"]; +  [mEditor setLexerProperty: @"fold.preprocessor" value: @"1"]; +   +  // Folder setup. +  [mEditor setGeneralProperty: SCI_SETMARGINWIDTHN parameter: 2 value: 16]; +  [mEditor setGeneralProperty: SCI_SETMARGINMASKN parameter: 2 value: SC_MASK_FOLDERS]; +  [mEditor setGeneralProperty: SCI_SETMARGINSENSITIVEN parameter: 2 value: 1]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPEN value: SC_MARK_BOXMINUS]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDER value: SC_MARK_BOXPLUS]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERSUB value: SC_MARK_VLINE]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERTAIL value: SC_MARK_LCORNER]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEREND value: SC_MARK_BOXPLUSCONNECTED]; +  [mEditor setGeneralProperty: SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDEROPENMID value: SC_MARK_BOXMINUSCONNECTED]; +  [mEditor setGeneralProperty +   : SCI_MARKERDEFINE parameter: SC_MARKNUM_FOLDERMIDTAIL value: SC_MARK_TCORNER]; +  for (int n= 25; n < 32; ++n) // Markers 25..31 are reserved for folding. +  { +    [mEditor setColorProperty: SCI_MARKERSETFORE parameter: n value: [NSColor whiteColor]]; +    [mEditor setColorProperty: SCI_MARKERSETBACK parameter: n value: [NSColor blackColor]]; +  } +   +  // Init markers & indicators for highlighting of syntax errors. +  [mEditor setColorProperty: SCI_INDICSETFORE parameter: 0 value: [NSColor redColor]]; +  [mEditor setGeneralProperty: SCI_INDICSETUNDER parameter: 0 value: 1]; +  [mEditor setGeneralProperty: SCI_INDICSETSTYLE parameter: 0 value: INDIC_SQUIGGLE]; +   +  [mEditor setColorProperty: SCI_MARKERSETBACK parameter: 0 fromHTML: @"#B1151C"]; +   +  [mEditor setColorProperty: SCI_SETSELBACK parameter: 1 value: [NSColor selectedTextBackgroundColor]]; +   +  // Uncomment if you wanna see auto wrapping in action. +  //[mEditor setGeneralProperty: SCI_SETWRAPMODE parameter: SC_WRAP_WORD value: 0]; +} + +@end + +//-------------------------------------------------------------------------------------------------- + | 
