Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ϊ Perl¡¢Python ºÍ PHP ¹¹½¨ Eclipse ¿ª·¢»·¾³
 
×÷Õß Matthew Scarpino£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-10
  2987  次浏览      28
 

ʹÓà Dynamic Languages Toolkit (DLTK) ´´½¨×Ô¼ºµÄ IDE

Eclipse Ϊ¹¹½¨±àÒëÐÔÓïÑÔ£¨±ÈÈç C£©ºÍ Java? ±à³ÌÓïÑԵŤ¾ßÌṩÁË´óÁ¿ÌØÐÔ£¬µ«¶Ô½Å±¾ÓïÑÔ£¨±ÈÈç Perl¡¢Python ºÍ PHP£©µÄÖ§³ÖÈ´ºÜÉÙ¡£ÇìÐÒµÄÊÇ£¬Eclipse Dynamic Languages Toolkit (DLTK) ΪÕâЩÓïÑÔÒÔ¼°ÀàËÆµÄÓïÑÔÌṩÁËÖ§³Ö¡£Í¨¹ý±¾ÎÄѧϰ¹¹½¨»ùÓÚ DLTK µÄ IDE µÄ²½Ö裬²¢ÇÒ̽Ë÷ÿ¸ö²½ÖèµÄÑùÀý´úÂë¡£

¿ªÊ¼Ö®Ç°

¹ØÓÚ±¾½Ì³Ì

±¾½Ì³ÌÏÔʾÈçºÎͨ¹ý Eclipse DLTK Ϊ½Å±¾ÓïÑÔ¹¹½¨¿ª·¢¹¤¾ß£¬²¢ÇÒÌØ±ð½âÊÍÁËÈçºÎÔÚ»ùÓÚ²å¼þµÄÏîÄ¿ÖÐʵÏÖÓï·¨×ÅÉ«¡¢Óû§Ê×Ñ¡ÏîºÍ½âÊÍÆ÷¼¯³É¡£

Ä¿±ê

Õâ¸ö½Ì³Ì·Ö²½½âÊÍÁËÈçºÎ¹¹½¨»ùÓÚ DLTK µÄ¿ª·¢»·¾³¡£Õâ¸öÌÖÂÛͨ¹ý¹Ø×¢»ùÓÚ Octave ÊýÖµ¼ÆËãÓïÑÔµÄʵ¼Ê²å¼þÏîÄ¿À´½éÉÜ DLTK¡£ÌÖÂÛµÄÖ÷Ìâ°üÀ¨£º

´´½¨²å¼þÏîÄ¿¡£

ÅäÖñ༭Æ÷ºÍ DLTK Îı¾¹¤¾ß¡£

Ìí¼ÓÔÚÎı¾±à¼­Æ÷ÖпØÖÆÓï·¨ÑÕÉ«µÄÀà¡£

ÆôÓÃÓû§Ê×Ñ¡Ïî¡£

½«½Å±¾½âÊÍÆ÷¼¯³Éµ½¿ª·¢»·¾³¡£

Ìí¼Ó¶¨ÖÆ¿ØÖÆÌ¨£¬ÒÔÔÚ¹¤×÷̨ºÍ½âÊÍÆ÷Ö®¼ä½øÐÐͨÐÅ¡£

ÏȾöÌõ¼þ

±¾½Ì³ÌÊÇΪÊìϤ Eclipse ²¢¶Ô¹¹½¨¶¯Ì¬ÓïÑÔ£¨±ÈÈç PHP¡¢Tcl¡¢Ruby ºÍ Python£©¹¤¾ß¸ÐÐËȤµÄ Java ¿ª·¢ÈËÔ±±àдµÄ¡£ËüÒªÇó¶ÁÕß»ù±¾Àí½â²å¼þºÍ»ùÓÚ Eclipse µÄ¿ª·¢¹¤¾ß¡£

ϵͳÐèÇó

ΪÁ˹¹½¨±¾½Ì³ÌÖеÄʾÀýÏîÄ¿£¬±ØÐë¾ß±¸°²×°ÓÐ Eclipse£¨V3.4 »ò¸üа汾£©µÄ¼ÆËã»ú£¬ÒÔ¼°×îÐ嵀 Java Runtime Environment (JRE)¡£´ËÍ⣬±ØÐë°²×°½Ïа汾µÄ DLTK£¬ÎÒÃǽ«ÔÚ ¡°°²×° DLTK¡± С½ÚÖжԴ˽øÐÐ˵Ã÷£¨²Î¼û ²Î¿¼×ÊÁÏ »ñµÃ Eclipse ÏÂÔØÁ´½Ó£©¡£

DLTK ºÍ DLTK ±à¼­Æ÷½éÉÜ

Eclipse Ìṩ´óÁ¿ÓÃÓÚ¹¹½¨¿ª·¢¹¤¾ßµÄÌØÐÔ£¬µ«ÕâÐ©ÌØÐÔ²»Ò×Àí½âºÍʹÓá£ÔÚÕâЩÀàÖУ¬´ó²¿·Ö¶¼Ðè´óÁ¿µÄÅäÖòÅÄÜÕýÈ·¹¤×÷£¬±ÈÈç TextEditor¡£Ïà·´£¬DLTK Ìṩһ¸öÔ¤´ò°üµÄ¿ª·¢»·¾³£¬Ö»Ðè½øÐÐһЩСµÄµ÷Õû¾ÍÄܹ¤×÷¡£Óà DLTK ¹¹½¨¿ª·¢¹¤¾ß¾ÍÏñÓø÷ÖÖ»ìºÏÔ­ÁÏ¿¾Ãæ°üÒ»Ñù£º½á¹û²»ÊǺÜÓд´Ò⣬µ«ÊÇ¿ÉÒÔÒÔ×îÉٵŤ×÷»ñµÃ×î¼ÑµÄÖÊÁ¿ºÍ¿É¿¿ÐÔ¡£

DLTK ºÍ Eclipse µÄµÚ¶þ¸öÇø±ð¾ÍÊÇÖ§³ÖµÄÓïÑÔ¡£Eclipse µÄ¹¹½¨ÌØÐÔ»ùÓÚ±àÒëÐÔÓïÑÔ£¬±ÈÈç Java¡¢C ºÍ C++¡£¶ø DLTK ÔòÆ«Ïò¶¯Ì¬ÓïÑÔ£¬ÆäÖаüÀ¨½Å±¾ÓïÑÔ£¬±ÈÈç PHP¡¢Ruby ºÍ Tcl µÈ¡£ÔÚÀíÏëµÄÇé¿öÏ£¬ÕâЩÓïÑԵĿª·¢¹¤¾ßÓ¦¸ÃÄܹ»ÇáËɵؼ¯³É½Å±¾½âÊÍÆ÷¡¢ÖðÐнøÐÐÃüÁî¼ÆË㣬ÒÔ¼°ÔÚ¿ØÖÆÌ¨ÖÐÊäÈëÃüÁî¡£Óë Eclipse ²»Í¬£¬DLTK Ö§³ÖËùÓÐÕâÐ©ÌØÐÔ¡£

°²×° DLTK

Èç¹ûÄú»¹Ã»Óа²×° DLTK£¬Çë°´ÒÔϲ½Öè²Ù×÷£º

´ò¿ª Eclipse£¬È»ºóµ¥»÷ Help > Software Updates¡£

µ¥»÷ Available Software Ñ¡Ï¡£

µ¥»÷ Add Site£¬È»ºóÊäÈë http://download.eclipse.org/technology/dltk/updates¡ª DLTK ¸üÐÂÕ¾µãµÄ URL¡£

Ñ¡Ôñ DLTK ¸´Ñ¡¿ò£¬È»ºóµ¥»÷ Install¡£

»ùÓÚ DLTK µÄ²å¼þÏîÄ¿£ºOctave IDE

±¾½Ì³Ì²»½ö½öÊÇÌÖÂÛ DLTK ¼°ÆäÌØÐÔ¡£Ëü½«½ÌÄúÈçºÎÖð²½´´½¨ Octave ½Å±¾ÓïÑԵĻùÓÚ DLTK µÄ¼¯³É¿ª·¢»·¾³£¨IDE£©¡£Octave ÊÇÓÉ GNU Public License (GPL) ÊÚȨµÄ¹¤¾ß¼¯£¬ÓÃÓÚÖ´ÐÐÊýѧ¼ÆË㣬ÓÈÆäÊʺÏÉæ¼°¾ØÕóµÄÇé¿ö¡£Octave ÃüÁîÒ×ÓÚÀí½â£¬²¢ÇÒÓëÁ÷ÐеÄרÓй¤¾ß Matlab ·Ç³£ÏàËÆ¡£Äú¿ÉÒÔ´Ó ÏÂÔØ С½ÚÏÂÔØËüµÄʾÀý´úÂë¡£

½«Òª¹¹½¨µÄ Octave IDE ²»Èç Eclipse ÄǰãÍêÃÀ£¬µ«ÊÇËü¿ÉÒÔ´´½¨ Octave ½Å±¾£¨*.m Îļþ£©£¬Ôڶ๦ÄÜÎı¾±à¼­Æ÷Öб༭½Å±¾£¬²¢ÇÒµ¥»÷Ò»¸ö°´Å¥¾ÍÄÜÔËÐÐ Octave ½âÊÍÆ÷£¬È»ºó¿ÉÒԲ鿴ÏÔʾÔÚ IDE ¿ØÖÆÌ¨ÖеĽá¹û¡£Í¼ 1 ÏÔʾÁ˱༭Æ÷ºÍ¿ØÖÆÌ¨¡£

ͼ 1. Octave IDE

±¾½Ì³Ìͨ¹ý 4 ¸ö²½Öè½âÊ͹¹½¨ Octave IDE µÄ¹ý³Ì£º

´´½¨ Octave ±à¼­Æ÷²¢Ìí¼ÓÌØÐÔ¡£

´æ´¢²¢ÏìÓ¦Óû§Ê×Ñ¡Ïî¡£

¼¯³É Octave ½âÊÍÆ÷¡£

ÔÚ¿ØÖÆÌ¨ÖÐÏÔʾ½âÊÍÆ÷µÄÊä³ö¡£

Ê×ÏÈÒª´¦ÀíµÄÊÇ Octave ½Å±¾±à¼­Æ÷¡£Õâ¸öÖ÷ÌâÓкܶàÐèÒªÀí½âµÄµØ·½£¬µ«ÔÚ±àд´úÂë֮ǰ£¬ÎÒÃÇÏÈÍËÒ»²½£¬¿´¿´ DLTK ±à¼­Æ÷ÊÇÈçºÎ¹¤×÷µÄ¡£ÕâЩÌÖÂÛ»ù±¾ÊÊÓÃÓÚËùÓÐ Eclipse Îı¾±à¼­Æ÷¡£

DLTK Îı¾±à¼­Æ÷µÄ¸ß¼¶½éÉÜ

´Ó×î»ù´¡µÄ¼¶±ð½²£¬DLTK Îı¾±à¼­Æ÷½öÊÇÒ»¸ö´øÓÐÐí¶à¶îÍâÌØÐÔµÄÆÕͨ Standard Widget Toolkit (SWT) StyledText ²¿¼þ¡£ÕâÐ©ÌØÐÔ·ÖΪÁ½Àࣺ

ÏìÓ¦Óû§Ê¼þ

¸ù¾ÝÓû§µÄ»÷¼ü¸ü¸Ä±à¼­Æ÷ÏÔʾ

ÎļþÊäÈë/Êä³ö£¨I/O£©

ÔÚ IDE ºÍÓû§ÏµÍ³ÉϵÄÎļþÖ®¼ä´«Êä×Ö·ûÊý¾Ý

ÔÚ DLTK ±à¼­Æ÷ÖУ¬ÓÉ ScriptSourceViewer ¶ÔÏó¸ºÔð´¦Àíʼþ¡£Õâ¸ö¶ÔÏóÊÇÓÉ ScriptEditor ´´½¨µÄ£¬Ëü°üΧ StyledText ²¿¼þ£¬²¢ÇÒ¹ÜÀíÆä¶ÔÓû§»÷¼üµÄÏìÓ¦¡£Õâ¸öÏìӦͨ³£Éæ¼°µ½Ð޸IJ¿¼þµÄÏÔʾ»ò¸üб༭Æ÷µÄÄÚ²¿Êý¾Ý¡£Êý¾ÝÄÚǶÔÚ IDocument ¶ÔÏóÖУ¬Õâ¸ö¶ÔÏó²»½ö´æ´¢Îı¾£¬²¢ÇÒ»¹´æ´¢ÓëÐкš¢Î»ÖúÍÇøÓò£¨¼´·ÖÇø£©Ïà¹ØµÄÐÅÏ¢¡£

