Source Highlight - c/c++ 을 html 로 변환 하는 방법

C/C++ 소스 코드를 HTML로 변환하는 방법을 소개 한다.

GNU source-highlight 툴을 사용하여 소스 코드를 Visual Assist의 Syntax 컬러링과 유사한 색상의 HTML 문서로 쉽게 변환하는 팁입니다.
source-highlight 상당히 강력한 유틸리티이긴한데 콘솔 유틸리티라서 사용하기가 번거롭고 디폴트 설정으로 변경한 HTML 문서의 색상은 그다지 만족스럽지 못합니다.
Visual Assist의 색상과 비슷하게 변환하게 해주면서 익스플로러나 VC6에서 간단하게 원 클릭만으로 사용할 수 있게만들어 봤습니다.

■ source-highlight 다운로드/설치하기

우선 다음 링크에서 source-highlight를 다운로드 받아서 설치합니다.
이 글이 쓰여지고 있는 시점 에서는 최신버젼이 Source-highlight 2.1.1 입니다.

GNU Source-highlight
http://www.gnu.org/software/src-highlite/

Src-Highlite for Windows
http://gnuwin32.sourceforge.net/packages/src-highlite.htm

설치하면 기본적으로 C:\Program Files\GnuWin32 폴더로 파일들이 복사됩니다. source-highlight.exe 는 bin 폴더에 생성됩니다.

Style 파일 다운로드 style.rar

  • 콘솔창에서 Visual Assist와 유사한 색상으로 변환하기

    share/source-highlight/ 폴더에 포맷 옵션을 결정하는확장자가 style 라는 이름의 텍스트 파일이 있습니다.
    기본적으로 default.style 로 설정 되어 있으며 변경을 하려면 --style-file=style3.style 와 같은 형식으로 변경 할수 있습니다.

    style 파일은 아래와 같은 형식으로 존재하면 색상의 값을 직접 #ffffff 와 같은 방법으로 변경이 가능 합니다
    (단, Source Highlight에서 지원하지 않는 색상값 darkgray 와같은 방법으로 색상을 입력 하면 오류가 발생 합니다 이때에는 darkgray에 맞는 rgb 코드로 직접 입력 하시면 해결 가능합니다.)
    ------------------------------------------------------------------------
    keyword blue b ;
    type darkgreen ;
    string red ;
    comment brown i ;
    number purple ;
    preproc teal b ;
    symbol darkred ;
    function #ffffff b;
    cbracket red;
    lineno orange b;
    ------------------------------------------------------------------------

    콘솔 창 에서는 다음과 같은 옵션을 사용하여 변환하면 됩니다.
    >> source-highlight.exe -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref newcpp.cpp


  • 탐색기(explorer)에서 오른쪽 버튼 메뉴를 통해 HTML으로 변환하기

    아래 첨부를 REG파일로 만들어 등록 시킵니다.
    ------------------------------------------------------------------------
    Source-highlightFromExplorer.reg 파일
    ------------------------------------------------------------------------
    REGEDIT4
    [HKEY_CLASSES_ROOT\cppfile\shell\Convert to HTML]

    [HKEY_CLASSES_ROOT\cppfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""

    [HKEY_CLASSES_ROOT\cxxfile\shell\Convert to HTML]
    [HKEY_CLASSES_ROOT\cxxfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""
    [HKEY_CLASSES_ROOT\cfile\shell\Convert to HTML]
    [HKEY_CLASSES_ROOT\cfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""
    [HKEY_CLASSES_ROOT\hfile\shell\Convert to HTML]
    [HKEY_CLASSES_ROOT\hfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""
    [HKEY_CLASSES_ROOT\hppfile\shell\Convert to HTML]
    [HKEY_CLASSES_ROOT\hppfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""
    [HKEY_CLASSES_ROOT\hxxfile\shell\Convert to HTML]
    [HKEY_CLASSES_ROOT\hxxfile\shell\Convert to HTML\command]
    @="\"C:\\Program Files\\GnuWin32\\bin\\source-highlight.exe\" -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=default.style --line-number-ref \"%1\""
    ------------------------------------------------------------------------

    위의 파일은 source-highlight 가 C:\Program Files\GnuWin32\ 폴더에 설치되었다고 (디폴트) 가정합니다.
    다른 폴더에 설치했을 경우 그에 맞게 경로를 수정해야 합니다.
    style 파일은 default.style로 설정 되어 있지만 본인이 직접 만든 style 파일로 변경이 가능 합니다.

    .cpp, .cxx, .c, .h, .hpp, .hxx 확장자를 가지는 파일에서 오른쪽 마우스 클릭 후 "Convert To HTML"을 선택하면 같은 폴더에 .html 파일을 생성합니다.


  • VC6 와 VC2005 에서 툴메뉴를 통해 직접 변환하기

     a) VC6 메뉴 중 Tools -> Customize 메뉴를 실행 -> Tools 탭을 선택 합니다.
         (VC2005 : 도구 -> 외부도구)
         
     b) 추가 버튼 (점선 네모)을 선택 후 "Menu contents:" 리스트 박스에
         (VC2005 : 추가 버튼을 누른후  제목에 입력)
        "Convert To HTML" 라고 Typing 합니다 (다른문자로 해도 상관 없습니다)

     c) "Command:" 필드에
         (VC2005 : 명령 필드)
         C:\Program Files\GnuWin32\bin\source-highlight.exe
         를 적습니다.

     d) "Arguments:" 필드에    
       -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=user.style --line-number-ref "$(FilePath)"
     를 적습니다. (user.style 파일은 변경 가능 합니다.)

        (VC2005 : 인수 필드) FilePath가 ItemPath로 변경됨
      -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=user.style --tab=3 --line-number-ref "$(ItemPath)"

     추가 적으로 아래와 같이 "-o STDOUT" 옵션을 추가하면 .html 을 생성해주는 대신에 VC6의 output 윈도에 변환된 HTML 내용을 바로 출력해줍니다.
     출력된 내용을 선택/복사/붙이기 하면 더 쉽게 사용할 수 있습니다.
      -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=user.style --tab=3 --line-number-ref -o STDOUT "$(FilePath)"

    (VC2005 에서는 FilePath를 ItemPath로 변경)
      -s cpp -f html --data-dir="C:\Program Files\GnuWin32\share\source-highlight" --style-file=user.style --tab=3 --line-number-ref -o STDOUT "$(ItemPath)"

      e) "Initial directory:" 필드에 
       $(FileDir)
        (VC2005 에서는  $(ItemDir) 입력)
       
      를 적습니다.

     f) Use Output Window를 체크합니다.
        (VC2005 : 출력창 사용 체크)

     g) Close


재차 말하지만 위의 과정에서 source-highlight의 설치 폴더가 다른 경우 적절히 수정해줘야 합니다.
위의 과정 후 Tools 메뉴에 Conver To HTML 이란 메뉴가 생깁니다. 이 메뉴를 통해서 현재 VC6에서 열려진 소스 코드를 직접 HTML로 변경할 수 있습니다.

참고로 라인넘버가 필요없다면 source-highlight 의 명령 인자 중에서 --line-number-ref 를 제거하면 됩니다.


꼬릿말 : 이런한 방법이 귀찮다면, VC에서 소스를 복사한 후 마이크로소프트 워드에 붙여 넣은뒤 다시 복사하여 인터넷의 게시판등에 붙혀도 소스의 색이나 들여 쓰기 등이 원본 그대로 적용이 된다.