Skip to content

Commit 313691a

Browse files
committed
⭐ feat: 0.2.0
1 parent c73c8ea commit 313691a

28 files changed

+412
-457
lines changed

README.md

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ kmarkdown is a **well\-tested** and **pure\-Kotlin** Markdown library\.
66

77
This README\.MD was generated using kmarkdown\. [Check it out\!](src/jvmTest/kotlin/io/github/devngho/kmarkdown/Readme.kt)
88

9+
### Changelog
10+
11+
- 0\.2\.0
12+
- How to add elements in MarkdownDSL is changed\.
13+
- TextStyle is just a MarkdownElement now\.
14+
- 0\.1\.0
15+
- Initial release
16+
917
### Installation
1018

1119
```kts
@@ -34,11 +42,11 @@ A paragraph represents multiple markdown elements, such as code blocks or list,
3442

3543
```kotlin
3644
// in markdown document
37-
paragraph {
38-
block {
45+
+paragraph {
46+
+block {
3947
+("This is a paragraph.")
4048
}
41-
block {
49+
+block {
4250
+("It can contain multiple blocks.")
4351
}
4452
}
@@ -60,33 +68,29 @@ A block can contain multiple inline markdown elements like text, link\.
6068

6169
```kotlin
6270
// in markdown document
63-
block {
71+
+block {
6472
+("This is a block. ")
6573
+("It can contain multiple markdown elements.")
6674

6775
// or you can use '_' infix function
6876
// to concatenate markdown elements with a space
6977

70-
+("This is another way to create a block."() _ "using the '_' infix function."())
78+
+(text("This is another way to create a block.") _ text("using the '_' infix function."))
7179

7280
// + operator can concatenate markdown elements without space
7381

74-
+("+ operator can concatenate "() + "markdown elements without space.")
82+
+(text("+ operator can concatenate ") + text("markdown elements without space."))
7583

7684
// or you can use list of markdown elements
7785

78-
+listOf("You can also use a list of markdown elements."(), "to create a block.")
86+
+listOf(text("You can also use a list of markdown elements."), text("to create a block."))
7987
}
8088
```
8189

8290
Output:
8391

8492
This is a block\. It can contain multiple markdown elements\.This is another way to create a block\. using the '\_' infix function\.\+ operator can concatenate markdown elements without space\.You can also use a list of markdown elements\. to create a block\.
8593

86-
> **Why did you append \(\) to the text?**
87-
>
88-
> Because the text is a markdown element, and the function expects a markdown element\. You can add styles to the text by appending styles to the text\.
89-
9094
#### Heading
9195

9296
To create a heading, you can use the `heading` function\.
@@ -95,8 +99,8 @@ The `heading` function takes a level and text as parameters\.
9599

96100
```kotlin
97101
// in markdown document
98-
heading(2, "Hello, World!") {
99-
block {
102+
+heading(2, "Hello, World!") {
103+
+block {
100104
+("This is a heading.")
101105
}
102106
}
@@ -116,7 +120,7 @@ The `link` function takes a text and url as parameters\.
116120

117121
```kotlin
118122
// in markdown document
119-
link("This is a link", "https://example.com")
123+
+link("This is a link", "https://example.com")
120124
```
121125

122126
Output:
@@ -131,11 +135,11 @@ The `list` function takes a list style as a parameter\.
131135

132136
```kotlin
133137
// in markdown document
134-
list(List.ListStyle.ORDERED) {
138+
+list(List.ListStyle.ORDERED) {
135139
item {
136140
+"This is a list item."
137141
}
138-
list(List.ListStyle.UNORDERED) {
142+
list(List.ListStyle.ORDERED) {
139143
item {
140144
+"This is a nested list item."
141145
}
@@ -146,7 +150,7 @@ list(List.ListStyle.ORDERED) {
146150
Output:
147151

148152
1. This is a list item\.
149-
- This is a nested list item\.
153+
1. This is a nested list item\.
150154

151155
#### Blockquote
152156

@@ -156,8 +160,8 @@ The `blockquote` function takes a block as a parameter\.
156160

157161
```kotlin
158162
// in markdown document
159-
blockquote {
160-
block {
163+
+blockquote {
164+
+block {
161165
+("This is a blockquote.")
162166
}
163167
}
@@ -175,8 +179,8 @@ The `codeblock` function takes a code block and language \(optional\) as paramet
175179

176180
```kotlin
177181
// in markdown document
178-
codeblock("println(\"Hello, World!\")", "kotlin")
179-
codeblock("Language is optional.")
182+
+codeblock("println(\"Hello, World!\")", "kotlin")
183+
+codeblock("Language is optional.")
180184
```
181185

182186
Output:
@@ -195,7 +199,7 @@ The `inlineCodeBlock` function takes a code block as a parameter\.
195199

196200
```kotlin
197201
// in markdown document
198-
inlineCodeBlock("println(\"Hello, World!\")")
202+
+inlineCodeBlock("println(\"Hello, World!\")")
199203
```
200204

201205
Output:
@@ -214,7 +218,7 @@ The `raw` function takes a text as a parameter\.
214218

215219
```kotlin
216220
// in markdown document
217-
raw("This is a raw element.")
221+
+raw("This is a raw element.")
218222
```
219223

220224
Output:

README_ko.md

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1-
[English](README.md) \| 한국어
1+
[English](README.md) \| 한국어
22

33
## kmarkdown
44

5-
kmarkdown은 **잘 테스트된**, **순수한 Kotlin** Markdown 라이브러리입니다\.
5+
kmarkdown은 **잘 테스트된**, **순수한 코틀린** 마크다운 라이브러리입니다\.
66

77
이 README\.md는 kmarkdown으로 쓰여졌어요\. [확인해보세요\!](src/jvmTest/kotlin/io/github/devngho/kmarkdown/Readme.kt)
88

9+
### 변경 내역
10+
11+
- 0\.2\.0
12+
- MarkdownDSL에 요소를 추가하는 방법이 변경되었습니다\.
13+
- TextStyle는 이제 일반 MarkdownElement입니다\.
14+
- 0\.1\.0
15+
- 첫 릴리즈
16+
917
### 설치
1018

1119
```kts
@@ -30,11 +38,11 @@ val document = markdown(GFMFlavor) {
3038

3139
```kotlin
3240
// 마크다운 문서 안에서 사용하세요
33-
paragraph {
34-
block {
41+
+paragraph {
42+
+block {
3543
+("이건 문단입니다.")
3644
}
37-
block {
45+
+block {
3846
+("여러 블럭을 포함할 수 있습니다.")
3947
}
4048
}
@@ -56,40 +64,36 @@ paragraph {
5664

5765
```kotlin
5866
// 마크다운 문서 안에서 사용하세요
59-
block {
67+
+block {
6068
+("이건 블럭입니다. ")
6169
+("여러 마크다운 요소를 포함할 수 있습니다.")
6270

6371
// 또는 '_' infix 함수를 사용해 공백으로 마크다운 요소를 연결할 수 있습니다.
6472

65-
+("_ infix 함수를 사용해"() _ "이렇게 블럭을 만들 수도 있습니다."())
73+
+(text("_ infix 함수를 사용해") _ text("이렇게 블럭을 만들 수도 있습니다."))
6674

6775
// + 연산자는 공백 없이 마크다운 요소를 연결할 수 있습니다.
6876

69-
+("+ 연산자를 사용해 "() + "이렇게 블럭을 만들 수도 있습니다.")
77+
+(text("+ 연산자를 사용해 ") + text("이렇게 블럭을 만들 수도 있습니다."))
7078

7179
// 또는 마크다운 요소의 리스트를 사용할 수도 있습니다.
7280

73-
+listOf("리스트를 사용해"(), "블럭을 만들 수도 있습니다."())
81+
+listOf(text("리스트를 사용해"), text("블럭을 만들 수도 있습니다."))
7482
}
7583
```
7684

7785
출력:
7886

79-
이건 블럭입니다\. 여러 마크다운 요소를 포함할 수 있습니다\.\+ 연산자를 사용해 이렇게 블럭을 만들 수도 있습니다\.이렇게 블럭을 만들 수도 있습니다\. 사용해리스트를 사용해 블럭을 만들 수도 있습니다\.
80-
81-
> **텍스트 뒤에 왜 \(\)를 붙였나요?**
82-
>
83-
> 마크다운 `Text`로 변환하기 위함입니다\. \(\) 안에 `Bold`와 같은 스타일을 추가할 수 있습니다\.
87+
이건 블럭입니다\. 여러 마크다운 요소를 포함할 수 있습니다\.\_ infix 함수를 사용해 이렇게 블럭을 만들 수도 있습니다\.\+ 연산자를 사용해 이렇게 블럭을 만들 수도 있습니다\.리스트를 사용해 블럭을 만들 수도 있습니다\.
8488

8589
#### 헤딩
8690

8791
헤딩을 만드려면 `heading` 함수를 사용하세요\.
8892

8993
```kotlin
9094
// 마크다운 문서 안에서 사용하세요
91-
heading(2, "Hello, World!") {
92-
block {
95+
+heading(2, "Hello, World!") {
96+
+block {
9397
+("이건 헤딩입니다.")
9498
}
9599
}
@@ -107,7 +111,7 @@ heading(2, "Hello, World!") {
107111

108112
```kotlin
109113
// 마크다운 문서 안에서 사용하세요
110-
link("이건 링크입니다.", "https://example.com")
114+
+link("이건 링크입니다.", "https://example.com")
111115
```
112116

113117
출력:
@@ -120,7 +124,7 @@ link("이건 링크입니다.", "https://example.com")
120124

121125
```kotlin
122126
// 마크다운 문서 안에서 사용하세요
123-
list(List.ListStyle.ORDERED) {
127+
+list(List.ListStyle.ORDERED) {
124128
item {
125129
+"리스트 아이템입니다."
126130
}
@@ -143,8 +147,8 @@ list(List.ListStyle.ORDERED) {
143147

144148
```kotlin
145149
// 마크다운 문서 안에서 사용하세요
146-
blockquote {
147-
block {
150+
+blockquote {
151+
+block {
148152
+("이건 인용구입니다.")
149153
}
150154
}
@@ -160,8 +164,8 @@ blockquote {
160164

161165
```kotlin
162166
// 마크다운 문서 안에서 사용하세요
163-
codeblock("println(\"Hello, World!\")", "kotlin")
164-
codeblock("언어 옵션은 선택입니다.")
167+
+codeblock("println(\"Hello, World!\")", "kotlin")
168+
+codeblock("언어 옵션은 선택입니다.")
165169
```
166170

167171
출력:
@@ -178,7 +182,7 @@ println("Hello, World!")
178182

179183
```kotlin
180184
// 마크다운 문서 안에서 사용하세요
181-
inlineCodeBlock("println(\"Hello, World!\")")
185+
+inlineCodeBlock("println(\"Hello, World!\")")
182186
```
183187

184188
출력:
@@ -187,15 +191,15 @@ inlineCodeBlock("println(\"Hello, World!\")")
187191

188192
#### Raw
189193

190-
> **Raw 요소를 사용하는 것은 권장되지 않습니다\.**
194+
> **Raw 요소를 사용하는 것은 권장하지 않습니다\.**
191195
>
192196
> 대신에 커스텀 `Flavor`를 만드는 것을 추천합니다\.
193197
194198
Raw 요소를 만드려면 `raw` 함수를 사용하세요\.
195199

196200
```kotlin
197201
// 마크다운 문서 안에서 사용하세요
198-
raw("이건 Raw 요소입니다.")
202+
+raw("이건 Raw 요소입니다.")
199203
```
200204

201205
출력:

build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
}
99

1010
group = "io.github.devngho"
11-
version = "0.1.0"
11+
version = "0.2.0"
1212

1313
repositories {
1414
mavenCentral()
@@ -113,6 +113,7 @@ kotlin {
113113
implementation("io.kotest:kotest-runner-junit5:$kotestVersion")
114114
implementation(kotlin("test-common"))
115115
implementation(kotlin("test-annotations-common"))
116+
implementation(kotlin("reflect"))
116117
}
117118

118119
applyDefaultHierarchyTemplate()

src/commonMain/kotlin/io/github/devngho/kmarkdown/builder/MarkdownDSL.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ class MarkdownDSL internal constructor(val flavor: Flavor) {
1313
elements.add(element)
1414
}
1515

16+
operator fun MarkdownElement.unaryPlus() {
17+
elements.add(this)
18+
}
19+
20+
operator fun List<MarkdownElement>.unaryPlus() {
21+
elements.addAll(this)
22+
}
23+
1624
fun build(): String = flavor.build(elements.map { it.convertTo(flavor) })
1725

1826
companion object {

src/commonMain/kotlin/io/github/devngho/kmarkdown/flavor/Flavor.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ interface Flavor {
1414
}
1515

1616
val elements: Map<String, MarkdownElementDescriptor<*>>
17-
val staticElements: Map<String, MarkdownElementDescriptor<*>>
1817

1918
fun build(elements: List<MarkdownElement>): String
2019
}

src/commonMain/kotlin/io/github/devngho/kmarkdown/flavor/common/Block.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,13 @@ data class Block(val children: kotlin.collections.List<MarkdownElement>): Markdo
4545
/** Combines two elements with a space between them. */
4646
infix fun String.`_`(element: MarkdownElement) = Block(listOf(Text(this), Text(" "), element))
4747

48-
fun String.styled(vararg style: Text.TextStyle) = Text(this, style.toMutableList())
49-
50-
operator fun String.invoke(vararg style: Text.TextStyle) = Text(this, style.toMutableList())
51-
52-
fun build(): kotlin.collections.List<MarkdownElement> = elements.map { it.convertTo<MarkdownElement>(flavor) }
48+
fun build(): kotlin.collections.List<MarkdownElement> = elements.map { it.convertTo(flavor) }
5349
}
5450

5551
override fun encode(): String = children.joinToString("") { it.encode() }
5652

5753
companion object: MarkdownElementDescriptor<Block> {
58-
fun MarkdownDSL.block(block: BlockDSL.() -> Unit) {
59-
val element = Block(BlockDSL(this.flavor).apply(block).build())
60-
add(element)
61-
}
54+
fun MarkdownDSL.block(block: BlockDSL.() -> Unit) = Block(BlockDSL(this.flavor).apply(block).build())
6255

6356
override val id: String = "block"
6457
override val flavor: Flavor = CommonFlavor

src/commonMain/kotlin/io/github/devngho/kmarkdown/flavor/common/Blockquote.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@ data class Blockquote(val children: Paragraph) : MarkdownElement {
1414
override fun encode(): String = children.encode().prependIndent("> ")
1515

1616
companion object: MarkdownElementDescriptor<Blockquote> {
17-
fun MarkdownDSL.blockquote(block: MarkdownDSL.() -> Unit) {
18-
val element = Blockquote(Paragraph(MarkdownDSL(this.flavor).apply(block).elements))
19-
20-
add(element)
21-
}
17+
fun MarkdownDSL.blockquote(block: MarkdownDSL.() -> Unit) = Blockquote(Paragraph(MarkdownDSL(this.flavor).apply(block).elements))
2218

2319
override val id: String = "blockquote"
2420
override val flavor: Flavor = CommonFlavor

0 commit comments

Comments
 (0)