06sourcecode.adoc 6.64 KB
Newer Older
minseok.park's avatar
minseok.park committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
= 소스 코드
Heywon Choi <heywon.choi@bankwareglobal.com>

[abstract]
.문서개요
--
이 문서는 AsciiDoc 에서 소스 코드를 표현하는 방법에 대해 설명합니다.
--

== Source Code
문서에서 소스 코드를 표현하기 위해서는 [source,언어명]와 소스 블록(----)을 사용하고 결과물은 다음과 같다.

[NOTE]
====
* 소스가 아닌 경우 [source,언어명] 는 생략하고 블록(----)만 사용한다.
* AsciiDoc에서 특수하게 사용되는 문자가 포함된 경우 xref:06sourcecode.adoc#text_print["텍스트 그대로 출력"]을 참고한다.
====

=== AsciiDoc 소스
소스 코드를 작성하는 AsciiDoc 소스는 다음과 같다.
....
[source,c]
----
#include <stdio.h>
int main() {
    printf("Hello, World!");
    return 0;
}
----
....

=== 결과
소스 코드를 사용하는 경우 본문 형태는 다음과 같다.
****
[source,c]
----
#include <stdio.h>
int main() {
    printf("Hello, World!");
    return 0;
}
----
****

== Stack Trace
문서에서 Stack Trace를 표현하기 위해서는 [%collapsible]와 블록(====)을 사용하고 결과물은 다음과 같다.

=== AsciiDoc 소스
Stack Trace를 작성하는 AsciiDoc 소스 다음과 같다.
....
.Show stacktrace
[%collapsible]
====
[source]
----
Error: Content repository not found (url: https://git.example.org/repo.git)
    at transformGitCloneError
    at git.clone.then.then.catch
Caused by: HttpError: HTTP Error: 401 HTTP Basic: Access Denied
    at GitCredentialManagerStore.rejected
    at fill.then
----
====
....

=== 결과
Stack Trace를 사용하는 경우 본문 형태는 다음과 같다.
****
.Show stacktrace
[%collapsible]
====
[source]
----
Error: Content repository not found (url: https://git.example.org/repo.git)
    at transformGitCloneError
    at git.clone.then.then.catch
Caused by: HttpError: HTTP Error: 401 HTTP Basic: Access Denied
    at GitCredentialManagerStore.rejected
    at fill.then
----
====
****

[#text_print]
== 텍스트 그대로 출력
입력한 대로 출력 텍스트를 표시한다.

* 인라인 패스 매크로: 인라인일 경우 사용한다.
* 리터럴 블록: 블록으로 지정할 때 사용한다.
* 블록 내 패스 매크로: 블록 내 패스 매크로 사용 방법
* subs 속성: 블록(및 특정 인라인 요소)에 적용되는 대체 규칙

=== 인라인 패스 매크로 (pass:[pass:[ ]])
인라인 텍스트의 서식이 지정되지 않도록 하는 특수 구문이다.

==== AsciiDoc 소스
Inline pass를 작성하는 AsciiDoc 소스 다음과 같다.
....
http.authorizeRequests()**.antMatchers("/resources/pass:[**]").permitAll()**.anyRequest().authenticated()
....

==== 결과
Inline pass를 사용하는 경우 본문 형태는 다음과 같다.
****
http.authorizeRequests()**.antMatchers("/resources/pass:[**]").permitAll()**.anyRequest().authenticated()
****

=== 리터럴 블록 (pass:[....])
리터럴 블록은 소스에서 보는 그대로 작성한 텍스트를 표시한다.

==== AsciiDoc 소스
리터럴 블록을 작성하는 AsciiDoc 소스 다음과 같다.
----
....
Kismet: Where is the *defensive operations manual*?

Computer: Calculating ...
Can not locate object.
....
----

=== AsciiDoc 소스
Stack Trace를 작성하는 AsciiDoc 소스 다음과 같다.
****
....
Kismet: Where is the *defensive operations manual*?

Computer: Calculating ...
Can not locate object.
....
****
. 출력에서 텍스트에 굵은 텍스트 서식이 적용되지 않는다.
. 세 개의 연속된 마침표가 줄임표 유니코드 문자로 대체되지 않는다.

=== 블록 내 패스 매크로
리터럴(....) 및 소스 블록(----) 내에서 pass를 사용하는 경우 pass가 매크로 대체라는 사실을 잊기 쉽다. pass를 활성화하려면 xref:06sourcecode.adoc#subs_attribute["subs 속성"]에 macros값을 할당한다.

==== AsciiDoc 소스
블록에서 Inline pass를 작성하는 AsciiDoc 소스 다음과 같다.
....
[source,java,subs="+quotes,+macros"]
----
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            **.antMatchers("/resources/pass:[**]").permitAll()**
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll();
----
....

==== 결과
블록에서 Inline pass를 사용하는 경우 본문 형태는 다음과 같다.
****
[source,java,subs="+quotes,+macros"]
----
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            **.antMatchers("/resources/pass:[**]").permitAll()**
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll();
----
****

[#subs_attribute]
=== subs 속성
블록(및 특정 인라인 요소)에 적용되는 대체 규칙은 subs 요소 속성을 사용하여 변경하거나 수정할 수 있다.

==== 종류
다음은 그 대체 단계 및 그룹이다.
[horizontal]
none:: 모든 대체를 비활성화하는 대체 그룹.

normal:: 콜아웃을 제외한 모든 대체 유형을 수행하는 대체 그룹.

specialchars:: <, > 및 &를 해당 엔티티로 대체하는 대체 단계. 소스 블록의 경우, 이 대체 단계는 구문 강조 표시를 활성화한다.

callouts:: 리터럴, 목록 및 소스 블록에서 콜아웃을 처리하는 대체 단계.

quotes:: 인라인 텍스트 서식을 적용하는 대체 단계.

attributes:: 속성 참조를 대체하는 대체 단계.

macros:: 인라인 및 블록 매크로를 처리하는 대체 단계.

post_replacements:: 줄 바꿈 문자(+)를 처리하는 대체 단계.

[NOTE]
====
* 값은 대체가 적용되는 순서도 지정한다.
* subs 요소 속성은 중첩된 블록에 상속되지 않는다. 이는 자식 블록을 가질 수 없는 단락(paragraph)이나 소스 블록(----)에만 적용될 수 있다.
====

==== 블록에 subs 속성 설정
소스 블록에서 인라인 서식 마크업을 처리하고 싶은 경우
기본적으로 소스 블록(----))은 특수 문자와 콜아웃만 적용된다. 이 동작은 블록의 속성 목록에서 subs 속성을 설정하여 변경할 수 있다.

[discrete]
==== AsciiDoc 소스
subs 속성을 작성하는 AsciiDoc 소스 다음과 같다.
....
// 기본 소스 블록
[source,java]
----
System.out.println("Hello *<name>*")
----

// subs 속성 설정
[source,java,subs="+quotes"]
----
System.out.println("Hello *<name>*")
----
....

[discrete]
==== 결과
subs 속성을 사용하는 경우 본문 형태는 다음과 같다.
****
[source,java]
----
System.out.println("Hello *<name>*")
----

[source,java,subs="+quotes"]
----
System.out.println("Hello *<name>*")
----
****