ScriptSourceViewer ͨ¹ý·ÃÎʳÆÎª SourceModuleDocumentProvider µÄ¶ÔÏó¸üРIDocument¡£³ýÁËÄܹ»·ÃÎÊ IDocument Ö®Í⣬Õâ¸ö¶ÔÏó»¹´¦ÀíÎļþ²Ù×÷¡£DLTK ÌæÄú´¦ÀíËùÓб༭Æ÷Îļþ½»»¥£¬µ«Èç¹ûÐèÒª½øÒ»²½Á˽⣬¿ÉÒÔÔĶÁ¹ØÓڸöÔÏóµÄ³¬Àà TextFileDocumentProvider µÄÎĵµ£º¡£

Èç¹ûÊìϤ Model-View-Controller (MVC) ģʽ£¬ScriptSourceViewer¡¢IDocument ºÍ StyledText ²¿¼þÖ®¼äµÄ¹ØÏµ¾Í»áºÜÇåÎú¡£IDocument ÓÃ×÷±à¼­Æ÷µÄ Model£¨Ä£ÐÍ£©²¿·Ö£¬°üº¬ÓëÆä±íʾÎ޹صÄÊý¾Ý¡£StyledText ²¿¼þÓÃ×÷±à¼­Æ÷µÄ View£¨ÊÓͼ£©²¿·Ö£¬¶ø ScriptSourceViewer ÔòÓÃ×÷ Controller£¨¿ØÖÆÆ÷£©²¿·Ö£¬ÓÃÓÚ¹ÜÀí Model¡¢View ºÍÓû§Ö®¼äµÄͨÐÅ¡£Í¼ 2 ÏÔʾÁËÕâÒ»¹ØÏµ¡£

ͼ 2. DLTK ±à¼­Æ÷µÄ»ù±¾×é³É²¿·Ö

Èç¹ûÄÜÀí½âÉÏÃæµÄ½âÊÍÄÚÈݺÍͼ 2£¬ÄÇô¾ÍºÜÈÝÒ×Àí½â½ÓÏÂÀ´µÄ¼¼ÊõÌÖÂÛ¡£ÏÂһС½Ú½«¿ªÊ¼´´½¨ Octave ²å¼þ¡£

¿ªÊ¼ DLTK ÏîÄ¿

Ϊ¼òµ¥Æð¼û£¬±¾½Ì³Ì½«ËùÓÐ Octave IDE ÌØÐÔ¼¯³Éµ½Ò»¸ö¼òµ¥µÄ²å¼þÖС£×ÜÌåÀ´Ëµ£¬¾ÍÊÇÓöà¸ö²å¼þʵÏÖÒ»¸öÌØÐÔ£ºÕâЩ²å¼þ·Ö±ð°üº¬ºËÐÄÀà¡¢UI Àà¡¢µ÷ÊÔÀàµÈµÈ¡£µ«ÊDZ¾½Ì³ÌµÄ´úÂëÖ»ÐèÒªÒ»¸ö²å¼þ£¬Òò´ËÔËÐÐ Eclipse ʱ£¬µ¥»÷ File > New > Project£¬Ñ¡Ôñ Plug-in Project Ñ¡ÏȻºó´´½¨Ò»¸öеIJå¼þÏîÄ¿¡£ÔÚʾÀý´úÂëÖУ¬ÏîÄ¿ÃûΪ org.dworks.octaveide£¬²¢ÇÒ²å¼þÀàΪ OctavePlugin£¨µ«ÊÇÄú¿ÉÒÔÑ¡Ôñ×Ô¼ºÏ²»¶µÄÃû³Æ£©¡£

ÅäÖà Octave ²å¼þ

ÔÚ´´½¨²å¼þÖ®ºó£¬ÏÂÒ»²½±ãÊǽ«Ò»Ð©À©Õ¹Ìí¼Óµ½ Octave IDE ²å¼þµÄÅäÖÃÎļþÖУºplugin.xml£¨ÐèÒªµ¥»÷ File > New > File À´´´½¨¸ÃÎļþ£©¡£ÕâЩÀ©Õ¹¸æËß Eclipse Õâ¸ö²å¼þÈçºÎÔÚ¹¤×÷̨Öй¤×÷¡£Ê×ÏÈ£¬plugin.xml ÎļþÐèÒªÁ½¸ö¼òµ¥µÄÀ©Õ¹£ºÒ»¸öÓÃÓÚʶ±ð Octave ±à¼­Æ÷£¬ÁíÒ»¸öÓÃÓÚʶ±ðÐèÒª±à¼­µÄÎļþµÄÀàÐÍ¡£Çåµ¥ 1 ¸ø³öÁ˵ÚÒ»¸öÀ©Õ¹£¬Ëü¶¨Òå Octave ±à¼­Æ÷µÄÌØÕ÷¡£

Çåµ¥ 1. Octave IDE ±à¼­Æ÷À©Õ¹

<extension point="org.eclipse.ui.editors">
<editor
id="org.dworks.octaveide.editor.OctaveEditor"
class="org.dworks.octaveide.editor.OctaveEditor"
contributorClass="org.dworks.octaveide.actions.OctaveActionContributor"
default="true"
icon="icons/oct.gif"
name="%OctaveEditor.name">
<contentTypeBinding
contentTypeId="org.dworks.octaveide.octaveContentType">
</contentTypeBinding>
</editor>
</extension>

Õâ¸öÀ©Õ¹°üº¬¼¸¸ö·Ç³£ÖØÒªµÄÊôÐÔ¡£class ÊôÐÔ¶¨Òå¹¹³É±à¼­Æ÷µÄ»ùÀࣺOctaveEditor¡£ËæºóÄú½«´´½¨Õâ¸öÀà¡£contributorClass ÊôÐÔʶ±ðΪ±à¼­Æ÷ÌṩÐÐΪµÄÀà¡£default ÊôÐÔÒªÇó OctaveEditor Ó¦¸ÃÊÇÏà¹ØÎļþµÄĬÈϱ༭Æ÷¡£name ÊôÐÔʶ±ð½«Ôڱ༭Æ÷ÖÐÏÔʾµÄÎı¾¡£¾ÍÏñÔÚ plugin.properties ÎļþÖж¨ÒåµÄÒ»Ñù£¬OctaveEditor.name ÊôÐÔ¶ÔÓ¦ ¡°Octave Script Editor¡±¡£

Õâ¸öÀ©Õ¹ÖÐ×îºóÐèÒª½âÊ͵ÄÊÇ contentTypeBinding¡£Eclipse °üº¬Ò»¸öÄÚÈÝÀàÐÍ×¢²á±í£¬ÓÃÀ´±íʾÎļþ¸ñʽºÍÃüÃûÔ¼¶¨¡£Í¨¹ý½« contentTypeBinding ÔªËØÌí¼Óµ½±à¼­Æ÷µÄÀ©Õ¹£¬¾Í¿ÉÒÔ½«±à¼­Æ÷ÓëÎļþºó׺¡¢ÎļþÃû£¬ÉõÖÁÎļþ±ðÃû¹ØÁªÆðÀ´¡£µ«ÄúµÄ Octave ±à¼­Æ÷Ö»ÐèÒª¹Ø×¢ *.m Îļþ£¬Òò´Ë org.eclipse.core.runtime.contentTypes À©Õ¹ºÜ¼òµ¥¡£Çåµ¥ 2 ¸ø³öÁ˵ڶþ¸öÀ©Õ¹¡£

Çåµ¥ 2. Octave IDE ContentType À©Õ¹

<extension point="org.eclipse.core.runtime.contentTypes">
<content-type
id="org.dworks.octaveide.octaveContentType"
base-type="org.eclipse.core.runtime.text"
file-extensions="m"
name="%octaveContentType"
priority="high">
</content-type>
</extension>

Ðí¶àÊôÐÔ¶¼¿ÉÒÔÓÃÀ´¶¨ÖÆÄÚÈÝÀàÐÍ£¬µ«ÊÇÕâ¸öÉùÃ÷½« org.dworks.octaveide.octaveContentType ÄÚÈÝÀàÐÍʶ±ðΪ»ùÓÚÎı¾µÄ£¬²¢ÇÒÓëÎļþºó׺ .m Ïà¹ØÁª¡£priority ÊôÐÔÒªÇóÈç¹ûÒ»¸öÎļþÓë¶à¸öÄÚÈÝÀàÐÍÏà¹ØÁª£¬Ä³¸öÀàÐͱØÐë¾ßÓкܸߵÄÓÅÏȼ¶¡£

´´½¨ DLTK ÓïÑÔ¹¤¾ßÏäÀà

ʹÓà DLTK µÄ×î´óºÃ´¦ÊǶ¨ÖÆ IDE µÄ¹¤×÷·½Ê½ºÜ¼òµ¥¡£Õâ¸ö¶¨ÖÆ¿ÉÒÔͨ¹ý DLTK µÄÓïÑÔ¹¤¾ßÏä½Ó¿ÚÀ´ÊµÏÖ£¨IDLTKCoreLanguageToolkit¡¢IDLTKDebugUILanguageToolkit ºÍ IDLTKUILanguageToolkit µÈ£©¡£ÊµÏÖÕâЩ½Ó¿ÚÖ®ºó£¬ËüÃǾ͸ø³öÅäÖà IDE µÄ¸÷¸ö·½ÃæµÄ·½·¨£¬±ÈÈç½âÎö¡¢ÑÕɫʹÓá¢Óû§Ê×Ñ¡ÏîºÍ½âÊÍÆ÷µÄ·ÃÎÊ¡£

±¾½Ì³ÌÖ÷Òª¹Ø×¢ DLTK UI£¬Òò´Ë½öÐè¹ØÐÄ IDLTKUILanguageToolkit¡£Õâ¸ö½Ó¿ÚÖеķ½·¨Ö´ÐÐÁ½ÏÄÜÖ®Ò»£ºËüÃÇ»òÕß·µ»Ø´¦Àí±à¼­Æ÷ÅäÖõÄÀ࣬»òÕßÌṩÔÚ plugin.xml ÖÐÉùÃ÷µÄÅäÖöÔÏóµÄ ID¡£ÏÖÔÚÁгöÕâЩ·½·¨ÖÐµÄ 7 ¸ö¡£

getEditorId(Object elementID)

·µ»Ø±à¼­Æ÷µÄ ID

getTextTools()

·µ»Ø ScriptTextTools ¶ÔÏó£¬Ëü¶¨ÖÆÈçºÎÔڱ༭Æ÷ÖÐÏÔʾÎı¾

createSourceViewerConfiguration()

·µ»Ø ScriptSourceViewerConfiguration ¶ÔÏó£¬ËüÅäÖñ༭Æ÷µÄÔ´´úÂë²é¿´Æ÷µÄ²Ù×÷

getPreferenceStore()

·µ»Ø IPreferenceStore ¶ÔÏó£¬Ëü°üº¬Óû§ÉèÖÃ

getEditorPreferencePages()

·µ»ØÓë±à¼­Æ÷ÉèÖÃÏà¹ØµÄÊ×Ñ¡ÏîÒ³ÃæµÄ ID

getInterpreterPreferencePages()

·µ»ØÓë½Å±¾½âÊÍÆ÷Ïà¹ØµÄÊ×Ñ¡ÏîÒ³ÃæµÄ ID

getIntepreterId()

·µ»Ø½Å±¾½âÊÍÆ÷µÄ ID

ÔÚʾÀý´úÂëÖУ¬OctaveUILanguageToolkit ÀàʹÓöÔÏóºÍ±êʶ·û²¹³äÁËÕâЩ·½·¨¡£ÔÚÕâ¸ö¹¤¾ßÏäÖУ¬ÓëÁгöµÄǰÁ½¸ö·½·¨¶ÔÓ¦µÄÁ½¸ö¶ÔÏóÊÇ OctaveEditor ºÍ OctaveTextTools¡£

´´½¨ Octave ±à¼­Æ÷ºÍ Octave Îı¾¹¤¾ß

ÏÖÔڱ༭Æ÷À©Õ¹ÒѾ­ÅäÖÃÍê³É£¬½ÓÏÂÀ´Ê×ÏÈÐèÒª×öµÄ¾ÍÊÇ´´½¨ OctaveEditor¡£ÓÉÓÚÓÐÁË DLTK£¬ËùÒÔ²»ÐèÒª±àдºÜ¶à´úÂ룺DLTK µÄ ScriptEditor ÀࣨOctaveEditor µÄ³¬Àࣩ°ïÖúÄú´¦Àí´ó²¿·Ö±à¼­Æ÷²Ù×÷¡£Äú½öÐèһЩÅäÖ÷½·¨¡£ÔÚ OctaveEditor ÖУ¬×îÖØÒªµÄ·½·¨ÊÇ getTextTools()£¬Ëü·µ»ØÒ»¸ö ScriptTextTools ¶ÔÏó¡£

