TT에 소스코드 Syntax Highlight 플러그인 설치했다.


내 홈피의 뒷받침을 해주고 있는 테터툴즈를 1.0.6.1로 업그레이드 하고 몇 가지 플러그인을 설치하였다. 테터의 개방된 구조를 지향하는 올바른 개발자 철학이 맘에 든다.

여러 플러그인 중에 가장 끌렸던 것은 소스의 Syntax Highlight 기능.

사실 이 사이트에 소스를 많이 올린 편은 아니지만, 올린 소스도 그다지 이쁘게 표현되지 않았던 것이 사실이다.

테터의 플러그인 페이지{.broken_link}에 가면 몇 가지가 있지만 가장 편하고 이뻐 보이는 것은 후리자 님이 만든 테터코드 하이라이트 플러그인 v0.93{.broken_link}이 었다.

적용예는 맨 밑에 있다. 아주 맘에 든다… 깔끔하고..

일단 이걸 하고, 내 홈피의 나머지 소스 부분 얼마 있진 않지만 거기도 다 이걸로 바꿔야 겠다. ㅎㅎㅎㅎ

에러코드 잡기

그런데 플러그인을 적용할 때 문제가 있었었다.

에러가 반환되었던 것… 후리자 님의 방법에 따라서 에러코드가 나오는 ch_main.js를 넣고 실행을 했었는데, 에러코드가 0이 나왔었고, 스크립트를 좀 뜯어봤더니 에러가 나는 곳은….

ch_main.js 의 41번째 라인에서.

var html = “ ” + iframe.contentWindow.document.body.innerHTML + “ ”;

iframe.contentWindow까지는 얻어오는 데 그 밑에 document 이하를 못 얻어오고, 얻어오고자 하면 익스플로러 아래의 상태줄에 Error  접근 권한이 없습니다. 이런 에러가 떳었다.

그러다가 어찌어찌 하다 보니.. 소스를 고치진 않았는데 그냥 되버렸다. 제대로 contentWindow도 얻어오고.. 희안했다.  답을 알았으면 후리자님 블로그에 댓글이라도 남길려고 했는데.. 어영부영 이상하게 되버려서 답을 적다가 말았다.

되서 좋긴 한데.. 그래도 뒤끝이…머쓱 머쓱.

후리자님도 디버깅을 할 환경이 안되서 못고치고 있는 것 같은데. 개발자는 에러를 재현할 수 있어야 디버깅 할 수 있는 것 아닌가…

적용예

  1. // stltest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
  2. //
  3. #include “stdafx.h”
  4. #include </span> </div>
  5. #include </span> </div>
  6. #include </span> </div>
  7. // 테스트 데이터를 담고 있는 구조체
  8. struct test
  9. {
  10.   int idx;
  11.   float v1;
  12.   float v2;
  13.   float v3;
  14. };
  15. // remove_if의 조건문에 해당하는 함수
  16. bool isgood(test t)
  17. {
  18.   if(t.v1 + t.v2 + t.v3 < 180)
  19.   {
  20.     return true;
  21.   }
  22.   else
  23.   {
  24.     return false;
  25.   }
  26. }
  27. // find_if의 조건문에 해당하는 함수
  28. bool findme(test t)
  29. {
  30.   if(t.idx == 99)
  31.   {
  32.     return true;
  33.   }
  34.   else
  35.   {
  36.     return false;
  37.   }
  38. }
  39. //
  40. bool sortrule(const test& a1, const test& a2)
  41. {
  42.   // return a1.idx < a2.idx;
  43.   return sqrt(a1.v1 * a1.v1 + a1.v2 * a1.v2 + a1.v3 * a1.v3) < sqrt(a2.v1 * a2.v1 + a2.v2 * a2.v2 + a2.v3 *a2.v3 );
  44. }
  45. void printvalues(std::vector& tests) </div>
  46. {
  47.   char str[80];
  48.   std::vector::iterator itr; </div>
  49.   // 값출력
  50.   printf(“값출력 size of vector is %dn, tests.size());
  51.   for(itr = tests.begin(); itr != tests.end(); itr++)
  52.   {
  53.     sprintf(str, “%dt%3.3ft%3.3ft%3.3fn, itr->idx, itr->v1, itr->v2, itr->v3);
  54.     printf( str );     
  55.   }
  56. }
  57. int _tmain(int argc, _TCHAR* argv[])
  58. {
  59.   std::vector tests; </div>
  60.   std::vector::iterator itr; </div>
  61.   // 01. 값설정 –> push_back()을 사용한다.
  62.   for(float i=; i < 10; i++)
  63.   {
  64.     test t;
  65.     t.idx = (int)i;
  66.     t.v1 = 10.0f * i;
  67.     t.v2 = 20.0f * i;
  68.     t.v3 = 30.0f * i;
  69.     tests.push_back(t);
  70.   }
  71.   printvalues(tests);
  72.   // 임의로 뒤집기
  73.   random_shuffle(tests.begin(), tests.end());
  74.   // 02. 조건에 맞는 놈 지우기 –> remove_if()를 사용한다.
  75.   tests.erase(remove_if(tests.begin(), tests.end(), isgood), tests.end());
  76.   printvalues(tests);   // 값보자..
  77.   // 03. 원하는 위치에 몇 놈집어넣기 –> insert()를 사용해서..
  78.   test t = { 99, 444.0f, 555.0f, 666.0f};
  79.   tests.insert(tests.begin()+4, t);
  80.   printvalues(tests);
  81.   // 04. 바꾸기를 해보자 –>
  82.   test t2 = { 199, 444.0f, 555.0f, 666.0f};
  83.   itr = find_if(tests.begin(), tests.end(), findme);    // 이 놈을 찾아서
  84.   tests.erase(itr);          // 지우고
  85.   tests.insert(itr, t2);                  // 그자리에 다른 놈을 넣어준 다음에
  86.   printvalues(tests);
  87.   // 05. sort를 해보자
  88.   printf(“sortn);
  89.   sort(tests.begin(), tests.end(),sortrule);
  90.   printvalues(tests);
  91. /*
  92.   // 해당위치에 삽입하기
  93.   test t;
  94.   t.idx = (int)i;
  95.   t.v1 = 10.0f * i;
  96.   t.v2 = 20.0f * i;
  97.   t.v3 = 30.0f * i;
  98. //  tests.insert()
  99. */
  100.   return ;
  101. }
  102. </ol> </div>