2011-05-01T18:27:41の更新内容

softwares/highlight/index.wiki.txt

current previous
3,16 3,11
 
様々な言語に対応したシンタックスハイライトツール[[Highlight:http://www.andre-simon.de/]]について。
様々な言語に対応したシンタックスハイライトツール[[Highlight:http://www.andre-simon.de/]]について。
 

        

        
 
*ソースからのビルド・インストール
*ソースからのビルド・インストール
+
LuaおよびBoostに依存するため、あらかじめインストールしておく。
+
-liblua5.1-0
+
-liblua5.1-0-dev
+
-libboost1.42-dev
+

          
 
ソースのダウンロード、展開。
ソースのダウンロード、展開。
 
#code(sh){{
#code(sh){{
~
wget http://www.andre-simon.de/zip/highlight-3.4.tar.bz2
wget http://www.andre-simon.de/zip/highlight-2.16.tar.bz2
~
tar -xvf highlight-3.4.tar.bz2
tar -xvf highlight-2.16.tar.bz2
~
cd highlight-3.4/
cd highlight-2.16/
 
}}
}}
 

        

        
 
パッケージにはconfigureは含まれておらず、標準では/usrにインストールされる。 /usr以外にインストールする場合は、以下のようにmakefileを直接編集する。
パッケージにはconfigureは含まれておらず、標準では/usrにインストールされる。 /usr以外にインストールする場合は、以下のようにmakefileを直接編集する。
23,15 18,6
 
> PREFIX = /usr/local
> PREFIX = /usr/local
 
}}
}}
 

        

        
+
また、Ubuntu 11.04ではmakeしようとした際にLuaのリンクで失敗したため、src/makefileの次の箇所を編集した。
+

          
+
#code(diff,src/makefileの変更){{
+
36c36
+
< LUA_LIBS=-llua
+
---
+
> LUA_LIBS=-llua5.1
+
}}
+

          
 
make, make installする。
make, make installする。
 
#code(sh){{
#code(sh){{
 
make
make
50,34 36,30
 

        

        
 
Installed language definitions (located in /usr/local/share/highlight/langDefs/):
Installed language definitions (located in /usr/local/share/highlight/langDefs/):
 

        

        
~
ABAP/4                        : abap4 ( abp )
Informix            : 4gl
~
ABC                           : abc
ASCEND              : a4c
~
Advanced Backus-Naur Form     : abnf
Advanced Backus-Naur Form: abnf
~
Action Script                 : actionscript ( as )
ABAP/4              : abp
+
ADA95                         : ada ( a adb ads gnad )
+
Agda                          : agda
+
ALGOL 68                      : algol ( alg )
 
  :
  :
 
  :
  :
 
}}
}}
 

        

        
 
*SWIGでC#用バインディングを作成する
*SWIGでC#用バインディングを作成する
~
examples/swig/highlight.iにSWIGのインターフェイス定義ファイルが用意されているので、これを使ってC#用バインディングを作成する。 なお、ここで使用したSWIGのバージョンは1.3.40である。
examples/swig/highlight.iにSWIGのインターフェイス定義ファイルが用意されているので、これを使ってC#用バインディングを作成する。 なお、ここで使用したSWIGのバージョンは1.3.36である。
 

        

        
 
用意されているmakefileはPython, Perl用のバインディングを作成するようにしか書かれていないので、これに追記してC#用バインディングを作成するmakefileを書く。 追記する内容は以下の通り。
用意されているmakefileはPython, Perl用のバインディングを作成するようにしか書かれていないので、これに追記してC#用バインディングを作成するmakefileを書く。 追記する内容は以下の通り。
 
#code(diff,makefileに追記する内容){{
#code(diff,makefileに追記する内容){{
 
2a3
2a3
 
> CSC=gmcs
> CSC=gmcs
~
24a26,31
25a27,33
~
> csharp: lib-stamp
> csharp:
-
> 	${MAKE} -C ../../ -f ./makefile
 
> 	swig -c++ -csharp -o highlight_wrap.cpp -dllimport libhighlight -namespace highlight highlight.i
> 	swig -c++ -csharp -o highlight_wrap.cpp -dllimport libhighlight -namespace highlight highlight.i
~
> 	${CXX} ${CFLAGS} -c highlight_wrap.cpp ${LUA_CFLAGS} -I${HL_INC} 
> 	${CXX} -c highlight_wrap.cpp -I${HL_SRC}
~
> 	${CXX} -shared -s highlight_wrap.o  -L${HL_SRC} -lhighlight ${LUA_LIBS} -o libhighlight.so
> 	${CXX} -shared -s highlight_wrap.o  -L${HL_SRC} -lhighlight -o libhighlight.so
-
> 	patch -d . -p0 < highlight.patch
 
