Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÅØ½ºÆ®ÀÇ ¹®¼ ¸ðµ¨À» Á¤ÀÇÇϰí ÀÌ ¸ðµ¨À» »ç¿ëÇÏ¿© ÅØ½ºÆ®¸¦ Ç¥½ÃÇϴ ǥ½Ã±â¸¦ Á¦°øÇÕ´Ï´Ù. Java ÆíÁý±â ¿¹Á¦ ¹× ÀÌ ¸ðµ¨¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸´Â °ÍÀ¸·Î ½ÃÀÛÇÕ´Ï´Ù. org.eclipse.ui.editors¸¦ ³íÇÑ Àý¿¡¼ ÀÌ¹Ì »ìÆìº¸¾ÒÀ¸¹Ç·Î, ÆíÁý±â È®ÀåÀ» µî·ÏÇÏ´Â ±âº» ±â¼ú¿¡ ´ëÇØ¼´Â ´Ù·çÁö ¾Ê°Ú½À´Ï´Ù. ´ë½Å, ¿¹Á¦¿¡¼ ÆíÁý±â Ŭ·¡½º°¡ ±¸ÇöµÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×À» »ìÆìº¸°Ú½À´Ï´Ù.
Workbench¿¡¼´Â, »ç¿ëÀÚ°¡ µµ¸ÞÀÎ ¿ä¼Ò(¿¹: ÆÄÀÏ ¶Ç´Â ¾ÆÄ«ÀÌºê ÆÄÀÏ¿¡ ÀúÀåµÈ ¿ä¼Ò)¸¦ ¼±ÅÃÇϰí ÀÌ ¿ä¼Ò¸¦ ¿¸é ÀϹÝÀûÀ¸·Î ÆíÁý±â°¡ ¿¸³´Ï´Ù. ÆíÁý±â ÀÛ¼º ½Ã ÀÌ ÆíÁý±â´Â ÆíÁý ÁßÀÎ ¿ÀºêÁ§Æ®¸¦ ¼³¸íÇÏ´Â ÆíÁý±â ÀÔ·Â(IEditorInput)°ú ¿¬°üµË´Ï´Ù.
"*.jav" È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ¿ ¶§ Java ÆíÁý±â ¿¹Á¦°¡ ¿¸³´Ï´Ù. ÀÌ·± °æ¿ì ÆíÁý±âÀÇ ÀÔ·ÂÀº IFileEditorInputÀÔ´Ï´Ù. Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÆíÁý±â ÀÔ·Â ÀÚü¿¡ ´ëÇØ¼´Â °ÅÀÇ °í·ÁÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ÇÁ·¹ÀÓ¿öÅ©´Â È¿À²ÀûÀ¸·Î ÅØ½ºÆ®¸¦ Ç¥½ÃÇϰí Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï IDocument¶ó°í ÇÏ´Â ÀÔ·ÂÀÇ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨°ú ÇÔ²² ÀÛµ¿ÇÕ´Ï´Ù.
Áï, ¿¹»óµÈ µµ¸ÞÀÎ ¸ðµ¨(ÆíÁý±â ÀÔ·Â)¿¡¼ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨·Î ¸ÊÇÎÇÒ ¹æ¹ýÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù. ÀÌ ¸ÊÇÎÀº IDocumentProvider¿¡¼ Á¤Àǵ˴ϴÙ. ÆíÁý±â ÀÔ·ÂÀÌ ÀÖ´Â °æ¿ì ¹®¼ Á¦°ø¾÷ü´Â ÀûÀýÇÑ IDocument¸¦ ¸®ÅÏÇÕ´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦´Â Ç÷¯±×ÀÎ org.eclipse.ui.editors¿¡¼ Á¤ÀÇÇÏ´Â TextFileDocumentProvider¸¦ °è½ÂÇÕ´Ï´Ù. È®Àå org.eclipse.ui.editors.documentProviders´Â ÆíÁý±â ÀÔ·Â À¯Çü(¶Ç´Â ÆÄÀÏ È®ÀåÀÚ)°ú ¹®¼ Á¦°øÀÚ °£ ¸ÊÇÎÀ» Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ÆíÁý±â Ç÷¯±×ÀÎÀº ÇØ´ç ¹®¼ Á¦°øÀÚ¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÕ´Ï´Ù.
<extension point="org.eclipse.ui.editors.documentProviders"> <provider class="org.eclipse.ui.editors.text.TextFileDocumentProvider" inputTypes="org.eclipse.ui.IStorageEditorInput" id="org.eclipse.ui.editors.text.StorageDocumentProvider"> </provider> </extension>
ÀÌ È®ÀåÁ¡À» »ç¿ëÇϸé Ç÷¯±×ÀÎÀÌ ¹®¼ Á¦°øÀÚ¸¦ µî·ÏÇϰí À̸¦ ÆÄÀÏ È®ÀåÀÚ ¶Ç´Â ÆíÁý±â ÀԷ Ŭ·¡½º¿Í ¿¬°ü½Ãų ¼ö ÀÖ½À´Ï´Ù. Java ÆíÁý±â ¿¹Á¦´Â °íÀ¯ ¹®¼ Á¦°øÀÚ È®ÀåÀ» Á¤ÀÇÇÏÁö ¾ÊÀ¸¹Ç·Î IStorageEditorInputÀÎ ¸ðµç ÀÔ·Â À¯Çü¿¡ ÁöÁ¤µÈ ÀÏ¹Ý ¹®¼ Á¦°øÀÚ¸¦ °è½ÂÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ ÆíÁýÇϱâ À§ÇØ ÆÄÀÏÀ» ¿ ¶§ Ç÷§ÆûÀº ÀûÀýÇÑ ¹®¼ Á¦°øÀÚ ÀνºÅϽº¸¦ ÀÛ¼ºÇÏ´Â ¼¼ºÎ»çÇ×À» °ü¸®ÇÕ´Ï´Ù. ƯÁ¤ ¹®¼ Á¦°øÀÚ°¡ ÆÄÀÏ È®ÀåÀÚ¿¡ ´ëÇØ µî·ÏµÉ °æ¿ì ÀÌ ¹®¼ Á¦°øÀÚ°¡ »ç¿ëµË´Ï´Ù. ÆÄÀÏ È®ÀåÀÚ¿¡ ´ëÇÑ Æ¯Á¤ ¹®¼ Á¦°øÀÚ°¡ ¾øÀ» °æ¿ì ÆíÁý±â ÀÔ·Â À¯ÇüÀÌ ÀûÀýÇÑ Á¦°øÀÚ¸¦ ã´Â µ¥ »ç¿ëµË´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦´Â ÀÏ¹Ý Ç÷§Æû ¹®¼ Á¦°øÀÚ¸¦ »ç¿ëÇÏ¿© ÆÄÀÏ ¹öÆÛ¸µ ¹× ±âŸ ÃÖÀûÈ¿Í °°Àº ¹®¼ Á¦°øÀÚÀÇ ¸ðµç ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Java ÆíÁý±â°¡ Ç÷§Æû ÅØ½ºÆ® ¹®¼ Á¦°øÀÚ¸¦ »ç¿ëÇÒ °æ¿ì Java ÆÄÀÏÀ» ó¸®Çϱâ À§ÇÑ Æ¯¼ö ÀÛµ¿À» ¾î¶»°Ô Á¦°øÇÒ ¼ö ÀÖ½À´Ï±î?
È®Àå org.eclipse.core.filebuffers.documentSetupÀº ÆÄÀÏ È®ÀåÀÚ¿Í IDocumentSetupParticipant°£ ¸ÊÇÎÀ» Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ¼³Á¤ Âü¿©ÀÚ°¡ ÆíÁý±â¿¡ Á¦°øµÇ¸é ¼³Á¤ Âü¿©ÀÚ´Â ¹®¼¿¡ ¸ðµç Ư¼ö ±â´ÉÀ» ¼³Á¤ÇÕ´Ï´Ù.
<extension id="ExampleJavaDocumentSetupParticipant" name="%documentSetupParticipantName" point="org.eclipse.core.filebuffers.documentSetup"> <participant extensions="jav" class="org.eclipse.ui.examples.javaeditor.JavaDocumentSetupParticipant"> </participant> </extension>ÀÌ È®Àå Á¤ÀÇ´Â Java ƯÁ¤ Ÿ½ºÅ©¿¡ ¹®¼¸¦ ¼³Á¤ÇÒ ±âȸ¸¦ ¿¹Á¦¿¡ Á¦°øÇÕ´Ï´Ù. ±×·¯¸é JavaDocumentSetupParticipant°¡ ¼öÇàÇÏ´Â °ÍÀº ¹«¾ùÀԴϱî? ÀÌÁ¦ ¼³Á¤ ¸Þ¼ÒµåÀÇ ´Ü¼øÈµÈ ¹öÀüÀ» »ìÆì º¸°Ô µË´Ï´Ù.
public void setup(IDocument document) { ... IDocumentPartitioner partitioner= new DefaultPartitioner(JavaEditorExamplePlugin.getDefault().getJavaPartitionScanner(), JavaPartitionScanner.JAVA_PARTITION_TYPES); partitioner.connect(document); ... }¼³Á¤ ÄÚµå´Â ÆÄƼ¼Å³Ê¶ó´Â ¿ÀºêÁ§Æ®¸¦ ±¸¼ºÇÕ´Ï´Ù.
ÆÄƼ¼Å³Ê(IDocumentPartitioner)´Â ¹®¼¸¦ ÆÄƼ¼ÇÀ̶ó´Â °ãÄ¡Áö ¾Ê´Â ¿µ¿ªÀ¸·Î ºÐ¸®ÇÕ´Ï´Ù. ÆÄƼ¼Ç(ITypedRegionÀÌ ³ªÅ¸³»´Â)Àº ±¸¹® °Á¶Ç¥½Ã ¶Ç´Â Çü½ÄÈó·³ ±â´É°ú °ü·ÃÇÏ¿© ¹®¼ÀÇ ´Ù¸¥ ¼½¼ÇÀ» ´Ù¸£°Ô ó¸®ÇÏ´Â µ¥ À¯¿ëÇÕ´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦ÀÇ °æ¿ì ¹®¼´Â javadoc ÁÖ¼®, º¹¼öÇà ÁÖ¼® µîÀ» ³ªÅ¸³»´Â ÆÄƼ¼ÇÀ¸·Î ºÐ¸®µË´Ï´Ù. °¢ ¿µ¿ªÀº ÄÁÅÙÃ÷ À¯Çü ¹× ¹®¼ÀÇ ÇØ´ç À§Ä¡¿¡ ÁöÁ¤µË´Ï´Ù. À§Ä¡´Â »ç¿ëÀÚ ÆíÁý ÅØ½ºÆ®·Î °»½ÅµË´Ï´Ù.
¹®¼ ÆÄƼ¼Å³à¿¡ ´ëÇÑ ÀûÀýÇÑ ±¸ÇöÀ» ÆÇº°ÇÏ´Â °ÍÀº °¢ ÆíÁý±â¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ±ÔÄ¢ ±â¹Ý ¹®¼ ½ºÄ³´×À» À§ÇÑ Áö¿øÀº org.eclipse.jface.text.rules¿¡ Á¦°øµË´Ï´Ù. ±ÔÄ¢ ±â¹Ý ±â¹Ý ½ºÄ³³Ê¸¦ »ç¿ëÇÏ¸é ÆíÁý±â´Â ÇÁ·¹ÀÓ¿öÅ©¿¡¼ Á¦°øµÈ DefaultPartitioner¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
IDocumentPartitioner partitioner= new DefaultPartitioner(JavaEditorExamplePlugin.getDefault().getJavaPartitionScanner(), JavaPartitionScanner.JAVA_PARTITION_TYPES);
RuleBasedPartitionScanner´Â ±ÔÄ¢ ±â¹Ý ½ºÄ³³ÊÀÇ ¼öÆÛŬ·¡½ºÀÔ´Ï´Ù. ¼ºêŬ·¡½º´Â ¹®¼¸¦ ½ºÄµÇÒ ¶§ Çà ºÐ¸®¹®ÀÚ, °ø¹é ¹× ÀÏ¹Ý ÆÐÅÏ µîÀÇ ÅäÅ«À» ±¸º°ÇÏ´Â µ¥ »ç¿ëÇØ¾ß ÇÒ ±ÔÄ¢À» ¿°ÅÇÏ°í ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ¿¹Á¦ÀÇ JavaPartitionScanner´Â ´ÜÀÏÇà ÁÖ¼®, ¹®ÀÚ »ó¼ö, javadoc. º¹¼öÇà ÁÖ¼® ¹× ´Ü¾î¸¦ ±¸º°ÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÔÄ¢À» Á¤ÀÇÇÕ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ½ºÄ³³ÊÀÇ »ý¼ºÀÚ¿¡¼ À̸¦ ¼öÇàÇÕ´Ï´Ù.
public JavaPartitionScanner() { super(); IToken javaDoc= new Token(JAVA_DOC); IToken comment= new Token(JAVA_MULTILINE_COMMENT); List rules= new ArrayList(); // Add rule for single line comments. rules.add(new EndOfLineRule("//", Token.UNDEFINED)); // Add rule for strings and character constants. rules.add(new SingleLineRule("\"", "\"", Token.UNDEFINED, '\\')); rules.add(new SingleLineRule("'", "'", Token.UNDEFINED, '\\')); // Add special case word rule. rules.add(new WordPredicateRule(comment)); // Add rules for multi-line comments and javadoc. rules.add(new MultiLineRule("/**", "*/", javaDoc, (char) 0, true)); rules.add(new MultiLineRule("/*", "*/", comment, (char) 0, true)); IPredicateRule[] result= new IPredicateRule[rules.size()]; rules.toArray(result); setPredicateRules(result); }
»ç¿ë °¡´ÉÇÑ ±ÔÄ¢ À¯Çü ¹× ±ÔÄ¢À» Á¤ÀÇÇÏ´Â µ¥ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº org.eclipse.jface.text.rulesÀÇ Å¬·¡½º¸¦ ÂüÁ¶ÇϽʽÿÀ. ±¸¹® »ö»óÀ» »ìÆì º¼ ¶§ ½ºÄ³³Ê¸¦ ´Ù½Ã »ìÆì º¾´Ï´Ù.