source

T-SQL에 대한 GeSHI 구문 강조 표시 개선

lovecheck 2023. 3. 23. 22:50
반응형

T-SQL에 대한 GeSHI 구문 강조 표시 개선

WP-GeSHI를 WordPress로 사용하고 있는데 대체로 만족하고 있습니다.단, 키워드가 다음과 같은 경우 색상 강조 표시가 너무 심한 몇 가지 사소한 시나리오가 있습니다.

  1. 변수 이름(선두에 의해 표시됨)@)
  2. 다른 단어의 일부(예:ININSERTED)
  3. 조합(예: 변수 이름의 일부).JOIN그리고.IN@JOINBING)
  4. 대괄호 안쪽(예:[status])

대소문자를 구분하는 키워드와 대소문자를 구분하지 않는 키워드가 있습니다.다음 스크린샷은 이 문제가 발생하는 다양한 사례를 요약한 것입니다.

여기에 이미지 설명 입력

이제, 코드는GeSHi.php꽤 장황하고, 저는 결코 PHP 전문가가 아닙니다.저는 제 손을 더럽히는 것이 두렵지 않지만, 다른 누군가가 이 코드를 수정하고 몇 가지 힌트를 줄 수 있기를 바랍니다.이미 회피책을 실장하고 있습니다.@@ROWCOUNT잘못 강조되지 않도록 했지만, 이것은 쉬웠다. 왜냐하면 왜냐하면@@ROWCOUNT정의되어 있습니다.- 어레이를 이리저리 섞은 것만으로, 이전에 검출된 어레이는ROWCOUNT.

GeSHI는 전체 단어가 아닌 키워드를 완전히 무시해야 합니다(이 키워드의 접두사 여부에 관계없이).@또는 바로 다른 문자/문자로 둘러싸여 있습니다.) JOIN회색이어야 하는데@JOIN그리고.JOINS안 돼요.또한 각 괄호 안에 있는 키워드는 무시해 주셨으면 합니다(Management Studio는 이를 컬러 하이라이트하지 않도록 지시하고 SQL 엔진에 예약된 단어, 키워드 및 잘못된 식별자를 무시하도록 지시합니다).

이 작업을 수행하려면 다음 명령을PARSER_CONTROL어레이의 마지막까지 제어:

'PARSER_CONTROL' => array(
    'KEYWORDS' => array(
        1 => array( // "1" maps to the main keywords near the start of the array
            'DISALLOWED_BEFORE' => '(?![\(\w])',
            'DISALLOWED_AFTER' => '(?![\(\w])'
        ),
        5 => array( // "5" maps to the shorter keywords like "IN" that are further down
            'DISALLOWED_BEFORE' => '(?![\(\w])',
            'DISALLOWED_AFTER' => '(?![\(\w])'
        ),
    )
)

편집

당신이 추가한 키워드 중 일부를 이동하도록 당신의 요지를 수정했습니다.SYMBOLS로 되돌아가다.KEYWORDS(그들만의 그룹과 당신의 커스텀 스타일에 따라) 그리고 저는 업데이트했습니다.PARSER_CONTROLarray는 새로운 키워드 배열 인덱스와 일치하며 기본값도 포함합니다.regex게시가 만들어 내는 거죠다음은 링크입니다.

https://gist.github.com/jamend/07e60bf0b9acdfdeee7a

제 말에 의하면, 당신이 하고 있는 일은 시간이 많이 걸릴 것 같습니다.따라서 다른 플러그인을 설치하는 것이 좋습니다.

더 나은 기능을 갖추고 더 많은 언어를 지원하며 더 나은 방식으로 지원합니다.이 모든 문제를 제거할 수 있습니다.

편집:

최신 버전으로 같은 코드를 시도해보니 다음과 같은 결과가 나왔는데...

여기에 이미지 설명 입력

편집:

다른 플러그인을 사용하고 싶지 않다면 코딩에 대해 알려드리겠습니다.

먼저 텍스트 에디터에서 \wp-content\plugins\wp-geshi-highlight\geshi\tsql.php를 엽니다.

다음 .'KEYWORDS'검색해 주세요.

65이치노예를 들어 다음과 같습니다.

5 => array(
'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL',
'OR', 'OUTER', 'SOME',
),

6 => array(                          //This line has been added by me
'status'                             //This line has been added by me
)                                    //This line has been added by me

메모: 지금까지 어레이 요소 5(이미 존재)와 어레이 요소 6(작성 완료)을 보여드렸습니다.

그런 다음 대소문자를 구분하기 위해 아래 코드를 다음 중 마지막 코드에 추가합니다.'CASE_SENSITIVE' 스위칭:

6 => true

'CASE_SENSITIVE'츠키다

'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
        1 => false,
        2 => false,
        3 => false,
        4 => false,
        5 => false,
        6 => true                         //This line has been added by me
        ),

이제 커스텀 키워드에 스타일을 추가해야 합니다. , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 를 합니다.'KEYWORDS''STYLES'array. 시작'STYLES'츠키다

'STYLES' => array(
        'KEYWORDS' => array(
            1 => 'color: #0000FF;',
            2 => 'color: #FF00FF;',
            3 => 'color: #AF0000;',
            4 => 'color: #AF0000;',
            5 => 'color: #808080;',
            6 => 'color: #0000FF;'          //This line has been added by me
            ),

위의 가이드라인에 따라 문제를 해결할 수 있지만, 플러그인이 불완전한 단어를 강조 표시하는 부분은 이 문제를 해결하기 위해 플러그인을 최신 버전으로 업데이트해야 하는 솔루션을 하나 찾았습니다.

언급URL : https://stackoverflow.com/questions/23544380/improve-geshi-syntax-highlighting-for-t-sql

반응형