ScriptTextTools ÀàÊ®·Ö·½±ã¡£Õâ¸öÖÐÐÄÀà·ÃÎÊÆäËû¼¸¸öÌṩ±à¼­Æ÷ÌØÐÔµÄÀࡣͨ¹ý±àд ScriptTextTools µÄ×ÓÀ࣬±à¼­Æ÷Äܹ»¶¨ÖÆÕâÐ©ÌØÐÔµÄÖ´Ðз½Ê½¡£Octave ±à¼­Æ÷´´½¨Ò»¸ö³ÆÎª OctaveTextTools µÄ×ÓÀ࣬ËüÄܹ»·ÃÎÊÁ½¸öÖØÒªµÄ¶ÔÏó£º

OctavePartitionScanner

¶ÁÈ¡±à¼­Æ÷Îı¾²¢¾ö¶¨·ÖÇø½çÏÞ

OctaveSourceViewerConfiguration

ÅäÖà ScriptSourceViewer ¼°ÆäÏìÓ¦Óû§Éú³ÉµÄʼþµÄ·½Ê½

ÕâЩ¶ÔÏóÔÚʵÏÖÓï·¨×ÅÉ« ʱÓÈÎªÖØÒª ¡ª ¼´¸ù¾ÝÎı¾µÄÓï·¨¹¦Äܸıä´úÂëÖÐÎı¾µÄÑÕÉ«¡£ÏÂÒ»¸öÖ÷Ì⽫¸ü¼ÓÏêϸµØ½âÊÍÕâ¸öÌØÐÔ¡£

DLTK ±à¼­Æ÷ÖеÄÓï·¨×ÅÉ«

Óï·¨×ÅÉ«ÊÇÈκÎרҵԴ´úÂë±à¼­Æ÷×îÒýÈËעĿµÄ·½ÃæÖ®Ò»¡£ÑÕÉ«²»½öÈÃ?ÂëµÄÔĶÁ¸ü¼Ó·½±ã£¬²¢ÇÒʹÊäÈë´íÎó¸üÃ÷ÏÔ¡£Í¼ 3 ÏÔʾÈçºÎͨ¹ý²»Í¬µÄÑÕÉ«½«×¢ÊÍ¡¢Êý×Ö¡¢¹Ø¼ü×ÖºÍ×Ö·û´®ÓëÆÕͨµÄ´úÂëÇø·Ö¿ªÀ´¡£

ͼ 3. Octave IDE ÖеÄÓï·¨×ÅÉ«

ÔÚ Octave ±à¼­Æ÷ÖÐÅäÖÃÓï·¨×ÅÉ«

DLTK ͨ¹ý 4 ¸ö²½Öè´¦ÀíÓï·¨×ÅÉ«£º

ScriptSourceViewer ͨ¹ýÏòÎĵµµÄ·ÖÇøÆ÷£¨partitioner£©·¢³ö֪ͨÀ´ÏìÓ¦»÷¼ü¡£

·ÖÇøÆ÷¸ù¾Ý¹æÔò¶ÔÎĵµµÄÎı¾·ÖÇø¡£

·ÖÇø½áÊøÖ®ºó£¬²é¿´Æ÷֪ͨÏÔʾµ÷½âÆ÷£¨presentation reconciler£©·ÖÎöÐ޸ĺóµÄ·ÖÇø¡£

µ÷½âÆ÷µ÷ÓÃÏú»ÙÆ÷/ÐÞ¸´Æ÷£¨damager/repairer£©À´·ÖÎöÊÜÓ°ÏìµÄÇøÓò£¬È»ºóÓ¦ÓÃÓï·¨×ÅÉ«¹¦ÄÜ¡£

ÔÚÕâÖÖ·½Ê½Ï£¬±à¼­Æ÷ʹÓ÷ÖÖΣ¨divide-and-conquer£©²ßÂÔÀ´ÎªÎı¾Ìí¼ÓÑÕÉ«¡£Ê×ÏÈ£¬Ëü½«Îĵµ·ÖΪ¶à¸öÇøÓò¡£È»ºó£¬·ÖÎöÐ޸ĺóµÄÇøÓò²¢È·¶¨ÐèÒª¸üÐÂÓï·¨ÑÕÉ«µÄµØ·½¡£½ÓÏÂÀ´µÄÁ½¸öС½Ú½«¸ü¼ÓÉîÈëµØ½âÊÍÕâ¸ö¹ý³Ì£¬²¢ÇÒÑÝʾÈçºÎÔÚ Octave IDE ÖÐʵÏÖÓï·¨×ÅÉ«¡£

Îĵµ·ÖÇø

³ýÁËÎı¾Ö®Í⣬IDocument »¹´æ´¢Ò»×é Position£¬ËüÃÇÓÃÓÚÈ·¶¨Îı¾ÄÚ²¿µÄÇøÓòµÄ½çÏÞ¡£ÕâÐ©ÇøÓò²»½öʹÓï·¨×ÅÉ«³ÉΪ¿ÉÄÜ£¨×¢ÊͺʹúÂë²ÉÓò»Í¬µÄÑÕÉ«£©£¬²¢ÇÒʹÄúÄܹ»ÔÚÎı¾µÄ²»Í¬ÇøÓòÉÏʹÓò»Í¬µÄ¹¤¾ß¡£ÀýÈ磬²»Èýű¾½âÎöÆ÷·ÖÎö×¢ÊÍÐС£Í¨¹ý·ÖÇø£¬¿ÉÒÔÈ·±£½âÎöÆ÷½ö·ÖÎö°üº¬Êµ¼Ê´úÂëµÄÇøÓò¡£

ÓÉÁ½¸öÖÐÐĶÔÏóÀ´Íê³ÉÎĵµ·ÖÇø£ºÒ»¸öʵÏÖ IDocumentPartitioner£¬ÁíÒ»¸öʵÏÖ IPartitionTokenScanner¡£·ÖÇøÆ÷½«Îı¾Ìá½»¸øÉ¨ÃèÆ÷½øÐзÖÎö£¬È»ºóÉú³É IToken¡£·ÖÇøÆ÷ʹÓÃÕâЩ±ê¼Ç£¨token£©ÔÚÎĵµµÄÄÚ²¿ÉèÖà Position¡£

ÎÒÃÇÏ£Íû OctaveEditor Äܹ»ÔÚÓû§´ò¿ª *.m ʱ×Ô¶¯³õʼ»¯·ÖÇøÆ÷ºÍɨÃèÆ÷¡£Îª´Ë£¬±ØÐëʹÓà org.eclipse.core.filebuffers.documentSetup À©Õ¹µãµÄÒ»¸öÀ©Õ¹ÔÚ plugin.xml ÖÐÏÔʽµØ¶¨ÒåÎĵµµÄÅäÖá£Õâ¸öÀ©Õ¹ÔÚÎĵµ³õʼ»¯ÆÚ¼äʶ±ðÓÃÓÚÅäÖÃÎĵµµÄÀà¡£Çåµ¥ 3 ¸ø³öÁËΪ Octave IDE ²å¼þ¶¨ÒåµÄÀ©Õ¹¡£

Çåµ¥ 3. ÅäÖÃÎĵµ

<extension point="org.eclipse.core.filebuffers.documentSetup">
id="org.dworks.octaveide.editor.OctaveDocumentSetup"
name="%documentSetupName"
<participant
extensions="m"
class="org.dworks.octaveide.editor.OctaveDocumentSetup">
</participant>
</extension>

OctaveDocumentSetup µ÷Óà DLTK ScriptTextTools ¶ÔÏó³õʼ»¯ *.m Îĵµ¡£Ä¬ÈÏÇé¿öÏ£¬Õ⽫´´½¨Ò»¸öÓÃ×÷Îĵµ·ÖÇøÆ÷µÄ FastPartitioner¡£
ÿ¸ö DLTK ±à¼­Æ÷¶¼±ØÐë´´½¨×Ô¼ºµÄ IPartitionTokenScanner ¶ÔÏóÀ´¶ÁÈ¡×Ö·ûºÍÉú³ÉÓë·ÖÇø¶ÔÓ¦µÄ±ê¼Ç¡£ÀýÈ磬Èç¹ûÏëҪΪÒÔ ¡®/*¡¯ ¿ªÊ¼²¢ÒÔ ¡®*/¡¯ ½áÊøµÄÎı¾´´½¨Ò»¸ö·ÖÇø£¬ÔòÒªÅäÖÃɨÃèÆ÷£¬ÈÃËüÔÚÓöµ½ÕâÖÖÐÎʽµÄÎı¾Ê±Éú³ÉÕýÈ·µÄ±ê¼Ç¡£Octave ²å¼þ½«Îı¾·ÖΪ 3 ¸öÇøÓò£º

×¢ÊÍ

ÓÉ OCTAVE_COMMENT ʶ±ð£¬ËüµÈЧÓÚ "__octave_comment__"

×Ö·û´®

ÓÉ OCTAVE_STRING ʶ±ð£¬ËüµÈЧÓÚ "__octave_string__"

ÆÕͨ½Å±¾´úÂë

ÓÉ IDocument.DEFAULT_CONTENT_TYPE ʶ±ð£¬ËüµÈЧÓÚ "__dftl_partition_content_type"

ÕâЩ·ÖÇøÊÇÔÚ IOctavePartititons ½Ó¿ÚÖж¨ÒåµÄ¡£ÕâЩ·ÖÇøÓÃÓÚ³õʼ»¯ FastPartitioner£¬ºóÕß½«·ÖÇø·¢Ë͸ø·ÖÇøÉ¨ÃèÆ÷¡£

¿ÉÒÔʹÓÃÒ»×éÂß¼­¹æÔòʶ±ð Octave ±à¼­Æ÷ÖеķÖÇø£¬Òò´Ë OctavePartitionScanner ½«À©Õ¹ RuleBasedPartitionScanner Àà¡£Õâ¸öÀàÖÐ×îÖØÒªµÄ·½·¨ÊÇ setPartitionRules£¬Ëü½ÓÊÜÒ»¸ö IPredicateRule ¶ÔÏóÊý×é¡£¹æÔòµÄÄ¿±êÊǽ«Îı¾µÄ¸÷¸ö²¿·Öת»»³É IToken¡£´ÓÍ·±àд¹æÔòÊǺÜÀ§Äѵģ¬ÇìÐÒµÄÊÇ Eclipse ÌṩÁË IPredicateRule ½Ó¿ÚµÄÐí¶àÓÐÓÃʵÏÖ¡£Octave IDE ʹÓÃÆäÖÐÁ½¸öÀ´Ê¶±ð·ÖÇø£ºSingleLineRule ºÍ MultiLineRule¡£ÕâÁ½¸öÀà¾ßÓÐÀàËÆµÄ¹¹ÔìÆ÷£¬ËüÃÇÓÉÒÔÏÂÐÅÏ¢£¨ÖÁÉÙ£©³õʼ»¯£º

1.¿ªÊ¼·ÖÇøµÄ×Ö·û

2.½áÊø·ÖÇøµÄ×Ö·û

3.¶ÔÓ¦ÓÚ±»Ê¶±ð·ÖÇøµÄ IToken

ÀýÈ磬¼ÙÉèÄúÏ£Íû´´½¨ÕâÑùÒ»¸ö¹æÔò£¬ËüÔÚ·¢ÏÖÒÔµ¥ÒýºÅ£¨'£©¿ªÊ¼ºÍ½áÊøµÄÎı¾Ê±Éú³ÉÒ»¸ö×Ö·û´®±ê¼Ç¡£Õâ¿ÉÒÔʹÓÃÒÔÏ´úÂëʵÏÖ£º

IToken stringToken = new Token(OctavePartitions.OCTAVE_STRING);
new SingleLineRule("'", "'", stringToken, '\\');

Çåµ¥ 4 ¸ø³öÁË OctavePartitionScanner ÓÃÓÚÔÚ Octave ½Å±¾Öмì²â·ÖÇøµÄÍêÕû´úÂë¡£ÔÚÓöµ½Ç°ÃæÓÐÒ»¸ö°Ù·ÖºÅ£¨%£©²¢ÇÒºóÃæ¸ú×ÅÒ»¸öÐÂÐеÄÎı¾Ê±£¬Octave ±à¼­Æ÷½«´´½¨×¢ÊÍ·ÖÇø¡£×Ö·û´®·ÖÇøÓɵ¥ÒýºÅÈ·¶¨½çÏÞ¡£

