개요
워프 플러그인 중 SyntaxHighlighter기반의 플러그인이 매우 여러개 존재합니다. 저의 경우는 SyntaxHighlighter 라는 이름의 플러그인을 쓰고 있지만 그 외에 비슷비슷한 이름으로 한가득 있습니다. 그러한 플러그인중 본인이 설치한 플러그인에 직접 설정하는 방법으로 설명합니다. swift는 최근 iOS개발등에 활용되는 언어인데 기본적으로 SyntaxHighlighter에서 지원되지 않고 있어서 다양한 구현체가 난립하고 있습니다. 현재 비사이드 블로그에 스위프트관련 포스팅에 적용된 브러쉬와 설정방법을 차근차근 공유하죠.
shBrushSwift.js
일단 이 브러쉬 파일을 만들어야합니다. 걍 아래 소스 긁어서 만드세요.
/** * WordPress SyntaxHighlighter brush for Swift 2.0 * By Dal Rupnik, unifiedsense.com * * Copyright (C) 2015 Dal Rupnik * * Source for Lexical Structure: * https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/LexicalStructure.html * * Adapted from: * WordPress SyntaxHighlighter brush for Objective-C * By Matej Bukovinski, www.bukovinski.com * * Copyright (C) 2009 Matej Bukovinski * * Licensed under a GNU Lesser General Public License. * http://creativecommons.org/licenses/LGPL/2.1/ * */ ;(function(){ SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null); function Brush(){ var datatypes = 'Array Bool Character Dictionary Double Float Int Int16 Int32 Int64 Int8 Range Set String '+ 'UInt UInt16 UInt32 UInt64 UInt8 Unmanaged UnsafeBufferPointer UnsafePointer Optional '+ 'AnyObject BooleanType CollectionType Comparable ErrorType Equatable Hashable Indexable '+ 'IntegerType OptionSetType SequenceType UnsignedIntegerType '+ 'AnyObject? T T? Element Key Value ArraySlice ImplicitlyUnwrappedOptional Selector'; var keywords = 'class deinit enum extension func import init inout internal let operator private protocol public static struct subscript typealias var '+ 'break case continue default defer do else fallthrough for guard if in repeat return switch where while. ' + 'as catch dynamicType false is nil rethrows super self Self throw throws true try __COLUMN__ __FILE__ __FUNCTION__ __LINE__ '+ 'associativity convenience dynamic didSet final get infix indirect lazy left mutating none nonmutating optional override postfix precedence prefix Protocol required right set Type unowned weak willSet ' + '@availability @autoclosure @noescape @noreturn @NSApplicationMain @NSCopying @NSManaged @objc @UIApplicationMain ' + 'IBAction IBOutlet IBOutletCollection IBInspectable IBDesignable'; this.regexList = [ {regex:SyntaxHighlighter.regexLib.doubleQuotedString, css:'string'}, {regex:/\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css:'value'}, {regex:new RegExp('^ *#.*', 'gm'), css:'preprocessor'}, {regex:SyntaxHighlighter.regexLib.singleLineCComments, css:'comment'}, {regex:SyntaxHighlighter.regexLib.multiLineCComments, css:'comment'}, {regex:new RegExp(this.getKeywords(keywords), 'gm'), css:'keyword'}, {regex:new RegExp('@\\w+\\b', 'g'), css:'keyword'} ]; this.forHtmlScript({ left : /(<|<)%[@!=]?/g, right : /%(>|>)/g }); }; Brush.prototype = new SyntaxHighlighter.Highlighter(); Brush.aliases = ['swift']; SyntaxHighlighter.brushes.Swift = Brush; typeof exports != 'undefined' ? exports.Brush = Brush : null; })();
적당히 기본체를 구현한 브러쉬를 구했으나 엉망이기도 하고 스타일 값에 따라 여러가지 버그도 생겨서 나름대로 정리하고 보강했습니다. 이렇게 만든 파일을 플러그인이 설치된 wp-content/plugins/플러그인명/ 으로 가보면 약간씩 구조가 다를진 몰라도 SyntaxHighlighter2 와 SyntaxHighlighter3 라는 폴더를 발견할 수 있습니다.
각 폴더 밑에는 scripts라는 서브폴더가 있습니다. 두군데 다 브러쉬 파일을 카피해줍니다. 제 플러그인 기준으로 아래와 같이 되겠죠.
- wp-content/plugins/SyntaxHighlighter/SyntaxHighlighter2/scripts/shBrushSwift.js
- wp-content/plugins/SyntaxHighlighter/SyntaxHighlighter3/scripts/shBrushSwift.js
일단 서버에 업로드하면 쓸 준비는 되었습니다만 단축태그를 등록해야합니다.
SyntaxHighlighter.php 수정
브러쉬를 단축태그로 등록하는건 SyntaxHighlighter.php에서 합니다. 설치된 플러그인폴더 루트에 있을 확률이 높습니다. 제 플러그인 기준으로 다음과 같은 경로에 있습니다.
- wp-content/plugins/SyntaxHighlighter/SyntaxHighlighter.php
이 파일을 열어서 “// Register brush scripts” 라는 주석을 검색해보면 114번째줄 언저리가 찾아집니다. 여기에 보면 쭉 스크립트 파일을 등록하고 있는데 여기에 다음과 같이 추가해줍니다.
wp_register_script('syntaxhighlighter-brush-swift', plugins_url($this->shfolder.'/scripts/shBrushSwift.js', __FILE__), array('syntaxhighlighter-core'), $this->agshver);
다음은 단축태그를 등록해야합니다. 다음관 같은 코드를 찾아서 첫줄에 추가해주시면 됩니다.
$this->brushes = (array) apply_filters( 'syntaxhighlighter_brushes', array( //여기에 추가! 'swift' => 'swift', 'as3' => 'as3', 'actionscript3' => 'as3',
이제 끝입니다. 업로드하시면 됩니다.
결론
최근 스위프트로 개발하다보니 포스팅할때 스위프트 브러쉬가 없어 불편하더군요. 간단히 추가했습니다. 향후 브러쉬를 좀 고도화해보는 걸로…
recent comment