> 	${CSC} /t:library /out:highlight.dll *.cs
> 	${CSC} /t:library /out:highlight.dll *.cs
~
> 
34c42
+
30d36
+
< 
+
39c45
 
< .PHONY: python python-clean perl perl-clean clean
< .PHONY: python python-clean perl perl-clean clean
 
---
---
 
> .PHONY: python python-clean perl perl-clean clean csharp csharp-clean
> .PHONY: python python-clean perl perl-clean clean csharp csharp-clean
87,13 69,73
 
:-dllimport libhighlight|参照するライブラリのファイル名(DllImport属性で指定される)をlibhighlightに指定
:-dllimport libhighlight|参照するライブラリのファイル名(DllImport属性で指定される)をlibhighlightに指定
 
:-namespace highlight|生成されるアセンブリのルート名前空間をhighlightに指定
:-namespace highlight|生成されるアセンブリのルート名前空間をhighlightに指定
 

        

        
-
また、swigが生成するRegexDef.cs, ReGroup.cs, RegexElement.csをそのままコンパイルするとエラーとなってしまうので、修正する必要がある。 上記のmakefile内で自動的にソースを修正するようにしてあるので、以下の内容でパッチを作成しておく。
-
#code(diff,highlight.patch){{
-
Index: RegexDef.cs
-
===================================================================
-
--- RegexDef.cs.org	2009-11-01 08:43:58.000000000 +0900
-
+++ RegexDef.cs	2009-11-01 08:44:51.000000000 +0900
-
@@ -48,9 +48,7 @@
-
       if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
     } 
-
     get {
-
-      SWIGTYPE_p_string ret = new SWIGTYPE_p_string(highlightPINVOKE.RegexDef_reString_get(swigCPtr), true);
-
-      if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
-      return ret;
-
+      return highlightPINVOKE.RegexDef_reString_get(swigCPtr);
-
     } 
-
   }
-

          
-
Index: ReGroup.cs
-
===================================================================
-
--- ReGroup.cs.org	2009-11-01 08:43:58.000000000 +0900
-
+++ ReGroup.cs	2009-11-01 08:44:51.000000000 +0900
-
@@ -86,9 +86,7 @@
-
       if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
     } 
-
     get {
-
-      SWIGTYPE_p_string ret = new SWIGTYPE_p_string(highlightPINVOKE.ReGroup_name_get(swigCPtr), true);
-
-      if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
-      return ret;
-
+      return highlightPINVOKE.ReGroup_name_get(swigCPtr);
-
     } 
-
   }
-

          
-
Index: RegexElement.cs
-
===================================================================
-
--- RegexElement.cs.org	2009-11-01 08:43:58.000000000 +0900
-
+++ RegexElement.cs	2009-11-01 08:44:51.000000000 +0900
-
@@ -112,9 +112,7 @@
-
       if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
     } 
-
     get {
-
-      SWIGTYPE_p_string ret = new SWIGTYPE_p_string(highlightPINVOKE.RegexElement_langName_get(swigCPtr), true);
-
-      if (highlightPINVOKE.SWIGPendingException.Pending) throw highlightPINVOKE.SWIGPendingException.Retrieve();
-
-      return ret;
-
+      return highlightPINVOKE.RegexElement_langName_get(swigCPtr);
-
     } 
-
   }
-

          
-
}}
-

          
 
makefileへの追記が済んだらmake csharpでmakeする。
makefileへの追記が済んだらmake csharpでmakeする。
 
#prompt{{
#prompt{{
 
$ make csharp
$ make csharp
-
make -C ../../ -f ./makefile
-
make[1]: ディレクトリ `/srv/files/build/highlight/highlight-2.16' に入ります
-
make -C ./src -f ./makefile HL_DATA_DIR=/usr/local/share/highlight/ HL_CONFIG_DIR=/etc/highlight/
-
make[2]: ディレクトリ `/srv/files/build/highlight/highlight-2.16/src' に入ります
-
c++  -o highlight arg_parser.o cmdlineoptions.o main.o help.o -L. -lhighlight
-
make[2]: ディレクトリ `/srv/files/build/highlight/highlight-2.16/src' から出ます
-
make[1]: ディレクトリ `/srv/files/build/highlight/highlight-2.16' から出ます
 
