¹®¼­¿Í ÆÄƼ¼Ç

Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÅØ½ºÆ®ÀÇ ¹®¼­ ¸ðµ¨À» Á¤ÀÇÇϰí ÀÌ ¸ðµ¨À» »ç¿ëÇÏ¿© ÅØ½ºÆ®¸¦ Ç¥½ÃÇϴ ǥ½Ã±â¸¦ Á¦°øÇÕ´Ï´Ù.  Java ÆíÁý±â ¿¹Á¦ ¹× ÀÌ ¸ðµ¨¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸´Â °ÍÀ¸·Î ½ÃÀÛÇÕ´Ï´Ù.  org.eclipse.ui.editors¸¦ ³íÇÑ Àý¿¡¼­ ÀÌ¹Ì »ìÆìº¸¾ÒÀ¸¹Ç·Î, ÆíÁý±â È®ÀåÀ» µî·ÏÇÏ´Â ±âº» ±â¼ú¿¡ ´ëÇØ¼­´Â ´Ù·çÁö ¾Ê°Ú½À´Ï´Ù.  ´ë½Å, ¿¹Á¦¿¡¼­ ÆíÁý±â Ŭ·¡½º°¡ ±¸ÇöµÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×À» »ìÆìº¸°Ú½À´Ï´Ù.

¹®¼­ Á¦°ø¾÷ü ¹× ¹®¼­

Workbench¿¡¼­´Â, »ç¿ëÀÚ°¡ µµ¸ÞÀÎ ¿ä¼Ò(¿¹: ÆÄÀÏ ¶Ç´Â ¾ÆÄ«ÀÌºê ÆÄÀÏ¿¡ ÀúÀåµÈ ¿ä¼Ò)¸¦ ¼±ÅÃÇϰí ÀÌ ¿ä¼Ò¸¦ ¿­¸é ÀϹÝÀûÀ¸·Î ÆíÁý±â°¡ ¿­¸³´Ï´Ù.  ÆíÁý±â ÀÛ¼º ½Ã ÀÌ ÆíÁý±â´Â ÆíÁý ÁßÀÎ ¿ÀºêÁ§Æ®¸¦ ¼³¸íÇÏ´Â ÆíÁý±â ÀÔ·Â(IEditorInput)°ú ¿¬°üµË´Ï´Ù.

"*.jav" È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ¿­ ¶§ Java ÆíÁý±â ¿¹Á¦°¡ ¿­¸³´Ï´Ù.  ÀÌ·± °æ¿ì ÆíÁý±âÀÇ ÀÔ·ÂÀº IFileEditorInputÀÔ´Ï´Ù.  Ç÷§Æû ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÆíÁý±â ÀÔ·Â ÀÚü¿¡ ´ëÇØ¼­´Â °ÅÀÇ °í·ÁÇÏÁö ¾Ê½À´Ï´Ù.  ÀÌ ÇÁ·¹ÀÓ¿öÅ©´Â È¿À²ÀûÀ¸·Î ÅØ½ºÆ®¸¦ Ç¥½ÃÇϰí Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï IDocument¶ó°í ÇÏ´Â ÀÔ·ÂÀÇ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨°ú ÇÔ²² ÀÛµ¿ÇÕ´Ï´Ù.

Áï, ¿¹»óµÈ µµ¸ÞÀÎ ¸ðµ¨(ÆíÁý±â ÀÔ·Â)¿¡¼­ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ðµ¨·Î ¸ÊÇÎÇÒ ¹æ¹ýÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù.  ÀÌ ¸ÊÇÎÀº IDocumentProvider¿¡¼­ Á¤Àǵ˴ϴÙ.  ÆíÁý±â ÀÔ·ÂÀÌ ÀÖ´Â °æ¿ì ¹®¼­ Á¦°ø¾÷ü´Â ÀûÀýÇÑ IDocument¸¦ ¸®ÅÏÇÕ´Ï´Ù.

Java ÆíÁý±â ¿¹Á¦´Â ÀûÀýÇÑ ¹®¼­¸¦ ¸®ÅÏÇÏ´Â JavaDocumentProvider¸¦ Á¤ÀÇÇÕ´Ï´Ù.  ÀûÀýÇÑ ¹®¼­ Á¦°ø¾÷ü¿Í "*.jav" È®ÀåÀÚ °£ÀÇ °ü°è ¼³Á¤ ¹æ¹ýÀº ¹«¾ùÀԴϱî?  org.eclipse.ui.documentProviders È®ÀåÀÚ¿¡¼­ ±× °ü°è°¡ ¼³Á¤µË´Ï´Ù.   ÀÌ È®ÀåÀº ¹®¼­ Á¦°ø¾÷ü¿Í ÆÄÀÏ À¯Çü »çÀÌ¿¡ ¸ÊÇÎÀ» Á¤ÀÇÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.  2 ¿¹Á¦´Â ¹®¼­°¡ ´ÙÀ½°ú °°ÀÌ °ø±ÞµÊÀ» Á¤ÀÇÇÕ´Ï´Ù.

   <extension
      point="org.eclipse.ui.documentProviders">
