diff --git a/assets/mods/basegame/books/btex.xml b/assets/mods/basegame/books/btex.xml
index 1e3a91087..156450023 100644
--- a/assets/mods/basegame/books/btex.xml
+++ b/assets/mods/basegame/books/btex.xml
@@ -234,6 +234,7 @@
thechapter — Chapter heading. Default: %1$s
chaptertype — Default style of the chapter tag. Default: 1
chapteronnewpage — Controls if a chapter must start on a new page. Put non-zero value to enable this behaviour. Default: 0
+ resetchapterafterpart — Controls if the chapter number should reset after a part. Put non-zero value to enable this behaviour. Default: 0
parindent — Controls the indentation size of the paragraphs. Default: 16
diff --git a/assets/mods/basegame/books/btex_ko.xml b/assets/mods/basegame/books/btex_ko.xml
index cbbd96695..5e483ed45 100644
--- a/assets/mods/basegame/books/btex_ko.xml
+++ b/assets/mods/basegame/books/btex_ko.xml
@@ -217,6 +217,7 @@
thechapter — 장 제목 번호. 기본값: %1$s
chaptertype — chapter 태그의 기본 스타일. 기본값: 1
chapteronnewpage — 새 페이지에서 장이 시작되게 하기. 활성화하려면 0이 아닌 임의의 값을 넣을 것. 기본값: 0
+ resetchapterafterpart — 부(part) 뒤에 오는 장번호가 1에서 시작되게 하기. 활성화하려면 0이 아닌 임의의 값을 넣을 것. 기본값: 0
parindent — 문단의 들여쓰기 크기를 조절함. 기본값: 16
diff --git a/src/net/torvald/btex/BTeXParser.kt b/src/net/torvald/btex/BTeXParser.kt
index dae60cf4d..97fc64e30 100644
--- a/src/net/torvald/btex/BTeXParser.kt
+++ b/src/net/torvald/btex/BTeXParser.kt
@@ -133,6 +133,7 @@ object BTeXParser {
"thechapter" to "%1\$s",
"chaptertype" to "1",
"chapteronnewpage" to "0",
+ "resetchapterafterpart" to "0",
"parindent" to "16"
)
@@ -1325,7 +1326,21 @@ object BTeXParser {
@CloseTag // reflective access is impossible with 'private'
fun closeElemCHAPTER(handler: BTeXHandler, doc: BTeXDocument, uri: String, siblingIndex: Int) {
val partOrder = cptSectMap.count { it.type.startsWith("part") }
- val cptOrder = cptSectMap.count { it.type.startsWith("chapter") } + 1
+ val cptOrder = if (macrodefs["resetchapterafterpart"] != "0") {
+ var cnt = cptSectMap.size - 1
+ var sectOrder = 0
+ while (cnt >= 0) {
+ if (cptSectMap[cnt].type.startsWith("chapter")) {
+ sectOrder += 1
+ }
+ else break
+
+ cnt -= 1
+ }
+ sectOrder + 1
+ }
+ else
+ cptSectMap.count { it.type.startsWith("chapter") } + 1
val thePar = paragraphBuffer.toString().trim()
@@ -1364,7 +1379,22 @@ object BTeXParser {
if (doc.linesPrintedOnPage.last() >= doc.pageLines - 1) doc.addNewPage(progressIndicator)
val partOrder = cptSectMap.count { it.type.startsWith("part") }
- val cptOrder = cptSectMap.count { it.type.startsWith("chapter") }
+ val cptOrder = if (macrodefs["resetchapterafterpart"] != "0") {
+ var cnt = cptSectMap.size - 1
+ var sectOrder = 0
+ while (cnt >= 0) {
+ if (cptSectMap[cnt].type.startsWith("chapter")) {
+ sectOrder += 1
+ }
+ else break
+
+ cnt -= 1
+ }
+ sectOrder + 1
+ }
+ else
+ cptSectMap.count { it.type.startsWith("chapter") } + 1
+
var sectOrder = 1
var cnt = cptSectMap.size - 1