¼Õ»ó, ¼ö¸® ¹× Á¶Á¤ ¸ðµ¨À» »ç¿ëÇÏ¿© ±¸¹® »ö»óÀÌ Ç÷§Æû ÅØ½ºÆ® Ç÷¹ÀÓ¿öÅ©¿¡ Á¦°øµË´Ï´Ù. ¹®¼¿¡ °¢ º¯°æÀÌ Àû¿ëµÈ °æ¿ì ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ´Â ¹«È¿ÈµÉ ºñÁÖ¾ó ÇÁ¸®Á¨Å×À̼ÇÀÇ ¿µ¿ª ¹× ÀÌ ¿µ¿ªÀ» ¼ö¸®ÇÏ´Â ¹æ¹ýÀ» ÆÇº°ÇÕ´Ï´Ù. ¹®¼ÀÇ ´Ù¸¥ ÄÁÅÙÃ÷ À¯Çü¿¡ ¼·Î ´Ù¸¥ °èȹÀÌ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
±¸¹® »ö»ó ±¸Çö(¹× ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¸¦ »ç¿ëÇÏ¿© À̸¦ ¼öÇà)Àº ¼±ÅÃÀûÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î SourceViewerConfigurationÀº ƯÁ¤ ÆíÁý±â¿¡ »ç¿ëµÈ ¹®¼ ¸ðµ¨À» ¸ð¸£°í ±¸¹® °Á¶Ç¥½Ã¿¡ ´ëÇÑ ÀÏ¹Ý ÀÛµ¿ÀÌ ¾øÀ¸¹Ç·Î ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¸¦ ¼³Ä¡ÇÏÁö ¾Ê½À´Ï´Ù.
±¸¹® °Á¶Ç¥½Ã ±¸Çö ½Ã Á¶Á¤ Ŭ·¡½º¸¦ »ç¿ëÇÏ·Á¸é ÆíÁý±â ¼Ò½º Ç¥½Ã±â ±¸¼ºÀº ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¸¦ Á¤ÀÇÇϵµ·Ï ±¸¼ºµÇ¾î¾ß ÇÕ´Ï´Ù. ÆíÁý±âÀÇ ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ°¡ Á¤ÀǵǴ ¹æ¹ýÀ» È®ÀÎÇϱâ À§ÇØ ´Ù½Ã JavaSourceViewerConfiguration¿¡¼ ½ÃÀÛÇÕ´Ï´Ù.
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler= new PresentationReconciler(); ... return reconciler; }
ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ°¡ ¼öÇàÇÒ ³»¿ëÀ» ÀÌÇØÇÏ·Á¸é ¿ì¼± ¼Õ»ó, ¼ö¸® ¹× Á¶Á¤ÀÇ °³³äÀ» »ìÆìº¸¾Æ¾ß ÇÕ´Ï´Ù.
»ç¿ëÀÚ°¡ ÆíÁý±âÀÇ ÅØ½ºÆ® ¼öÁ¤ÇÏ´Â °æ¿ì º¯°æ»çÇ×À» Ç¥½ÃÇÏ·Á¸é ÆíÁý±â ÆÄÆ®¸¦ ´Ù½Ã Ç¥½ÃÇØ¾ß ÇÕ´Ï´Ù. ´Ù½Ã Ç¥½ÃÇÒ ÅØ½ºÆ® °è»êÀº ¼Õ»ó °è»êÀ¸·Î ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù. ±¸¹® »ö»óÀÌ °ü·ÃµÈ °æ¿ì ´ÜÀÏ ¹®ÀÚÀÇ Á¸Àç ¿©ºÎ°¡ ÁÖº¯ÀÇ ÅØ½ºÆ® »ö»óÀ» º¯°æÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÆíÁý Á¶ÀÛ¿¡ ÀÇÇÑ ¼Õ»ó Á¤µµ´Â ´õ¿í È®´ëµË´Ï´Ù.
¼Õ»óÀÚ(IPresentationDamager)´Â ¹®¼ º¯°æÀ¸·Î ÀÎÇØ ´Ù½Ã ºôµåÇØ¾ß ÇÒ ¹®¼ÀÇ ÇÁ¸®Á¨Å×ÀÌ¼Ç ¿µ¿ªÀ» ÆÇº°ÇÕ´Ï´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç ¼Õ»óÀڴ ƯÁ¤ ¹®¼ ÄÁÅÙÃ÷ À¯Çü(¶Ç´Â ¿µ¿ª)¿¡ ƯÁ¤ÇÑ °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç ¼Õ»óÀÚ´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç ¼ö¸®ÀÚ(IPresentationRepairer)¿¡ ¿Ã¹Ù¸¥ ÀÔ·ÂÀÎ ¼Õ»ó ¿µ¿ªÀ» ¸®ÅÏÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¼ö¸®Àڴ ƯÁ¤ ÄÁÅÙÃ÷ À¯Çü¿¡ ÇÊ¿äÇÑ ¼ö¸®¸¦ Á¦´ë·Î ¼³¸íÇÒ ¼ö ÀÖµµ·Ï ¼Õ»ó ¿µ¿ª¿¡¼ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
Á¶Á¤Àº ÆíÁý±â¿¡¼ º¯°æÀÌ ÀÛ¼ºµÉ ¶§ ¹®¼ÀÇ ÇÁ¸®Á¨Å×À̼ÇÀ» À¯Áöº¸¼öÇÏ´Â Àüü ÇÁ·Î¼¼½º¸¦ ¼³¸íÇÕ´Ï´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ(IPresentationReconciler)´Â ¿¬°üµÈ Ç¥½Ã±â¸¦ ÅëÇØ ÅØ½ºÆ®ÀÇ º¯°æ»çÇ×À» ¸ð´ÏÅÍÇÕ´Ï´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ´Â º¯°æÀ¸·Î ¿µÇâÀ» ¹ÞÀº ÄÁÅÙÃ÷ À¯ÇüÀ» ÆÇº°ÇÏ´Â µ¥ ¹®¼ÀÇ ¿µ¿ªÀ» »ç¿ëÇÏ¸ç ¿µÇâÀ» ¹ÞÀº ÄÁÅÙÃ÷ À¯Çü¿¡ ÀûÀýÇÑ ¼Õ»óÀÚ¸¦ ¾Ë¸³´Ï´Ù. ÀÏ´Ü ¼Õ»óÀÌ °è»êµÇ¸é ÀÌ °ªÀº ±âº» ÄÁÅÙÆ®¿Í µ¿±âÈÇÏ¿© Á¦ÀÚ¸®·Î µ¹·Á ³õÀ» ¼ö ÀÖµµ·Ï Ç¥½Ã±â¿¡ Àû¿ëµÇ´Â ¼ö¸® ¼³¸íÀ» ±¸¼ºÇÒ ÀûÀýÇÑ ¼ö¸®ÀÚ¿¡°Ô Àü´ÞµË´Ï´Ù.
org.eclipse.jface.text.reconcilerÀÇ Å¬·¡½º´Â ¹®¼ÀÇ ¿ÜºÎ Á¶ÀÛ°ú ¹®¼ ¸ðµ¨À» µ¿±âÈÇÒ ¼ö ÀÖµµ·Ï Ãß°¡ Áö¿ø Ŭ·¡½º¸¦ Á¤ÀÇÇÕ´Ï´Ù.
ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¿¡´Â ¹®¼¿¡ ÀÖ´Â °¢ ÄÁÅÙÃ÷ À¯Çü¿¡ ´ëÇÑ ¼ö¸®ÀÚ ¹× ¼Õ»óÀÚ ½ÖÀÌ Á¦°øµÇ¾î¾ß ÇÕ´Ï´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¿¡ ´ëÇÑ ÀûÀýÇÑ ±¸ÇöÀ» ÆÇº°ÇÏ´Â °ÍÀº °¢ ÆíÁý±â¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ±×·¯³ª Ç÷§ÆûÀº ¼Õ»óÀ» °è»êÇÏ°í ¼ö¸®ÇÒ ¼ö ÀÖµµ·Ï org.eclipse.jface.text.rules¿¡ ±ÔÄ¢ ±â¹Ý ¹®¼ ½ºÄ³³Ê¿¡ ´ëÇÑ Áö¿øÀ» Á¦°øÇÕ´Ï´Ù. ±âº» ¼Õ»óÀÚ ¹× ¼ö¸®ÀÚ´Â ÀÌ ÆÐŰÁö¿¡¼ Á¤Àǵ˴ϴÙ. ±âº» ¼Õ»óÀÚ¿Í ¼ö¸®ÀÚ´Â ¹®¼ÀÇ ½ºÄ³´× ±ÔÄ¢À» Á¤ÀÇÇÏ¿© ±¸¹® »ö»óÀ» ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï org.eclipse.jface.text.presentation¿¡¼ Ç¥ÁØ Á¶Á¤ÀÚ¿Í ÇÔ²² »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÌÁ¦ ¿¹Á¦ ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ ÀÛ¼º ½Ã ¼¼ºÎ»çÇ×À» »ìÆìº¸±â¿¡ ÃæºÐÇÑ Áö½ÄÀ» °®Ãß¾ú½À´Ï´Ù. Java ÆíÁý±â ¿¹Á¦°¡ Javadoc, º¹¼öÇà ÁÖ¼® µîÀ» Ç¥½ÃÇÏ´Â ÄÁÅÙÃ÷ À¯ÇüÀ¸·Î ¹®¼¸¦ ÆÄƼ¼ÇÇÏ´Â JavaPartitionScanner¸¦ ±¸ÇöÇÑ´Ù´Â Á¡À» »ó±âÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ °¢ ÄÁÅÙÃ÷ À¯ÇüÀÇ °æ¿ì ¼Õ»óÀÚ/¼ö¸®ÀÚ ½ÖÀÌ ÁöÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷Àº PresentationReconciler ¹× DefaultDamagerRepairer¸¦ »ç¿ëÇÏ¿© ´ÙÀ½°ú °°ÀÌ ¼öÇàµË´Ï´Ù.
JavaColorProvider provider= JavaEditorEnvironment.getJavaColorProvider(); PresentationReconciler reconciler= new PresentationReconciler(); DefaultDamagerRepairer dr= new DefaultDamagerRepairer(JavaEditorEnvironment.getJavaCodeScanner()); reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.JAVADOC_DEFAULT)))); reconciler.setDamager(dr, JavaPartitionScanner.JAVA_DOC); reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_DOC); dr= new DefaultDamagerRepairer(new SingleTokenScanner(new TextAttribute(provider.getColor(JavaColorProvider.MULTI_LINE_COMMENT)))); reconciler.setDamager(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT); reconciler.setRepairer(dr, JavaPartitionScanner.JAVA_MULTILINE_COMMENT); return reconciler;
¿¹Á¦°¡ °¢ ÄÁÅÙÃ÷ À¯Çü¿¡ ´ëÇØ ½ºÄ³³Ê¸¦ Á¦°øÇÔ¿¡ À¯ÀÇÇϽʽÿÀ.
±âº» ÄÁÅÙÃ÷ À¯ÇüÀº Ű¿öµå°¡ ¹ß°ßµÇ°í ä»öµÉ ¼ö ÀÖµµ·Ï JavaCodeScanner¿Í ÇÔ²² ¼³Á¤µË´Ï´Ù. JavaCodeScanner´Â ´ÜÀÏÇà ÁÖ¼®, °ø¹é ¹× ´Ü¾î µî ¼·Î ´Ù¸¥ Á¾·ùÀÇ ÅäÅ«À» ¹ß°ßÇÏ´Â µ¥ ÇÊ¿äÇÑ ±ÔÄ¢À» ºôµåÇÕ´Ï´Ù. ´Ù¸¥ ÅäÅ« À¯ÇüÀÇ ´Ü¾î¿¡ »ç¿ëµÉ »ö»óÀ» ¼³¸íÇÕ´Ï´Ù.
´Ù¸¥ ÄÁÅÙÃ÷ À¯ÇüÀÌ SingleTokenScanner·Î ¼³Á¤µÇ°í ÀÌ·¯ÇÑ ÄÁÅÙÃ÷ À¯ÇüÀÇ ÅäÅ«¿¡ »ç¿ëÇÒ »ö»óÀÌ Á¦°øµË´Ï´Ù.
½ºÄ³´× ±ÔÄ¢¿¡ µû¶ó ¹®¼ÀÇ ÀûÀýÇÑ ÆÄÆ® ¼Õ»ó ¹× ¼ö¸®¿¡ ´ëÇÑ ¸ðµç ¼¼ºÎ»çÇ×Àº DefaultDamagerRepairer¿¡¼ 󸮵˴ϴÙ. ÀϹÝÀûÀ¸·Î Ç÷¯±×ÀÎ Äڵ尡 ÀÌ·¯ÇÑ ¼¼ºÎ»çÇ×À» ÀÌÇØÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. »ç¿ëÀÚÀÇ Ç÷¯±×ÀÎÀº ÆíÁý±â ÄÁÅÙÃ÷ ÆÄƼ¼Å´× ¹× ½ºÄ³´×¿¡ ÀûÀýÇÑ ±ÔÄ¢ ¼¼Æ®¸¦ ºôµåÇÏ´Â µ¥ ÃÊÁ¡À» µÎ¾î¾ß ÇÕ´Ï´Ù.
Java ÆíÁý±â ¿¹Á¦´Â ÀÌÀü¿¡ ³ªÅ¸³ ´ë·Î ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ¸¦ ¼³Ä¡Çϱâ À§ÇØ SourceViewerConfigurationÀÇ ¼ºêŬ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. ¶ÇÇÑ ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ´Â IPresentationReconciler ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÅØ½ºÆ® Ç¥½Ã±â¿¡ µ¿ÀûÀ¸·Î ¼³Ä¡µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ¼öÇàÇÏ´Â °æ¿ì Ưº°ÇÑ ·±Å¸ÀÓ ÀÌÁ¡Àº ¾øÀ¸³ª SourceViewerConfigurationÀÇ ¼ºêŬ·¡½º¿¡ Ç÷¯±× °¡´ÉÇÑ ÀÛµ¿ ´ëü»çÇ×À» ¸ðµÎ ³õÀ¸¸é ÇÑ À§Ä¡¿¡¼ ¸ðµç ÀÛµ¿ ´ëü»çÇ×À» ÅëÇÕÇÒ ¼ö ÀÖ´Â ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. ´Ù¸¥ ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¶Á¤ÀÚ°¡ ÆíÁý±â ¼ö¸í µ¿¾È Ç¥½Ã±â¿¡ ÷ºÎµÉ ¶§ µ¿Àû ÇÁ·ÎÅäÄÝÀÌ À¯¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.