Çåµ¥ 4. Octave IDE ·ÖÇøÉ¨ÃèÆ÷

// Declare the different tokens
IToken string = new Token(IOctavePartitions.OCTAVE_STRING);
IToken comment = new Token(IOctavePartitions.OCTAVE_COMMENT);

// Create the list of rules that produce tokens
List<IPredicateRule> rules = new ArrayList<IPredicateRule>();
rules.add(new SingleLineRule("%", "\n", comment));
rules.add(new SingleLineRule("'", "'", string));
IPredicateRule[] result = new IPredicateRule[rules.size()];
rules.toArray(result);
setPredicateRules(result);

´´½¨ OctavePartitionScanner ²¢ÇÒ³õʼ»¯Æä¹æÔòÖ®ºó£¬±à¼­Æ÷·ÖÇøµÄÅäÖþÍÍê³ÉÁË¡£ÏÂÒ»²½¾ÍÊǸæË߱༭Æ÷ÈçºÎÔÚ·ÖÇøÄÚ²¿É¨ÃèÎı¾²¢ÎªÆäÌí¼ÓÑÕÉ«¡£

ÔÚ·ÖÇøÄÚ²¿É¨ÃèÎı¾

ÈçǰËùÊö£¬DLTK ±à¼­Æ÷ÒÀ¿¿ ScriptSourceViewer ÏìÓ¦Óû§Ê¼þ£¬±ÈÈç»÷¼ü¡£¿ÉÒÔͨ¹ý ScriptSourceViewerConfiguration ¶ÔÏóÀ´µ÷Õû²é¿´Æ÷µÄ²Ù×÷¡£Ïñ ScriptTextTools ÀàÒ»Ñù£¬ÅäÖöÔÏó½öÐèÍê³ÉÉÙÁ¿¹¤×÷¡£Ïà·´£¬ËüµÄ·½·¨Ê¶±ðЭÖúÔ´´úÂë²é¿´Æ÷²Ù×÷µÄÀà¡£¶ÔÓÚÓï·¨×ÅÉ«£¬ÕâЩ ¡°°ïÖú¡± ·½·¨ÖÐ×îÖØÒªµÄÁ½¸öÊÇ£º

getPresentationReconciler()

·µ»ØÔÚ·¢Éú±ä¸üʱ¿ØÖÆÎı¾ÈçºÎÏÔʾµÄ IPresentationReconciler

initializeScanners()

·µ»ØÒ»×é AbstractScriptScanner£¬ËüÃÇÏñ RuleBasedPartitionScanner ÔÚÇ°ÃæÃèÊöµÄÄÇÑùÖ´ÐÐͬһÀàÐ͵ÄÎı¾É¨Ãè

ÕâÁ½¸ö·½·¨ÊǽôÃÜÏà¹ØµÄ¡£ÏÂÃæµÄÌÖÂÛ½âÊÍ Octave IDE ÈçºÎʵÏÖËüÃÇ£¬ÒÔÌṩÎı¾ÑÕÉ«¡£

IPresentationReconciler

¸ù¾Ý Eclipse µÄ˵·¨£¬µ÷½âÆ÷ ÊÇÒ»¸ö¸ú×ÙÎĵµÄÚÈݲ¢¶Ô¸ü¸Ä×÷³öÏìÓ¦µÄ¶ÔÏó¡£ÏÔʾµ÷½âÆ÷ ÊÇͨ¹ý¸Ä±äÎĵµµÄÏÔʾ·½Ê½À´ÏìÓ¦Îĵµ¸ü¸ÄµÄµ÷½âÆ÷¡£ÌرðÐèҪעÒâµÄÊÇ£¬IPresentationReconciler ͨ¹ýµ÷ÓÃÁ½¸ö¶ÔÏóÀ´ÏìÓ¦¸ü¸Ä£º

IPresentationDamager

¾ö¶¨ÎĵµÐ޸ĵķ¶Î§

IPresentationRepairer

´´½¨Ò»¸ö TextPresentation ¶ÔÏóÀ´ÏìÓ¦ÓÉ IPresentationDamager ʶ±ðµ½µÄ¸ü¸Ä

ÕâÁ½¸ö¶ÔÏó°´Ë³Ðò²Ù×÷¡£µ±Óû§ÔÚÒ»¸ö·ÖÇøÖÐÐÞ¸ÄÎı¾Ê±£¬IPresentationReconciler »á¸ø IPresentationDamager Ò»¸ö·ÖÇøÃû¡£ÔÚÏú»ÙÆ÷ʶ±ðµ½Ð޸ĺóµÄÇøÓòÖ®ºó£¬IPresentationRepairer ½«·ÖÎöÕâ¸öÇøÓò£¬¿´¿´ÇøÓòÖÐÎı¾ÏÔʾµÄÄÄЩµØ·½ÐèÒª¸üУ¬ÒÔ¼°ÈçºÎ¸üС£

Ϊ¼òµ¥Æð¼û£¬Eclipse Ìṩһ¸ö DefaultDamagerRepairer ×÷ΪÏú»ÙÆ÷ºÍÐÞ¸´Æ÷¡£Octave IDE ΪÕâÈý¸ö·ÖÇøµÄÿ¸ö·ÖÇø¹¹ÔìÒ»¸ö DefaultDamagerRepairer£¬²¢Ê¹Óò»Í¬µÄɨÃèÆ÷³õʼ»¯ËüÃÇ¡£Çåµ¥ 5 ÏÔʾÁËÕâ¸öµ÷½âÆ÷¡£

Çåµ¥ 5. ÅäÖÃÏÔʾµ÷½âÆ÷

// Create a DefaultDamagerRepairer for the default partition (code)
DefaultDamagerRepairer dr = new DefaultDamagerRepairer(codeScanner);
reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

// Create a DefaultDamagerRepairer for string partitions
dr = new DefaultDamagerRepairer(stringScanner);
reconciler.setDamager(dr, OctavePartitions.OCTAVE_STRING);
reconciler.setRepairer(dr, OctavePartitions.OCTAVE_STRING);

// Create a DefaultDamagerRepairer for comment partitions
dr = new DefaultDamagerRepairer(commentScanner);
reconciler.setDamager(dr, OctavePartitions.OCTAVE_COMMENT);
reconciler.setRepairer(dr, OctavePartitions.OCTAVE_COMMENT);

¾ÍÏñ·ÖÇøÉ¨ÃèÆ÷ʹÓùæÔòʶ±ð·ÖÇøÒ»Ñù£¬ËùÓÐÕâЩɨÃèÆ÷¶¼¸ù¾ÝÀàËÆµÄ¹æÔò´´½¨±ê¼Ç¡£ÏÂһС½ÚÏêϸÌÖÂÛÎı¾É¨ÃèÆ÷¡£

ÔÚ·ÖÇøÄÚɨÃèÎı¾

ScriptSourceViewerConfiguration µÄ¹¹ÔìÆ÷µ÷Óà initializeScanners() ´´½¨·ÖÎöÎı¾ËùÐèµÄɨÃèÆ÷¡£Çåµ¥ 6 ÏÔʾ OctaveSourceViewerConfiguration ÀàÖÐ initializeScanners() µÄÍêÕûʵÏÖ¡£

Çåµ¥ 6. ´´½¨½Å±¾É¨ÃèÆ÷

private AbstractScriptScanner codeScanner, stringScanner, commentScanner;

protected void initializeScanners() {

// Create a scanner for the script code
codeScanner = new OctaveCodeScanner(getColorManager(), fPreferenceStore);

// Create a scanner for string partitions
stringScanner = new SingleTokenScriptScanner(getColorManager(),
fPreferenceStore, IOctavePartitions.OCTAVE_STRING);

// Create a scanner for comment partitions
commentScanner = new SingleTokenScriptScanner(getColorManager(),
fPreferenceStore, IOctavePartitions.OCTAVE_COMMENT);
}

ÓÉÓÚ·ÖÇøÉ¨ÃèÆ÷ÒѾ­Ê¶±ð×Ö·û´®ºÍ×¢ÊÍ£¬Òò´Ë²»ÐèÒªÖØÐ·ÖÎöÕâЩ·ÖÇø¡£ËùÒÔ stringScanner ºÍ commentScanner ¶¼ÊÇ SingleTokenScriptScanner¡£Õâ¸öÀಢ²»¸ù¾Ý¹æÔò×ö³ö¾ö¶¨£¬µ«Í¨³£·µ»ØÏàͬÀàÐ굀 IToken¡£ÀýÈ磬stringScanner ·µ»ØÒ»¸öÓà OctavePartitions.OCTAVE_STRING ³õʼ»¯µÄ±ê¼Ç£¬ÒÔ¼° commentScanner ·µ»ØÒ»¸öÓà OctavePartitions.OCTAVE_COMMENT ³õʼ»¯µÄ±ê¼Ç¡£ÉÔºóÄú½«¿´µ½ÕâЩ±ê¼ÇÊôÐÔÈçºÎ¾ö¶¨Îı¾µÄÑÕÉ«¡£

codeScanner ÓõÃ×î¶à£¬²¢ÇÒÊÇ IDE Îı¾·ÖÎöµÄÖ÷Á¦¡£Õâ¸öɨÃèÆ÷ÊÇÒ»¸ö OctaveCodeScanner£¬ËüÏñ PartitionTokenScanner Ò»Ñù¸ù¾Ý¹æÔò´´½¨±ê¼Ç¡£Ëü²¢²»»ùÓÚ MultiLineRule »ò SingleLineRule£¬¶øÊÇ»ùÓÚÁ½¸ö IRule ʵÏÖ£º

WordRule

µ±É¨ÃèÆ÷Óöµ½Ìض¨µÄµ¥´Êʱ·µ»ØÒ»¸ö±ê¼Ç

NumberRule

µ±É¨ÃèÆ÷Óöµ½Êý×Öʱ·µ»ØÒ»¸ö±ê¼Ç

ÕâЩ¹æÔòÔÚ OctaveCodeScanner µÄ createRules ·½·¨Öд´½¨¡£Çåµ¥ 7 ÍêÕûµØÏÔʾÁËÕâ¸ö·½·¨¡£

Çåµ¥ 7. ´´½¨½Å±¾É¨ÃèÆ÷

protected List<IRule> createRules() {

// Create tokens
IToken keywordToken = getToken(DLTKColorConstants.DLTK_KEYWORD);
IToken numberToken = getToken(DLTKColorConstants.DLTK_NUMBER);
IToken defaultToken = getToken(DLTKColorConstants.DLTK_DEFAULT);

// Create and populate list
List<IRule> ruleList = new ArrayList<IRule>();

// Create word rule to detect keywords
WordRule wordRule = new WordRule(new OctaveWordDetector(), defaultToken);
for (int i = 0; i < IOctaveKeywords.keywords.length; i++)
wordRule.addWord(IOctaveKeywords.keywords[i], keywordToken);
ruleList.add(wordRule);

// Create number rule to detect numbers
NumberRule numberRule = new NumberRule(numberToken);
ruleList.add(numberRule);

// Set the token returned for default text
setDefaultReturnToken(defaultToken);
return ruleList;
}

±ØÐ뽫ÔÚÇåµ¥ 7 Öд´½¨µÄ±ê¼ÇÓëÇåµ¥ 4 Öеıê¼ÇÇø·Ö¿ªÀ´¡£Token ¹¹ÔìÆ÷¿ÉÒÔÒÔÈκΠObject Ϊ²ÎÊý£¬²¢ÇÒÕâ¸ö Object ¸æËß±ê¼Ç½ÓÊÕÕßÓ¦¸Ã²ÉȡʲôÐж¯¡£ÔÚÇåµ¥ 4 ÖУ¬Ê¹ÓøæËß FastPartitioner ÈçºÎ¸üÐÂÎĵµ·ÖÇøµÄ·ÖÇøÃû³õʼ»¯ Token¡£ÔÚÇåµ¥ 7 ÖУ¬Ê¹ÓøæËß IDE ÈçºÎÔڱ༭Æ÷ÖÐÏÔʾÎı¾µÄ TextPresentation ¶ÔÏó³õʼ»¯ Token¡£

Çåµ¥ 7 ͨ¹ýµ÷Óà getToken ½«Ã¿¸ö Token ÓëÒ»¸ö TextPresentation ¹ØÁªÆðÀ´¡£Õâ¸ö·½·¨ËÑË÷ÓÉÓû§Ê×Ñ¡ÏîÌî³äµÄ Map¡£ÒªÀí½âÕâ¸öÓ³ÉäÊÇÈçºÎ¸üÐµģ¬±ØÐëÏÈÀí½â DLTK Ê×Ñ¡ÏîÊÇÈçºÎ¹¤×÷µÄ¡£Õâ¾ÍÊǽÓÏÂÀ´µÄÌÖÂÛÖ÷Ìâ¡£