<provider
         extensions="jav"
         class="org.eclipse.ui.examples.javaeditor.JavaDocumentProvider"
         id="org.eclipse.ui.examples.javaeditor.JavaDocumentProvider">
   </provider>
 </extension>

ÁöÁ¤µÈ È®ÀåÀÚ¸¦ °¡Áø ÆÄÀÏÀ» ¿­¸é Workbench´Â ¹®¼­ Á¦°ø¾÷ü ÀνºÅϽº ÀÛ¼ºÇÏ´Â ¼¼ºÎ»çÇ×À» °ü¸®ÇÕ´Ï´Ù.  Workbench´Â ¹®¼­ Á¦°ø¾÷ü ÀνºÅϽº¸¦ ÇÑ ¹ø¸¸ ÀÛ¼ºÇϰí ÀÌ ÀνºÅϽº¸¦ ´Ù¸¥ ÆíÁý±â °£¿¡ °øÀ¯ÇÕ´Ï´Ù.

Ç÷¯±×ÀÎÀÌ ¹®¼­ Á¦°ø¾÷ü¸¦ µî·ÏÇϱâ À§ÇØ ÀÌ È®ÀåÁ¡À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¹®¼­ Á¦°ø¾÷ü¸¦ ÆíÁý±â¿Í ¿¬°ü½ÃŰ´Â ´Ù¸¥ ¹æ¹ýÀº Ç÷¯±×ÀÎ ÀÚü°¡ ¹®¼­ Á¦°ø¾÷ü¸¦ °ü¸®ÇÏ°Ô ÇÏ´Â °ÍÀÔ´Ï´Ù.  ÀÌ ÀÛ¾÷Àº ÀϹÝÀûÀ¸·Î Ç÷¯±×ÀΠŬ·¡½º¿¡¼­ ¼öÇàµË´Ï´Ù.  ÀÔ·Â ¿ä¼Ò°¡ ÆíÁý±â·Î ¼³Á¤µÇ¸é ÆíÁý±â´Â Ç÷¯±×ÀΠŬ·¡½º¿¡ ÀûÀýÇÑ ¹®¼­ Á¦°ø¾÷ü¸¦ ¿äûÇÕ´Ï´Ù.  Ç÷¯±×ÀÎÀº ¹®¼­ Á¦°ø¾÷ü¿¡ ´ëÇÑ ÂüÁ¶ ¹× ÀÛ¼ºÀ» °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ÀÌ ±â¹ýÀº ¹®¼­ Á¦°ø¾÷ü¿Í ¿¬°üµÈ ´Ù¸¥ ó¸® ¶Ç´Â Ư¼ö ÃʱâÈ­°¡ ÀÖ´Â °æ¿ì ¹Ù¶÷Á÷ÇÒ ¼ö ÀÖ½À´Ï´Ù.   ¿¹¸¦ µé¾î JDP µµ±¸¿¡¼­ ClassFileEditor¸¦ ÂüÁ¶ÇϽʽÿÀ.  

ÀûÀýÇÑ ¹®¼­ Á¦°ø¾÷ü°¡ ÆíÁý±â¿Í ¿¬°üµÇ¸é, ±âº» Ÿ½ºÅ©´Â ÆíÁý±â ÀԷ¿¡¼­ ¹®¼­¸¦ ÀÛ¼ºÇÏ°í ¹®¼­¸¦ ÆÄƼ¼ÇÀ¸·Î ºÐ¸®Çϱâ À§ÇØ ÀûÀýÇÑ ¿ÀºêÁ§Æ®¸¦ ±¸¼ºÇÏ´Â °ÍÀÔ´Ï´Ù.   

ÆÄƼ¼Ç

JavaDocumentProvider¿¡¼­ ¹®¼­¿Í ÆÄƼ¼ÇÀ» »ìÆìº¸°Ú½À´Ï´Ù.  ¹®¼­°¡ ÀÛ¼ºµÇ¸é IDocumentPartitioner°¡ ÀÛ¼ºµÇ¾î ¹®¼­·Î ¼³Á¤µË´Ï´Ù.   

