01. 서론
블로그에 소스코드를 삽입하다 보니 문제점에 봉착했다. 티스토리 블로그에 코드를 삽입할 때 html 형태로 들어가게 되는데, html에서는 <, > 그리고 &의 특수문자들을 다른 방식으로 해석하기 때문에 코드 삽입에 오류가 생긴다. 그래서 간단하게 이 특수문자들을 html에서 인식할 수 있게끔 소스코드를 변환시켜주는 프로그램을 만들어 보기로 했다.
02. 구상
- 사용할 언어 : C++
- 처음에는 단어 단위로 변환해보려고 하다가 tab이나 space 등을 처리하는데에 문제가 생겨서 getline을 통해 문장단위로 읽어들여 char 하나씩 검사하고 변환하는 방식으로 프로그램 하였다.
03. 실행
$ g++ code-translate.cpp -o code-translate
$ ./code-translate example.cpp example-out.cpp
* example.cpp
#include<iostream>
using namespace std;
// this code has a lot of <, >, &
int main(void)
{
string one;
string &two = one;
string &three = two;
int a = 1;
int b = 2;
int c = (a > b) ? a : b;
int d = (b < c) ? b : c;
return 0;
}
*example-out.cpp
04. 코드
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
ifstream inp;
ofstream out;
vector<string> code;
if(argc != 3) {
cout << "how to use : ";
cout << "./codetranslate <inputfilename> <outputfilename>" << endl;
return 0;
}
inp.open(argv[1]);
out.open(argv[2]);
for(string line; getline(inp, line); ) {
for(int i=0; i<line.length(); ++i) {
switch(line[i]) {
case '<':
line.replace(i, 1, "<");
i += 3;
break;
case '>':
line.replace(i, 1, ">");
i += 3;
break;
case '&':
line.replace(i, 1, "&");
i += 4;
break;
default:
break;
}
}
code.push_back(line);
}
for(auto it=code.begin(); it!=code.end(); ++it)
out << *it << endl;
inp.close();
out.close();
return 0;
}
05. 결론
간단한 프로그램이지만 스스로 필요성을 느끼고 직접 만들었다는 점이 뿌듯하고 이 프로그램을 사용하여 코드를 편하게 블로그에 포스팅 할 수 있음에 행복하다. 이 블로그에 놀러오는 블로거 분들중 필요하면 얼마든지 사용하시길 바란다.