ÅäÖà DLTK Ê×Ñ¡Ïî

Ç°ÃæµÄÌÖÂÛÏÔʾÁËÓû§Ê×Ñ¡ÏîÈçºÎ¾ö¶¨Îı¾ÏÔʾ¡£ÏÖÔÚÎÒÃǸü½øÒ»²½£¬ÑÝʾÈçºÎ´´½¨½ÓÊÕÓû§Ê×Ñ¡ÏîµÄÒ³Ãæ¡£Äú¿ÉÒÔͨ¹ýµ¥»÷ Eclipse ÖÐµÄ Window > Preferences À´·ÃÎÊÕâЩÊ×Ñ¡Ïî¡£ÔÚÌÖÂÛµÄ×îºó£¬ÎÒ½«½âÊÍÓû§Ê×Ñ¡ÏîÈçºÎ½«½Å±¾½âÊÍÆ÷¼¯³Éµ½ IDE ÖС£

Ê×Ñ¡Ïî´æ´¢

Eclipse µÄÊ×Ñ¡Ïî´æ´¢ ¾ÍÏñÒ»¸öÊôÐÔÎļþ£ºËü°üº¬ÓÃÓÚʶ±ðÓû§Ê×Ñ¡ÏîÉèÖõÄÃû³Æ-Öµ¶Ô¡£µ«ËüÃÇÖ®¼äÓÐÁ½´¦ÖØÒªÇø±ð¡£³ýÁ˵±Ç°ÖµÖ®Í⣬ÿ¸öÊ×Ñ¡Ïî¶¼°üº¬Ò»¸öĬÈÏÖµ£¬²¢ÇÒÊ×Ñ¡ÏîÖµ±ØÐëÊÇÒÔÏ 6 Öлù±¾ÀàÐÍÖ®Ò»£º

Boolean

int

long

float

double

String

ͨ¹ýµ÷ÓÃÓÉ IPreferenceStore ½Ó¿Ú¶¨ÒåµÄ·½·¨À´´æ´¢ºÍ»ñÈ¡Ê×Ñ¡Ïî¡£setValue ºÍ setDefaultValue ·½·¨Ìí¼Ó²¢¸üÐÂÊ×Ñ¡Ïî¡£Òª»ñÈ¡Ê×Ñ¡ÏîµÄÖµ£¬¿ÉÒÔµ÷Óà getBoolean¡¢getInt¡¢getLong¡¢getFloat¡¢getDouble »ò getString Ö®Ò»¡£ÓÐһЩÀàËÆµÄ·½·¨¿ÉÒÔ·ÃÎÊĬÈÏÖµ£¬±ÈÈç getDefaultDouble¡£

Òª·ÃÎÊÓë SWT ¶ÔÏóÓйصÄÊ×Ñ¡ÏÓÈÆäÊÇ RGB¡¢Rectangle¡¢FontData ºÍ FontData[] ¶ÔÏ󣩣¬¿ÉÒÔµ÷Óà PreferenceConverter ÀàÖеķ½·¨¡£

ÔÚ³õʼ»¯ÆÚ¼ä£¬DLTK ScriptEditor ´´½¨ÁËÒ»¸ö°üº¬ 4 ¸ö IPreferenceStore ¶ÔÏóµÄ ArrayList£º

ScopedPreferenceStore£¬ÊÇΪ Octave ²å¼þ£¨org.dworks.octaveide£©´´½¨µÄ

ScopedPreferenceStore£¬ÊÇΪ Eclipse Îı¾±à¼­Æ÷²å¼þ£¨org.eclipse.ui.editors.text£©´´½¨µÄ

Ò»¸öÌṩÓëÏîÄ¿ÓйصÄÊ×Ñ¡ÏîµÄ EclipsePreferencesAdapter£¬°üº¬ÐèÒª±à¼­µÄ½Å±¾

Ò»¸ö PreferencesAdapter£¬°üº¬Óë DLTK ºËÐÄÏà¹ØÁªµÄÊ×Ñ¡Ïî

ÕâЩ´æ´¢±»ºÏ²¢³ÉÒ»¸ö ChainedPreferenceStore¡£Èç¹ûÁ½¸ö»òÁ½¸öÒÔÉϵÄÊ×Ñ¡Ïî´æ´¢°üº¬ÏàͬµÄÊ×Ñ¡ÏÔòÓÉÏÈÌí¼ÓµÄ´æ´¢Ìṩֵ¡£

³õʼ»¯Ê×Ñ¡Ïî

Eclipse ÔÊÐí³õʼ»¯ÆÚ¼äʹÓÃÀ©Õ¹µã org.eclipse.core.runtime.preferences ÉèÖÃÊ×Ñ¡Ïî¡£Octave IDE À©Õ¹Õâ¸öµã²¢½« OctavePreferenceInitializer Àà±êʶΪΪ IDE Ê×Ñ¡ÏîÌṩĬÈÏÖµ¡£·´¹ýÀ´£¬OctavePreferenceInitializer ÀàÓÖÀ©Õ¹³éÏóÀà AbstractPreferenceInitializer£¬ºóÕßΩһҪÇóµÄ·½·¨ÊÇ initializeDefaultPreferences¡£IDE ÔÚ³õʼ»¯ÆÚ¼äµ÷ÓÃÕâ¸ö·½·¨¡£Çåµ¥ 8 ÏÔʾÁËÈçºÎͨ¹ý´úÂëʵÏÖËü¡£

Çåµ¥ 8. ³õʼ»¯Ä¬ÈÏÊ×Ñ¡Ïî

public void initializeDefaultPreferences() {
IPreferenceStore store = OctavePlugin.getDefault().getPreferenceStore();
OctavePreferenceConstants.initializeDefaultValues(store);
}

Õâ¸ö¼òµ¥µÄÀý³Ì·ÃÎÊ Octave ²å¼þµÄÊ×Ñ¡Ïî´æ´¢£¬²¢µ÷Óà OctavePreferenceConstants ÀàÀ´³õʼ»¯´æ´¢µÄÖµ¡£ËüÊÇ DLTK µÄ PreferenceConstants ÀàµÄ×ÓÀ࣬PreferenceConstants ÀàÄܹ»¶¨Òå²¢³õʼ»¯¸÷ÖÖ³£¼ûµÄ½Å±¾Ê×Ñ¡Ïî¡£ÔÚ±¾½Ì³ÌÖУ¬½ö³õʼ»¯ÓÃÓÚ´¦ÀíÓï·¨ÑÕÉ«µÄÊ×Ñ¡Ïî¡£Çåµ¥ 9 չʾÈçºÎʵÏÖ³õʼ»¯¡£

Çåµ¥ 9. ÉèÖÃÓï·¨ÑÕÉ«Ê×Ñ¡Ïî

public static void initializeDefaultValues(IPreferenceStore store) {

// Set default preferences for the editor
PreferenceConstants.initializeDefaultValues(store);

// Make keywords blue and bold
PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_KEYWORD,
new RGB(40, 0, 200));
store.setDefault(DLTKColorConstants.DLTK_KEYWORD +
PreferenceConstants.EDITOR_BOLD_SUFFIX, true);

// Set default values for other preferences
PreferenceConverter.setDefault(store,
DLTKColorConstants.DLTK_SINGLE_LINE_COMMENT, new RGB(25, 200, 25));
PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_NUMBER,
new RGB(255, 25, 25));
PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_STRING,
new RGB(50, 100, 100));
}

Octave Ê×Ñ¡ÏîµÄµÚÒ»¸öÑ¡ÏîÓÃÓÚ´¦Àí¹Ø¼ü×Ö¡£ËüµÄ´úÂëͨ¹ýÁ½¸ö²½ÖèÔÚ IDE ÖÐÅäÖùؼü×ÖµÄÑÕÉ«ºÍÑùʽ£¨bold/italics/strikethrough£©¡£Ê×ÏÈ£¬µ÷Óà PreferenceConverter ½« DLTKColorConstants.DLTK_KEYWORD ÓëÀ¶É«¹ØÁªÆðÀ´¡£Æä´Î£¬µ÷Óà store.setDefault ·½·¨½« DLTKColorConstants.DLTK_KEYWORD + PreferenceConstants.EDITOR_BOLD_SUFFIX ºÍ true ¹ØÁªÆðÀ´¡£ÕâÁ½ÐдúÂëÈ·±£ÔÚʹÓà DLTKColorConstants.DLTK_KEYWORD ³õʼ»¯ÈκΠToken ʱ£¬ÏàÓ¦µÄÎı¾¾ÍÏÔʾΪ´ÖÌåÀ¶É«¡£

Preference pages ºÍ configuration blocks

ÏÖÔÚÄúÒѾ­ÖªµÀÈçºÎ³õʼ»¯Ê×Ñ¡ÏÄÇôҲӦ¸ÃΪÓû§ÌṩÅäÖÃÊ×Ñ¡ÏîµÄ»ú»á¡£Eclipse ͨ¹ý preference pages À´ÊµÏÖÕâ¸ö¹¦ÄÜ¡£DLTK ʹÓóÆÎª configuration blocks µÄ¶ÔÏó¼ò»¯ÁËÕâÐ©Ò³ÃæµÄÅäÖùý³Ì¡£Õâ¸öС½Ú½«ÃèÊöÕâÁ½¸öÀ࣬ÒÔ¼°ËüÃÇÈçºÎЭ×÷ÒÔÔÚ Octave IDE ÖÐÌṩÓû§Ê×Ñ¡Ïî¡£

Eclipse preference pages

µ¥»÷ Eclipse ÖÐµÄ Window > Preferences ʱ£¬Preferences ´°¿ÚµÄ×ó±ßÃæ°å½«ÒÔ²ã´Î½á¹¹µÄ·½Ê½ÏÔʾÓû§¿ÉÅäÖõÄÑ¡Ïî¡£¶ÔÓÚ Octave IDE£¬ÄúÐèҪʹÓÃÒ»¸ö³ÆÎª Octave ²¢´øÓÐ×ÓÊ×Ñ¡ÏîµÄ¶¥¼¶Ê×Ñ¡ÏÓÃÓÚ´¦ÀíÓï·¨ÑÕÉ«ºÍ Octave ½âÊÍÆ÷¡£Í¼ 4 ÏÔʾÁËÕâ¸ö´°¿Ú¡£

ͼ 4. Octave Ê×Ñ¡Ïî´°¿Ú

ÔÚ Octave ÏîÄ¿ÖУ¬plugin.xml ͨ¹ýÀ©Õ¹ org.eclipse.ui.preferencePages ¶¨Òå 3 ¸öÊ×Ñ¡ÏîÖ÷Ì⡣ÿ¸öÀ©Õ¹¶¼ÐèÒª¾ßÓÐ id¡¢name ºÍ class ÊôÐÔ¡£Á½¸ö×ÓÊ×Ñ¡Ïî¾ßÓÐÒ»¸ö¶îÍâÊôÐÔ category£¬ËüÃüÃû¸¸Ê×Ñ¡ÏîµÄ id¡£Çåµ¥ 10 ¸ø³öÁËÕâЩÀ©Õ¹¡£

Çåµ¥ 10. Octave Ê×Ñ¡ÏîÀ©Õ¹

<extension point="org.eclipse.ui.preferencePages">
<page
class="org.dworks.octaveide.preferences.OctaveMainPreferencePage"
id="org.dworks.octaveide.preferences.OctaveMainPreferencePage"
name="%MainPreferencePage.name"/>
<page
category="org.dworks.octaveide.preferences.OctaveMainPreferencePage"
class="org.dworks.octaveide.preferences.OctaveSyntaxColorPage"
id="org.dworks.octaveide.preferences.OctaveSyntaxColorPage"
name="%SyntaxColorPreferencePage.name"/>
<page
category="org.dworks.octaveide.preferences.OctaveMainPreferencePage"
class="org.dworks.octaveide.preferences.OctaveInterpreterPreferencePage"
id="org.dworks.octaveide.preferences.OctaveInterpreterPreferencePage"
name="%InterpreterPreferencePage.name"/>
</extension>