protected IDocument createDocument(Object element) throws CoreException {
	IDocument document= super.createDocument(element);
	if (document != null) {
		IDocumentPartitioner partitioner= createJavaPartitioner();
		document.setDocumentPartitioner(partitioner);
		partitioner.connect(document);
	}
	return document;
}

ÆÄƼ¼Å³Ê´Â ¹®¼­¸¦ ÆÄƼ¼ÇÀ̶ó´Â °ãÄ¡Áö ¾Ê´Â ¿µ¿ªÀ¸·Î ºÐ¸®ÇØ¾ß ÇÕ´Ï´Ù.  ÆÄƼ¼Ç(ITypedRegion¿¡ ³ªÅ¸³­)Àº ±¸¹® °­Á¶Ç¥½Ã ¶Ç´Â Çü½Äȭó·³ ±â´É°ú °ü·ÃÇÏ¿© ¹®¼­ÀÇ ´Ù¸¥ ¼½¼ÇÀ» ´Ù¸£°Ô ó¸®ÇÏ´Â µ¥ À¯¿ëÇÕ´Ï´Ù.

Java ÆíÁý±â ¿¹Á¦ÀÇ °æ¿ì ¹®¼­´Â javadoc ÁÖ¼®, º¹¼öÇà ÁÖ¼® µîÀ» ³ªÅ¸³»´Â ÆÄƼ¼ÇÀ¸·Î ºÐ¸®µË´Ï´Ù.  °¢ ¿µ¿ªÀº ÄÁÅÙÃ÷ À¯Çü ¹× ¹®¼­ÀÇ ÇØ´ç À§Ä¡¿¡ ÁöÁ¤µË´Ï´Ù.   À§Ä¡´Â »ç¿ëÀÚ ÆíÁý ÅØ½ºÆ®·Î °»½ÅµË´Ï´Ù.    

±ÔÄ¢ ±â¹Ý ¹®¼­ ÆÄƼ¼Å´×

¹®¼­ ÆÄƼ¼Å³à¿¡ ´ëÇÑ ÀûÀýÇÑ ±¸ÇöÀ» ÆÇº°ÇÏ´Â °ÍÀº °¢ ÆíÁý±â¿¡ ´Þ·Á ÀÖ½À´Ï´Ù.  ±ÔÄ¢ ±â¹Ý ¹®¼­ ½ºÄ³´×À» À§ÇÑ Áö¿øÀº org.eclipse.jface.text.rules¿¡ Á¦°øµË´Ï´Ù.  ±ÔÄ¢ ±â¹Ý ±â¹Ý ½ºÄ³³Ê¸¦ »ç¿ëÇÏ¸é ÆíÁý±â´Â ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ Á¦°øµÈ DefaultPartitioner¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

private IDocumentPartitioner createJavaPartitioner() {
	return new DefaultPartitioner(getJavaPartitionScanner(), 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ÀÇ Å¬·¡½º¸¦ ÂüÁ¶ÇϽʽÿÀ.  ±¸¹® »ö»óÀ» »ìÆì º¼ ¶§ ½ºÄ³³Ê¸¦ ´Ù½Ã »ìÆì º¾´Ï´Ù.

¾î³ëÅ×ÀÌ¼Ç ¸ðµ¨

ÆíÁý±â ÀԷ¿¡ ´ëÇÑ ÀûÀýÇÑ ¹®¼­¸¦ Á¦°øÇÏ´Â °Í ¿Ü¿¡µµ ¹®¼­ Á¦°ø¾÷üÀÇ ¶Ç ´Ù¸¥ Áß¿äÇÑ Å¸½ºÅ©´Â ÆíÁý±â ÀԷ¿¡ »ç¿ëÇÒ ÀûÀýÇÑ IAnnotationModelÀ» Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.  ÀÌ ¸ðµ¨Àº ¹®¼­¿¡ ÷ºÎµÈ ¾î³ëÅ×À̼ÇÀ» °ü¸®ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.  ¹®¼­ Á¦°ø¾÷ü°¡ ¸ðµ¨À» Á¦°øÇÏ°Ô ÇÏ¸é ÆíÁý±â°¡ ÄÁÅÙÃ÷ÀÇ À¯Çü¿¡ ÀûÀýÇÑ ¸ðµ¨À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.  ´ÙÀ½ Àý¿¡¼­ ¾î³ëÅ×ÀÌ¼Ç ¹× ¾î³ëÅ×À̼ÇÀ» º¸´Ù ÀÚ¼¼È÷ Á¦½ÃÇÏ´Â ¹æ¹ýÀ» »ìÆì º¾´Ï´Ù.

Copyright IBM Corporation and others 2000, 2003.