swig -c++ -csharp -o highlight_wrap.cpp -dllimport libhighlight -namespace highlight highlight.i
swig -c++ -csharp -o highlight_wrap.cpp -dllimport libhighlight -namespace highlight highlight.i
~
../../src/include/codegenerator.h:86: Warning(503): Can't wrap 'operator =' unless renamed to a valid identifier.
../../src/core/codegenerator.h:86: Warning(503): Can't wrap 'operator =' unless renamed to a valid identifier.
~
g++ -g -O2 -fPIC -c highlight_wrap.cpp -I/usr/include/lua5.1   -I../../src/include/ 
g++ -c highlight_wrap.cpp -I../../src/
~
g++ -shared -s highlight_wrap.o  -L../../src/ -lhighlight -llua5.1   -o libhighlight.so
g++ -shared -s highlight_wrap.o  -L../../src/ -lhighlight -o libhighlight.so
-
patch -d . -p0 < highlight.patch
-
patching file RegexDef.cs
-
patching file ReGroup.cs
-
patching file RegexElement.cs
 
gmcs /t:library /out:highlight.dll *.cs
gmcs /t:library /out:highlight.dll *.cs
 
}}
}}
 

        

        
115,8 157,9
 
  }
  }
 
}";
}";
 

        

        
~
    gen.initTheme("/usr/local/share/highlight/themes/edit-msvs2008.theme");
    gen.initTheme("/usr/local/share/highlight/themes/ide-msvs2008.style");
~
    gen.loadLanguage("/usr/local/share/highlight/langDefs/csharp.lang");
    gen.initLanguage("/usr/local/share/highlight/langDefs/cs.lang");
-

          
 
    gen.setIncludeStyle(true);
    gen.setIncludeStyle(true);
 
    gen.setEncoding("UTF-8");
    gen.setEncoding("UTF-8");
 

        

        
143,12 186,13
 
.hl.num { color:#000000; }
.hl.num { color:#000000; }
 
.hl.esc { color:#a31515; }
.hl.esc { color:#a31515; }
 
.hl.str { color:#a31515; }
.hl.str { color:#a31515; }
~
.hl.pps { color:#0000ff; }
.hl.dstr { color:#0000ff; }
 
.hl.slc { color:#008000; }
.hl.slc { color:#008000; }
 
.hl.com { color:#008000; }
.hl.com { color:#008000; }
~
.hl.ppc { color:#0000ff; }
.hl.dir { color:#0000ff; }
~
.hl.opt { color:#000000; }
.hl.sym { color:#000000; }
~
.hl.lin { color:#2b91af; }
.hl.line { color:#2b91af; }
-
.hl.mark	{ background-color:#ffffbb;}
 
.hl.kwa { color:#0000ff; }
.hl.kwa { color:#0000ff; }
 
.hl.kwb { color:#0000ff; }
.hl.kwb { color:#0000ff; }
 
.hl.kwc { color:#2b91af; }
.hl.kwc { color:#2b91af; }
157,16 201,16
 
</style>
</style>
 
</head>
</head>
 
<body class="hl">
<body class="hl">
~
<pre class="hl"><span class="hl kwa">public class</span> Test <span class="hl opt">{</span>
<pre class="hl"><span class="hl kwa">public class</span> Test <span class="hl sym">{</span>
~
  <span class="hl kwa">public static</span> <span class="hl kwb">void</span> <span class="hl kwd">Main</span><span class="hl opt">(</span><span class="hl kwb">string</span><span class="hl opt">[]</span> args<span class="hl opt">)</span>
  <span class="hl kwa">public static</span> <span class="hl kwb">void</span> <span class="hl kwd">Main</span><span class="hl sym">(</span><span class="hl kwb">string</span><span class="hl sym">[]</span> args<span class="hl sym">)</span>
~
  <span class="hl opt">{</span>
  <span class="hl sym">{</span>
~
    Console<span class="hl opt">.</span><span class="hl kwd">WriteLine</span><span class="hl opt">(</span><span class="hl str">&quot;Hello, world!&quot;</span><span class="hl opt">);</span>
    Console<span class="hl sym">.</span><span class="hl kwd">WriteLine</span><span class="hl sym">(</span><span class="hl str">&quot;Hello, world!&quot;</span><span class="hl sym">);</span>
~
  <span class="hl opt">}</span>
  <span class="hl sym">}</span>
~
<span class="hl opt">}</span>
<span class="hl sym">}</span>
 
</pre>
</pre>
 
</body>
</body>
 
</html>
</html>
~
<!--HTML generated by highlight 3.4, http://www.andre-simon.de/-->
<!--HTML generated by highlight 2.13, http://www.andre-simon.de/-->
 
}}
}}
 

        

        
 
-参考
-参考