class ÊôÐÔÃüÃûÒ»¸öʵÏÖ IWorkbenchPreferencePage£¨IPreferencePage µÄ×Ó½Ó¿Ú£©µÄÀà¡£DLTK ÌṩËü×Ô¼ºµÄ IWorkbenchPreferencePage ʵÏÖ£¬³ÆÎª AbstractConfigurationBlockPreferencePage¡£DLTK »¹Ìṩ¼¸¸öÓÐÆäËûÓÃ;µÄ×ÓÀࡣͼ 5 ÃèÊöÁËÕâЩÀà½Ó¿ÚµÄ¹ØÏµ¡£

ͼ 5. Preference page ÀàµÄ²ã´Î½á¹¹

Çåµ¥ 10 ÖÐµÄ 3 ¸öÀà¶¼ÊÇ AbstractConfigurationBlockPreferencePage µÄÖ±½Ó×ÓÀà¡£²é¿´ËüÃÇµÄ Java Îļþʱ£¬¿ÉÒÔ¿´µ½ËüÃǰüº¬µÄ´úÂëºÜÉÙ¡£Ã¿¸öÀàÌṩһ¸ö ID¡¢Ò»¸ö±êÇ©£¬ÒÔ¼°µ½²å¼þµÄÊ×Ñ¡Ïî´æ´¢µÄ·ÃÎÊ¡£´ËÍ⣬ÿ¸ö AbstractConfigurationBlockPreferencePage ±ØÐëʵÏÖ·½·¨ createConfigurationBlock()£¬¸Ã·½·¨¹¹ÔìÌá¹©Ò³ÃæÍ¼ÐÎÔªËØµÄ¶ÔÏó¡£Õâ¸ö¶ÔÏó±ØÐëʵÏÖ DLTK ½Ó¿Ú IPreferenceConfigurationBlock¡£ÏÂһС½Ú½«ÌÖÂÛÕâ¸öÖØÒªµÄ½Ó¿Ú¡£

DLTK configuration blocks

¶Ô³ÊÏÖ IDE Ê×Ñ¡Ïî¶øÑÔ£¬×îÄѵIJ¿·Ö¾ÍÊǹ¹½¨ UI¡£ÀýÈ磬Octave Óï·¨×ÅÉ«Ê×Ñ¡ÏîÒ³Ãæ²»½öÔÊÐíÓû§Ñ¡ÔñÑÕÉ«ºÍÑùʽ£¬²¢ÇÒ»¹Ìṩһ¸öÓÃÓÚÏÔʾʵ¼ÊЧ¹ûµÄǶÈëʽÎı¾±à¼­Æ÷¡£´ÓÍ·¹¹½¨ÕâЩͼÐοؼþ·Ç³£ºÄ·Ñʱ¼ä£¬²»¹ý DLTK µÄ IPreferenceConfigurationBlock Äܹ»°ïÉÏ´óæ¡£Í¼ 6 ÏÔʾÁË configuration block ÀàµÄ²ã´Î½á¹¹¡£

ͼ 6. Configuration block ÀàµÄ²ã´Î½á¹¹

Óï·¨×ÅÉ« configuration block Àà

Ïà¹ØµÄµÚÒ»¸öÀàÊÇ AbstractScriptEditorColoringConfigurationBlock£¬ËüΪÓû§ÌṩÓï·¨×ÅÉ«Ê×Ñ¡Ïî¡£ÓÉ createSyntaxPage ·½·¨Íê³ÉÖ÷Òª¹¤×÷£¬¼´´´½¨Í¼ÐÎÊ×Ñ¡ÏîÒ³Ãæ¡£¾ßÌåÀ´½²£¬Ëü¹¹ÔìÁËÒ»¸ö TreeViewer£¬ÒÔÏÔʾÓï·¨ÀàÐͺÍÒ»×éÓÃÓÚ±íʾÑÕÉ«ºÍÑùʽÊ×Ñ¡ÏîµÄ°´Å¥¡£È»ºó£¬Ëüµ÷Óà createPreviewer ¹¹½¨Ç¶ÈëʽÎı¾±à¼­Æ÷¡£

Octave ²å¼þ´úÂë°üº¬ AbstractScriptEditorColoringConfigurationBlock µÄÒ»¸ö×ÓÀ࣬³ÆÎª OctaveSyntaxColorConfigurationBlock¡£³ýÁ˹¹ÔìÆ÷Ö®Í⣬»¹ÊµÏÖÁË 4 ¸ö·½·¨£º

createPreviewViewer

·µ»ØÒ»¸ö°üΧǶÈëʽÎı¾±à¼­Æ÷µÄ²é¿´Æ÷

createSimpleSourceViewerConfiguration

·µ»ØÒ»¸öÔÚǶÈëʽÎı¾±à¼­Æ÷ÖÐÅäÖò鿴Æ÷µÄ»ù±¾¶ÔÏó

setDocumentPartitioning

µ÷Óà IDocumentSetupParticipant À´ÉèÖÃÎĵµµÄ·ÖÇø

getSyntaxColorListModel

·µ»ØÒ»¸ö 2-D Êý×飬Ëüʶ±ð¿ÉÒÔÌí¼ÓÑÕÉ«µÄ²»Í¬Óï·¨ÀàÐÍ£¬ÒÔ¼°Ê×Ñ¡Ïî´æ´¢ÖеĶÔÓ¦¼ü

ǰ 3 ¸ö·½·¨ºÜºÃÀí½â£¬ÒòΪǶÈëʽÎı¾±à¼­Æ÷²»ÐèÒª¸´ÔӵIJ鿴Æ÷¡¢²é¿´Æ÷ÅäÖöÔÏó»òÎĵµÉèÖòÎÓëÕß¡£È»¶ø×îºóÒ»¸ö·½·¨ getSyntaxColorListModel ÐèÒª½âÊÍһϡ£Õâ¸ö·½·¨Ìṩһ¸ö 2-D Êý×飬ËüµÄÔªËØ¶ÔÓ¦ÓÚÒ³ÃæµÄ TreeViewer ÖеÄÓï·¨ÀàÐÍ¡£Ã¿¸öÔªËØÐèÒª¾ßÓÐ 3 ¸öÐÅÏ¢£ºÃû³Æ¡¢Àà±ðºÍÒ³ÃæÊ×Ñ¡Ïî´æ´¢ÖеĶÔÓ¦¼ü¡£

»Ø¹ýÍ·À´¿´¿´Õâ¸öÀý×Ó£¬Í¼ 4 ±íÃ÷ Octave Óï·¨ÑÕɫģÐͰüº¬ 4 ¸öÓï·¨ÀàÐÍ£ºkeywords¡¢numbers¡¢strings ºÍ single-line comments¡£Ç° 3 ¸öÓï·¨ÀàÐÍÊôÓÚ General ·¶Î§£¬¶ø×îºóÒ»¸öÓï·¨ÀàÐÍÊôÓÚ Comment ·¶Î§¡£Çåµ¥ 11 ÖеĴúÂëÏÔʾÁËÈçºÎÔÚ OctaveSyntaxColorConfigurationBlock.getSyntaxColorListModel ÖÐÅäÖÃÕâЩÀàÐÍ¡£

Çåµ¥ 11. ´´½¨Óï·¨ÑÕÉ«ÁбíÄ£ÐÍ

protected String[][] getSyntaxColorListModel() {
return new String[][] {
{ "Single-Line Comments", DLTKColorConstants.DLTK_SINGLE_LINE_COMMENT,
sCommentsCategory },
{ "Keywords", DLTKColorConstants.DLTK_KEYWORD, sCoreCategory },
{ "Strings", DLTKColorConstants.DLTK_STRING, sCoreCategory },
{ "Numbers", DLTKColorConstants.DLTK_NUMBER, sCoreCategory }};
}

µ±Óû§ÔÚÒ³ÃæÖиü¸ÄÊ×Ñ¡ÏîÉèÖò¢µ¥»÷ OK ʱ£¬Ò³Ã潫¸üÐÂÊ×Ñ¡Ïî´æ´¢ÖÐÏàÓ¦µÄÖµ¡£±à¼­Æ÷ͨ¹ý¸üÐÂÎı¾µÄ±íʾÀ´ÏìÓ¦Ê×Ñ¡Ïî¸ü¸Ä¡£

½âÊÍÆ÷Ê×Ñ¡Ïî

ͼ 4 ÖеÄ×îºóÒ»¸öÊ×Ñ¡ÏîÑ¡ÏîÓÃÓÚÉèÖà IDE µÄ½Å±¾½âÊÍÆ÷¡£DLTK ÌṩÁ½¸öÀàÀ´ÊµÏÖÕâ¸ö¹¦ÄÜ£ºScriptInterpreterPreferencePage ºÍ InterpretersBlock¡£InterpretersBlock ´´½¨Ò³ÃæµÄͼÐοؼþ£¬ÆäÖаüº¬Ò»¸öÌṩ˵Ã÷µÄ Label£»Ò»¸öÁгöËùÓпÉÓýâÊÍÆ÷µÄ CheckboxTableViewer£»ÒÔ¼°Ò»×éÔÊÐíÓû§Ìí¼Ó¡¢±à¼­¡¢¸´ÖÆ¡¢É¾³ýºÍËÑË÷½âÊÍÆ÷µÄ°´Å¥¡£Í¼ 7 ÏÔʾÁËÕâ¸öÒ³Ãæ£¬ÒÔ¼°Óû§µ¥»÷ Add ʱ³öÏֵĴ°¿Ú¡£

ͼ 7. ½âÊÍÆ÷Ê×Ñ¡ÏîÒ³ÃæºÍ´°¿Ú

³éÏóÀà InterpretersBlock ÒªÇó×ÓÀàʵÏÖÁ½¸ö·½·¨£ºgetCurrentNature ºÍ createInterpreterDialog¡£µÚÒ»¸ö·½·¨·µ»ØÒ»¸ö±íʾ½âÊÍÆ÷¡¢Ô´´úÂëÓïÑÔºÍÆäËûÏà¹Ø¶ÔÏóµÄ String¡£Í¨³£ÔÚ DLTK À©Õ¹µãÖÐʹÓÃÕâÖÖÌØÕ÷£¬Ëü·Ç³£ÖØÒª¡£Èç¹ûÄúµÄ Eclipse Ϊ²»Í¬µÄ¶¯Ì¬ÓïÑÔ°üº¬¶à¸ö»ùÓÚ DLTK µÄÌØÐÔ£¬¾ÍºÜÈÝÒ׸ù¾Ý¸÷×ÔµÄÌØÕ÷Çø·ÖËüÃÇ¡£

µÚ¶þ¸ö·½·¨ createInterpreterDialog ¹¹ÔìÒ»¸ö´°¿Ú£¬µ±Óû§ÔÚÊ×Ñ¡ÏîÒ³ÃæÉϵ¥»÷ Add ʱµ¯³ö¡£Õâ¸ö´°¿Ú£¨¼ûͼ 7£©±ØÐëÖÁÉÙ°üº¬ 4 ¸öÐÅÏ¢Ö®Ò»£º¿ÉÖ´ÐнâÊÍÆ÷µÄλÖᢽâÊÍÆ÷µÄÃû³Æ¡¢½âÊÍÆ÷µÄÀàÐÍ£¬ÒÔ¼°½âÊÍÆ÷ÐèÒªÖ´ÐеĿâµÄλÖá£Òª¹¹ÔìÕâ¸ö´°¿Ú£¬createInterpreterDialog ·½·¨ÐèÒª DLTK Àà AddScriptInterpreterDialog µÄÒ»¸öʵÀý¡£

AddScriptInterpreterDialog ¹¹ÔìÆ÷½ÓÊÜÒ»¸ö½âÊÍÆ÷ÀàÐ͵ÄÊý×éºÍÒ»¸öʵÏÖ IInterpreterInstall µÄ¶ÔÏó¡£¾ßÓжà¸ö½âÊÍÆ÷ÀàÐÍʹ IDE Äܹ»Ö§³ÖͬһÓïÑԵĶà¸ö½âÊÍÆ÷¡£Octave IDE ½öÖ§³ÖÒ»ÖÖ°²×°ÀàÐÍ£¬²¢ÇÒʹÓà org.eclipse.dltk.launching.interpreterInstallTypes µÄÒ»¸öÀ©Õ¹ÔÚ plugin.xml Öбêʶ¸ÃÀàÐÍ¡£ÕâЩÊ×Ñ¡ÏîÀ©Õ¹ÈçÇåµ¥ 12 Ëùʾ¡£

Çåµ¥ 12. Octave Ê×Ñ¡ÏîÀ©Õ¹

<extension point="org.eclipse.dltk.launching.interpreterInstallTypes">
<interpreterInstallType
class="org.dworks.octaveide.launch.OctaveInterpreterInstallType"
id="org.dworks.octaveide.launch.OctaveInterpreterInstallType">
</interpreterInstallType>
</extension>

