본문 바로가기
개발/Tools

Ace Editor로 소스코드를 표시하는 방법

by ispie 2019. 1. 17.

티스토리에서 마크다운을 지원해 주면 제일 좋고 편하지만, 지원해 주지 않는 고로 티스토리 블로그에서 소스코드를 표시하는 방법을 이리저리 찾아보고 시행착오를 해 본 결과 현재 시점에서는 개인적으로 제일 마음에 드는 Ace editor를 티스토리에 도입하는 방법을 간단히 소개합니다.

 

 

https://ace.c9.io/

Ace - The High Performance Code Editor for the Web

 

도입 전제조건

  • 적용할 스킨은 TISTORY 제공의 Letter
  • CDN으로 도입
  • 가급적 깔끔하게 소스의 수정은 최소한으로
  • 소스 코드내에 HTML태그도 포함

 

1. 스킨편집 - HTML편집

 

하기 링크에서 사용할 ace.js의 주소를 복사해서 <head>~</head>의 사이에 삽입합니다.

https://cdnjs.com/libraries/ace

 

다음으로 소스코드를 보여줄 부분에 대해서 ace editor가 적용되도록 설정합니다.

또한 2번째 줄의 부분은 Letter스킨 외에는 각자 스킨 설정에 맞춰서 수정할 필요가 있습니다.

$(function(){
	$('div.area_view_content div.article_content div.article_view pre[class]').each(function(){
		try{
			var lang = String($(this).attr("class")).match(/brush\:([ a-zA-Z_]*)\;?/)[1];
			lang = lang.trim().replace(/^js$/i, "javascript");
			// Ace Editor Setting
			var text = this.innerHTML;
			var editor = ace.edit(this); // ace.edit는 this의 textContent를 사용
			editor.session.setValue(text); // HTML태그를 포함하는 innerHTML 정보를 표시하고 싶을 경우엔 innerHTML 값을 별도로 설정
			editor.setOptions({
				maxLines: Infinity, // 줄 전체를 표시
				highlightActiveLine: true, // 현재 행에 하이라이트 표시
				theme: 'ace/theme/tomorrow' // 표시 테마
			})
			editor.getSession().setMode("ace/mode/"+ lang); // 언어설정(brush에서 설정한 언어를 적용)
			editor.setShowInvisibles(false); // 탭, 공백 표시
			editor.setReadOnly(true); // 읽기 전용(소스코드를 공개만 하고 싶을 경우)
			editor.setShowPrintMargin(false); // 프린트 가이드라인 표시 설정
		} catch(ex) { console.info (ex) }
	});
});

그외 옵션은 공식 사이트를 참고해 주세요.

https://ace.c9.io/#nav=howto

테마 종류는 하기 링크에서 확인 가능합니다.
https://github.com/ajaxorg/ace/tree/master/lib/ace/theme

 

 

각자 기호에 맞춰서 CSS를 수정합니다.

(밑의 CSS는 제가 적용한 내용)

.ace_editor  {
	border: 1px solid lightgray;
}

 

2. 스킨편집 - CSS편집

 

각자 기호에 맞춰서 CSS를 수정합니다.

저는 기존의 CSS의 .article_view pre의 하기 부분이 불필요 해서 삭제처리 하였습니다.

.article_view pre {
  /* padding: 20px; */
  /* background: rgba(0, 0, 0, 0.05); */
  font-size: 16px;
  color: rgba(34, 85, 51, 0.87);
  white-space: pre-wrap;
}

 

3. 티스토리에서 소스코드를 표시

 

아래와 같이 <pre class="brush : {사용언어}">~</pre> 안에 표시하고 싶은 소스코드를 넣어 사용합니다.

.ace_editor  {
	border: 1px solid lightgray;
}

 

마지막으로 사용 가능한 언어(mode)는 아래에서 확인 할 수 있습니다.

https://github.com/ajaxorg/ace/tree/master/lib/ace/mode

 

 

 

2019/01/21 추가

 

며칠 블로그를 쓰면서 괄호 "<"와 ">" 표시에 골머리를 앓았는데 현재로선 아래 설정으로 정했습니다.

$(function(){
	$('div.area_view_content div.article_content div.article_view pre[class]').each(function(){
		try{
			var lang = String($(this).attr("class")).match(/brush\:([ a-zA-Z_]*)\;?/)[1];
			lang = lang.trim().replace(/^js$/i, "javascript");
			// Ace Editor Setting
			var editor = ace.edit(this); // ace.edit는 this의 textContent를 사용
			editor.setOptions({
				maxLines: Infinity, // 줄 전체를 표시
				highlightActiveLine: true, // 현재 행에 하이라이트 표시
				theme: 'ace/theme/tomorrow' // 표시 테마
			})
			editor.getSession().setMode("ace/mode/"+ lang); // 언어설정(brush에서 설정한 언어를 적용)
			editor.setShowInvisibles(false); // 탭, 공백 표시
			editor.setReadOnly(true); // 읽기 전용(소스코드를 공개만 하고 싶을 경우)
			editor.setShowPrintMargin(false); // 프린트 가이드라인 표시 설정
			editor.session.setUseWorker(false);// 코드에 대한 경고표시 여부(false시에 경고표시 비표시)
		} catch(ex) { console.info (ex) }
	});
});

설정 이유는 innerHtml의 정보를 기반으로 ace editor를 입혔을때 문제없이 원문이 표시되기는 하지만, XML이나 C#내의 <T>정보를 티스토리 내부의 HTML정보로 티스토리가 착각(?)하여 </tag>와 같은 닫힘 태그를 자동으로 삽입시키기 때문입니다.

 

그래서 innerHtml을 셋션에 설정하는 부분을 없애고 오직 텍스트 정보만 가지고 설정하기로 했습니다.

 

상기와 같이 설정하시고 <pre class="brush: csharp">~</pre>안에 들어갈 소스코드의 [<]을 [&lt;]로 치환한 뒤 발행하면 문제없이 표시됩니다.([&lt;]로 치환하지 않으면 <>를 가진 xml이나 html, C#내의 <T>와 같은 부분은 화면상에서 아예 표시가 되지 않습니다)

 

ace editor는 소스코드의 표시 뿐만 아니라 실시간 코딩도 가능한 에디터 기능이 있기 때문에 소스코드가 바람직하지 않을 경우에는 경고표시가 뜨는데 저는 소스 일부만 공유하거나 할 경우에 경고 마크가 표시 되는것은 원치 않기 때문에 [editor.session.setUseWorker(false);] 설정을 추가하였습니다. 해당 설정은 false로 지정하지 않을 경우엔 자동으로 표시되는 것이므로 딱히 감추고 싶지 않을 경우엔 그대로 두셔도 됩니다.

 

 

 

'개발 > Tools' 카테고리의 다른 글

크롬 확장 프로그램 Word Replacer II  (0) 2019.02.02

댓글