class ÊôÐÔ±êʶһ¸öʵÏÖ IInterpreterInstallType µÄ¶ÔÏó¡£Ã¿¸ö°²×°ÀàÐͶ¼ÓÐÒ»¸öÃû³Æ¡¢ID ºÍÌØÕ÷£¨Ò»¸öÓÃÓÚ±êʶ½âÊÍÆ÷ºÍÔ´ÀàÐ굀 String£©£¬ÒÔ¼°½âÊÍÆ÷ºÍËùÓбØÐè¿âµÄλÖá£ÁíÍ⣬ÿ¸ö IInterpreterInstallType ±ØÐë´´½¨Ò»¸öÒÔÉ쵀 IInterpreterInstall ¶ÔÏó¡£

¾¡¹Ü IInterpreterInstallType ¶ÔÏó¶¨ÒåÁ˽âÊÍÆ÷°²×°µÄÒ»¸öÀ࣬µ«»¹±ØÐëΪÿ¸öÌØ¶¨°²×°´´½¨Ò»¸ö IInterpreterInstall ¶ÔÏó¡£Õâ¸ö¶ÔÏóÓÃ×÷½âÊÍÆ÷µÄÖ÷Êý¾Ý´æ´¢¶ÔÏó£¬Ëü°üº¬ÒÔÏÂÐÅÏ¢£º

1.Ãû³Æ

½âÊÍÆ÷°²×°µÄ±êÇ©

2.ID

½âÊÍÆ÷°²×°µÄÂß¼­±êʶ·û

3.ÌØÕ÷

IDE µÄÂß¼­±êʶ·û£¨½âÊÍÆ÷ºÍÔ´ÎļþµÈ£©

4.°²×°Î»ÖÃ

½âÊÍÆ÷°²×°µÄ·¾¶

5.¿âµÄλÖÃ

½âÊÍÆ÷ËùÐèµÄ¿âµÄ·¾¶

6.Ö´Ðл·¾³

»·¾³±äÁ¿ºÍ½ø³ÌÅäÖÃ

7.½âÊÍÆ÷²ÎÊý

Ö¸Ïò½âÊÍÆ÷µÄ²ÎÊý

×îºó£¬Ã¿¸ö IInterpreterInstall ±ØÐëÌṩ¶Ô IInterpreterRunner ¶ÔÏóµÄ·ÃÎÊ¡£Õâ¸ö¶ÔÏó¸ºÔðʵ¼ÊÆô¶¯½âÊÍÆ÷£¬ÏÂһС½Ú²»½öÌÖÂÛËüµÄ¹¤×÷·½Ê½£¬»¹ÌÖÂÛËüÈçºÎÈÚÈëµ½½âÊÍÆ÷-IDE ½»»¥ÖС£

DLTK ½âÊÍÆ÷ºÍ¿ØÖÆÌ¨

DLTK Ó¦ÓóÌÐòµÄ×îÖØÒªÌØÐÔ²»ÊÇÎı¾±à¼­Æ÷»òÊ×Ñ¡Ï¶øÊÇʵÏÖͨ¹ýµ¥»÷°´Å¥Æô¶¯½âÊÍÆ÷ÒÔ¼°ÔÚ IDE ¿ØÖÆÌ¨Öв鿴ËüµÄÊä³ö¡£DLTK ½âÊÍÆ÷ºÍ¿ØÖÆÌ¨ÊǽôÃܹØÁªµÄ£¬Í¨¹ý´úÂë¹ÜÀíËüÃǷdz£¸´ÔÓ¡£ÔÚÉîÈëÁ˽âËùÓÐÀàºÍ½Ó¿Ú֮ǰ£¬ÏÖÔÚÏÈ´óÖÂÁ˽âһϵ±Óû§µ¥»÷ Run ʱ´¥·¢µÄʼþ£º

IDE ͨ¹ý´´½¨Ò»¸öÆô¶¯¶ÔÏóÀ´ÏìÓ¦µ¥»÷°´Å¥Ê¼þ£¬´Ó¶øÊÕ¼¯Æô¶¯ÐÅÏ¢²¢ÎªÆô¶¯Ìí¼ÓÒ»¸ö½ø³Ì¡£

Æô¶¯µÄ´´½¨½«Í¨ÖªËùÓÐÆô¶¯¼àÌýÆ÷£¬°üÀ¨ DLTK ¿ØÖÆÌ¨¹ÜÀíÆ÷¡£

¿ØÖÆÌ¨¹ÜÀíÆ÷»ñµÃÆô¶¯ÐÅÏ¢£¬²¢Ê¹ÓøÃÐÅÏ¢´´½¨ 3 ¸ö¶ÔÏó£ºÒ»¸ö¿ØÖÆÌ¨·þÎñÆ÷£¬Ò»¸ö½âÊÍÆ÷¶ÔÏóºÍÒ»¸ö¿ØÖÆÌ¨¹¤³§¡£

¿ØÖÆÌ¨·þÎñÆ÷´´½¨Ò»¸öÌ×½Ó×Ö£¨Ä¬È϶˿ÚÊÇ 25000£©£¬È»ºóµÈ´ýÁ¬½Ó¡£

¿ØÖÆÌ¨¹¤³§Æô¶¯½âÊÍÆ÷²¢´´½¨Ò»¸ö¿ØÖÆÌ¨¡£

¿ØÖÆÌ¨¹ÜÀíÆ÷·ÃÎÊ Eclipse ¿ØÖÆÌ¨²å¼þ²¢Ìí¼ÓеĿØÖÆÌ¨¡£

DLTK Àà´¦Àí´ó²¿·ÖÊÂÇ飬µ«ÄúÈÔÈ»ÐèÒªÍê³ÉһЩÊÂÇé¡£Octave IDE ±ØÐëÖ§³ÖÓë Octave Ïà¹ØµÄÆô¶¯£¬È»ºóÐèÒªÌØ¶¨ÓÚ Octave µÄÀàÀ´¹ÜÀí¿ØÖÆÌ¨ºÍ½âÊÍÆ÷¡£ÕâÀォÖðÒ»ÌÖÂÛÕâЩÖ÷Ìâ¡£

ÅäÖà DLTK Æô¶¯

ÔÚ Eclipse ÖУ¬Æô¶¯Ó¦ÓóÌÐòµÄ¹ý³Ì³ÆÎªÔÚ Run Ä£ÐÍÏÂÆô¶¯Ó¦ÓóÌÐò¡£ÓÉÓÚ Eclipse Ö§³ÖÐí¶àÆô¶¯Ö´ÐÐÎļþ£¬ËùÒÔÄúҪȷ±£µ±Óû§Ö´ÐÐ Octave ½Å±¾Ê±Æô¶¯ Octave ½âÊÍÆ÷¡£ÕâÖÖ¹ØÁªÍ¨¹ýÆô¶¯ÅäÖÃÀàÐÍ À´ÊµÏÖ£¬²¢ÇÒͨ¹ýÔÚ Eclipse Öе¥»÷ Run > Run ¿ÉÒÔ¿´µ½ËùÓпÉÓõÄÀàÐÍ¡£Í¼ 8 ÏÔʾÁËÆô¶¯ÅäÖÃÀàÐÍ¡£

ͼ 8. Octave Æô¶¯ÅäÖÃÀàÐÍ

ҪΪ Octave ´´½¨Æô¶¯ÅäÖÃÀàÐÍ£¬µÚÒ»²½¾ÍÊǽ« org.eclipse.debug.core.launchConfigurationTypes µÄÒ»¸öÀ©Õ¹Ìí¼Óµ½ plugin.xml¡£ÔÚͼ 8 ÖУ¬¿ÉÒÔ¿´µ½ÔÚ´°¿ÚÖÐÑ¡ÖÐµÄ Octave ÅäÖÃÀàÐÍ¡£Çåµ¥ 13 ¸ø³öÁ˶¨ÒåÕâ¸öÐÂÀàÐ͵ÄÀ©Õ¹¡£

Æô¶¯ 13. ¶¨Òå Octave Æô¶¯ÅäÖÃÀàÐÍ

<extension point="org.eclipse.debug.core.launchConfigurationTypes">
<launchConfigurationType
id="org.dworks.octaveide.launch.OctaveLaunchConfigurationType"
delegate="org.dworks.octaveide.launch.OctaveLaunchConfigurationDelegate"
modes="run"
public="true"
name="%OctaveLaunchConfigurationType.name"
</launchConfigurationType>
</extension>

ʾÀýÏîÄ¿»áÖ´ÐÐ Octave ½Å±¾£¬µ«²»µ÷ÊÔËüÃÇ¡£Òò´Ë£¬ÐèÒª½« modes ÊôÐÔÉèÖÃΪ run ¶ø²»ÊÇ run,debug¡£×îÖØÒªµÄÊôÐÔÊÇ delegate£¬Ëü±êʶʵÏÖ ILaunchConfigurationDelegate µÄÀà¡£Õâ¸ö½Ó¿Ú¶¨ÒåÒ»¸ö·½·¨ launch£¬µ±Óû§´´½¨Æô¶¯ÅäÖò¢µ¥»÷ Run ʱ»áµ÷Óø÷½·¨¡£

DLTK ÌṩËü×Ô¼ºµÄ ILaunchConfigurationDelegate ʵÏÖ£¬³ÆÎª AbstractScriptLaunchConfigurationDelegate¡£µ±Õâ¸öÀàµÄ launch ·½·¨±»µ÷ÓÃʱ£¬Ëü»áµ÷Óà 3 ¸öÖØÒªµÄ·½·¨£º

createInterpreterConfig

Õâ¸ö·½·¨¹¹ÔìÒ»¸ö InterpreterConfig ¶ÔÏó£¬Ëü½ÓÊÕÀ´×ÔÆô¶¯ÅäÖõÄËùÓÐÐÅÏ¢¡£

getInterpreterRunner

Õâ¸ö·½·¨·ÃÎÊÓɽâÊÍÆ÷°²×°ÀàÐÍ´´½¨µÄ IInterpreterInstall ¶ÔÏ󣬲¢Ê¹ÓÃËü¹¹ÔìÒ»¸ö IInterpreterRunner¡£

runRunner

Õâ¸ö·½·¨Îª½âÊÍÆ÷´´½¨Ò»¸ö½ø³Ì£¬²¢½«ÆäÌí¼Óµ½Æô¶¯ÖС£

Õâ¸ö¹ý³Ì¿´ÆðÀ´ÓÐЩ¸´ÔÓ£¬µ«Ç°Á½¸ö·½·¨½ö×éÖ¯Á˹ØÓÚÆô¶¯µÄÐÅÏ¢£»InterpreterConfig ´æ´¢À´×ÔÆô¶¯ÅäÖõÄÐÅÏ¢£¬¶ø IInterpreterInstall ´æ´¢À´×ÔÊ×Ñ¡ÏîµÄÐÅÏ¢¡£µÚ 3 ¸ö·½·¨²¢Ã»ÓРʵ¼ÊÆô¶¯½âÊÍÆ÷£¬Àí½âÕâµãºÜÖØÒª¡£ËüΪ½âÊÍÆ÷´´½¨Ò»¸ö IProcess£¬²¢½«ÆäÌí¼Óµ½ Launch ¶ÔÏó¡£

DLTK ¿ØÖÆÌ¨¹ÜÀíÆ÷

µ± DLTK ²å¼þ org.eclipse.dltk.console.ui Æô¶¯Ê±£¬Ëü½«·ÃÎÊ Eclipse Debug UI ²å¼þ£¬²¢Ìí¼ÓÒ»¸ö ScriptConsoleManager ʵÀý×÷ΪÆô¶¯¼àÌýÆ÷¡£µ±Ìí¼Ó¡¢¸ü¸Ä»òɾ³ýÆô¶¯Ê±£¬¶¼»á֪ͨÕâЩ¼àÌýÆ÷¡£ScriptConsoleManager ½öÏìÓ¦Ìí¼ÓµÄÆô¶¯£¬ËüµÄµÚÒ»¸öÈÎÎñÊǼì²éÆô¶¯ÊÇ·ñ¾ßÓпÉʶ±ðµÄÌØÕ÷¡£Èç¹ûÊǵϰ£¬¸Ã¹ÜÀíÆ÷½«´´½¨ 3 ¸öÖØÒªµÄ¶ÔÏó£ºÒ»¸ö¿ØÖÆÌ¨·þÎñÆ÷¡¢Ò»¸ö½âÊÍÆ÷¶ÔÏóºÍÒ»¸ö¿ØÖÆÌ¨¹¤³§¡£

¹ÜÀíÆ÷´´½¨Ò»¸ö ScriptConsoleServer À´¹ÜÀí½âÊÍÆ÷ºÍ¿ØÖÆÌ¨Ö®¼äµÄͨÐÅ¡£ÔÚ³õʼ»¯ÆÚ¼ä£¬·þÎñÆ÷½«Ò»¸ö ServerSocket °ó¶¨µ½¶Ë¿Ú 25000£¬²¢¸æËßËüµÈ´ý½øÀ´µÄÁ¬½ÓÇëÇó¡£ÕâЩÇëÇóÒÔ ConsoleRequest ¶ÔÏóµÄÐÎʽ³öÏÖ£¬²¢ÇÒµ±·þÎñÆ÷½ÓÊܵ½ÐµÄÇëÇóʱ£¬Ëü½«µ÷ÓÃÿ¸öÐÂÇëÇóµÄ consoleConnected ·½·¨¡£

´´½¨·þÎñÆ÷Ö®ºó£¬ScriptConsoleManager ·ÃÎÊÒ»¸ö±íʾ½âÊÍÆ÷µÄ ConsoleRequest¡£Ëüͨ¹ýÔÚ plugin.xml ÖÐËÑË÷ org.eclipse.dltk.console.scriptInterpreter µÄÀ©Õ¹µãÀ´ÊµÏÖÕâ¸öÄ¿µÄ¡£Õâ¸öÀ©Õ¹µã±êʶһ¸öÌØÕ÷Ä¿±êºÍÒ»¸öʵÏÖ IScriptInterpreter£¨ConsoleRequest µÄ×Ó½Ó¿Ú£©µÄÀà¡£¿ØÖÆÌ¨¹ÜÀíÆ÷ÔÚ»ñÈ¡½âÊÍÆ÷¶ÔÏóÖ®ºó£¬¾Í¿ÉÒÔ¿ªÊ¼´´½¨¿ØÖÆÌ¨ÁË¡£Îª´Ë£¬ÐèÒªµ÷Óù¤×÷̨¹¤³§¡£

¿ØÖÆÌ¨¹¤³§ºÍ¿ØÖÆÌ¨

ͨ³££¬Èç¹ûÄúÏë´Ó²å¼þ·ÃÎÊ Eclipse ¿ØÖÆÌ¨£¬½öÐèÀ©Õ¹?¸öÀ©Õ¹µã£ºorg.eclipse.ui.console.consoleFactories¡£Õâ¸öÀ©Õ¹±ØÐë±êʶһ¸öʵÏÖ IConsoleFactory µÄÀࡣȻºó£¬µ±ÔÚ Console ÊÓͼÖе¥»÷ Open Console ʱ£¬Eclipse ½«µ÷ÓÃÕâ¸öÀàµÄ openConsole ·½·¨´´½¨Ò»¸öеĿØÖÆÌ¨¡£

DLTK ÈÃÊÂÇé±äµÃ¸´ÔÓһЩ¡£DLTK ScriptConsoleManager Ò²ÐèÒª·ÃÎÊ¿ØÖÆÌ¨¹¤³§£¬µ«ËüÐèÒªÒ»¸öʵÏÖ IScriptConsoleFactory µÄÀà¡£IConsoleFactory ºÍ IScriptConsoleFactory ¶¼ÐèÒªÏàͬµÄ openConsole ·½·¨£¬ÕâºÜ·½±ã¡£²»¹ý£¬ÄúÐèÒª´´½¨Á½¸öÀ©Õ¹µã£ºÒ»¸öÓÃÓÚ Eclipse ¿ØÖÆÌ¨¹¤³§£¬Ò»¸öÓÃÓÚ DLTK ¿ØÖÆÌ¨¹¤³§¡£Çåµ¥ 14 չʾÁËÕâÁ½¸ö Octave IDE À©Õ¹µã¡£

Çåµ¥ 14. ±êʶ Octave ¿ØÖÆÌ¨¹¤³§

<extension point="org.eclipse.dltk.console.ui.scriptConsole">
<scriptConsole
class="org.dworks.octaveide.launch.OctaveConsoleFactory"
natureID="org.dworks.octaveide.nature" />
</extension>

<extension point="org.eclipse.ui.console.consoleFactories">
<consoleFactory
class="org.dworks.octaveide.launch.OctaveConsoleFactory"
icon="icons/oct.gif"
label="%OctaveConsole.Console" />
</extension>

µ± ScriptConsoleManager ·ÃÎÊÒ»¸ö½Å±¾¿ØÖÆÌ¨¹¤³§Ê±£¬Ëüµ÷Óøù¤³§µÄ openConsole ·½·¨£¬²¢Í¨¹ýËü´´½¨×îÖØÒªµÄ ScriptConsole ¶ÔÏó¡£¾ÍÏñ Eclipse Îı¾±à¼­Æ÷Ò»Ñù£¬Õâ¸ö¿ØÖÆÌ¨Ê¹ÓûùÓÚÎĵµµÄ·½·¨ÏÔʾÎı¾£»ËüÓÐÒ»¸ö ConsoleDocument¡¢Ò»¸ö IConsoleDocumentPartitioner ÒÔ¼°Ò»Ð© Position ºÍ Region Êý×é¡£

´´½¨ ScriptConsole Ö®ºó£¬Ëü½«µ÷ÓÃÒýÓÃÓÉ¿ØÖÆÌ¨´´½¨µÄ IScriptInterpreter ¶ÔÏóµÄ setInterpreter¡£Õâ¸ö·½·¨ÒÔ InitialStreamReader µÄÐÎʽÔÚ¿ØÖÆÌ¨ºÍ½âÊÍÆ÷Ö®¼ä´´½¨Ò»¸öÁ¬½Ó¡£Õâ¸öÁ÷ÔĶÁÆ÷ͨ¹ýµ÷Óà IScriptInterpreter.getInitialOutputStream ½«×ÔÉíÁ¬½Óµ½½âÊÍÆ÷¡£½ÓÏÂÀ´£¬InitialStreamReader ¶ÁÈ¡½âÊÍÆ÷Êä³öµÄÿÐÐÄÚÈÝ£¬²¢·¢Ë͵½¿ØÖÆÌ¨½øÐÐÏÔʾ¡£ÏÔʾÎı¾Ö®ºó£¬¿ØÖÆÌ¨»áÊä³öÒ»¸öÌáʾ£¬²¢½øÈë¿É±à¼­Ä£Ê½¡£

ÔÚ´´½¨ ScriptConsole Ö®ºó£¬ScriptConsoleManager ½«·ÃÎÊ Eclipse ConsoleManager£¬²¢Ïò¿ÉÓÿØÖÆÌ¨ÁбíÌí¼ÓеĶÔÏó¡£ÏÖÔÚ£¬ÐµĿØÖÆÌ¨¶ÔÓû§ÊǿɼûµÄ£¬²¢ÇÒ½âÊÍÆ÷Ò²¿ÉÒÔ·ÃÎÊËü¡£

ÔËÐнâÊÍÆ÷

ÎÒÃÇ×Ðϸ¿´¿´ÓÉ ScriptConsoleManager ´´½¨µÄ IScriptInterpreter ¶ÔÏó¡£Õâ¸ö½Ó¿ÚÀ©Õ¹ ConsoleRequest ½Ó¿Ú£¬ÕâÒâζ×Å¿ÉÒÔ½«ËüÌá½»¸ø ScriptConsoleServer ÒÔ½øÐд¦Àí¡£¿ØÖÆÌ¨¹ÜÀíÆ÷´¦ÀíÕâ¸öÌá½»£¬²¢ÇÒµ±·þÎñÆ÷ÊÕµ½½âÊÍÆ÷µÄÇëÇóʱ£¬Ëü½«µ÷Óà IScriptInterpreter.consoleConnected(IScriptConsoleIO protocol)¡£

Õâ¸ö·½·¨µ£ÈÎÁ½¸öÖØÒªµÄ½ÇÉ«£ºËü¹¹ÔìʵÏÖÔÚ¿ØÖÆÌ¨ºÍ½âÊÍÆ÷Ö®¼ä´«ÊäÊý¾ÝµÄ InitialStreamReader£¬²¢ÇÒÕâ¸ö·½·¨µÄ²ÎÊý±êʶÓÃÓÚͨÐŵÄЭÒé¡£IScriptConsoleIO ¶¨ÒåÁ½¸ö´Ó½âÊÍÆ÷½ÓÊÕÊý¾ÝµÄÖØÒª·½·¨£º

InterpreterResponse execInterpreter(String command)

Ïò½âÊÍÆ÷·¢ËÍÒ»¸ö½Å±¾ÃüÁȻºó½ÓÊÕÒ»¸öÏìÓ¦

ShellResponse execShell(String command, String[] args)

Ïò½âÊÍÆ÷·¢ËÍÒ»¸ö shell ÃüÁȻºó½ÓÊÕÒ»¸öÏìÓ¦

ÕâÁ½¸öº¯Êý½«ÃüÁîÖ¸Ïò½âÊÍÆ÷²¢½ÓÊÕ½âÊÍÆ÷µÄÊä³ö¡£Ã¿¸ö IScriptConsoleIO ЭÒé¶ÔÏó¶¼Ê¹Óà InputStream ºÍ OutputStream ½øÐгõʼ»¯¡£µ± execInterpreter ±»µ÷ÓÃʱ£¬Ð­Ò齫ÃüÁî·¢Ë͸ø½âÊÍÆ÷µÄ OutputStream¡£µ±½âÊÍÆ÷½øÐÐÏìӦʱ£¬Ð­Òé½ÓÊÕ InterpreterResponse£¨Êµ¼ÊÉÏÊÇÒ»¸ö String£©²¢Í¨¹ý InputStream ½«Æä·¢Ë͵½¿ØÖÆÌ¨¡£

ËùÓÐÓë½âÊÍÆ÷½øÐеÄͨÐŶ¼ÒÀÀµÓÚЭÒéµÄ·½·¨¡£ÀýÈ磬IScriptInterpreter ½Ó¿Ú°üº¬½«ÃüÁî·¢Ë͵½½âÊÍÆ÷µÄ exec(String command) ·½·¨¡£Õâ¸öÃüÁîͨ¹ýµ÷Óà IScriptConsoleIO.execInterpreter À´Ìá½»ÃüÁͬÑù£¬½âÊÍÆ÷µÄ close ·½·¨Ò²ÒÀÀµÓÚ IScriptConsoleIO.execShell¡£

½áÊøÓï

ÕýÈç±¾½Ì³ÌËùʾ£¬DLTK ÌṩÐí¶àÓÃÓÚΪ¶¯Ì¬ÓïÑÔ´´½¨¿ª·¢»·¾³µÄÌØÐÔ¡£´´½¨ÕâЩ»·¾³²»ÐèÒª±àдºÜ¶à´úÂ룬µ«ÄúÒªÃ÷È·×Ô¼ºµÄÄ¿µÄ¡£ÎªÁËÅäÖÃÎı¾±íʾ£¬Äú±ØÐëÀí½â±à¼­Æ÷¡¢²é¿´Æ÷ºÍÎĵµÖ®¼äÊÇÈçºÎ½»»¥µÄ£¬²¢ÇÒÒª´óÌåÁ˽â»ùÓÚ¹æÔòµÄ·ÖÇøºÍɨÃè¡£ÒªÖ§³ÖÓû§Ê×Ñ¡ÏÄú±ØÐëÀí½â Eclipse preference pages ºÍ DLTK configuration blocks ÀàµÄÆæ¹Ö²ã´Î½á¹¹¡£ÒªÆô¶¯¶¯Ì¬ÓïÑÔÏîÄ¿£¬Äú±ØÐë´¦ÀíʵÏÖ¿ØÖÆÌ¨ºÍ½Å±¾½âÊÍÆ÷Ö®¼äµÄͨÐŵÄÏ̡߳¢Á÷ºÍЭÒé·½·¨¡£

ÕÆÎÕ DLTK ²»Ì«ÈÝÒ×£¬Òª¾«Í¨ËüÔò¸ü¼ÓÀ§ÄÑ¡£µ«ÊÇÈç¹ûÄúÒªÎªÌØ¶¨µÄ½Å±¾ÓïÑÔ¹¹½¨¹¦ÄÜÍêÕûµÄ IDE£¬¾ÍûÓбÈËü¸üºÃµÄ¹¤¾ß¼¯ÁË¡£³ýÁ˱¾½Ì³ÌÖеIJÄÁÏÖ®Í⣬DLTK »¹Îª PHP ºÍ Tcl µÈÓïÑÔÌṩÐí¶àʾÀý IDE¡£

   
2987 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