Repository: yamatoiizuka/palt-typesetting (ts)

Issue:
Remove thin spaces between Japanese segments and brackets
日本語と全角括弧類との間に発生する四分アキを取り除く。

`LanguageClass.isJapanese()` で、
一部括弧類が日本語に判定されないことに起因しているので、 
`japaneseRegex` が括弧類を含むように修正する。

## 現状
**入力**
```
どうも（こんにちは］
```

**出力**
```
どうも<thin-space />（<thin-space />こんにちは<thin-space />］
```

## 修正後
**入力**
```
どうも（こんにちは］
```

**出力**
```
どうも<thin-space />（こんにちは］
```

Pull request:
Remove thin spaces between Japanese segments and brackets
Fix #211 

Patch:
diff --git a/src/insert-separators.ts b/src/insert-separators.ts
index d2a4d70..a2ea897 100644
--- a/src/insert-separators.ts
+++ b/src/insert-separators.ts
@@ -64,6 +64,7 @@ const addSeparatorsToSegment = (current: string, next = '', options: Typesetting
  * @return 四分アキを追加すべきかどうか
  */
 const shouldAddThinSpace = (current: string, next: string): boolean => {
+  // 片方のセグメントが空白文字、制御文字であれば四分アキを追加しない
   if (whitespaceRegex.test(current) || whitespaceRegex.test(next)) return false
 
   return LanguageClass.shouldAddThinSpace(current, next) || CharClass.shouldAddThinSpace(current, next)
diff --git a/src/util-regex.ts b/src/util-regex.ts
index 6296058..17f68e8 100644
--- a/src/util-regex.ts
+++ b/src/util-regex.ts
@@ -15,35 +15,38 @@ export const latinCommaRegex = /,/
 export const latinPeriodRegex = /\./
 
 /**
- * 日本語
- */
-export const japaneseRegex = /[\p{scx=Hiragana}\p{scx=Katakana}|ｦ-ﾟ\p{scx=Han}]+/u
-
-/**
- * 初め括弧類
+ * 全角初め括弧類
  */
 export const openingsRegex = /（|［|｛|〔|〈|《|「|『|【|〘|〖|“|‘/
 
 /**
- * 終わり括弧類
+ * 全角終わり括弧類
  */
 export const closingsRegex = /）|］|｝|〕|〉|》|」|』|】|〙|〗|”|’/
 
 /**
- * 中点類
+ * 全角中点類
  */
 export const middleDotsRegex = /・|：|；/
 
 /**
- * 読点類
+ * 全角読点類
  */
 export const commasRegex = /、|，/
 
 /**
- * 句点類
+ * 全角句点類
  */
 export const periodsRegex = /。|．/
 
+/**
+ * 日本語（各種約物を含む）
+ */
+export const japaneseRegex = new RegExp(
+  `[\\p{scx=Hiragana}\\p{scx=Katakana}|ｦ-ﾟ\\p{scx=Han}${openingsRegex.source}${closingsRegex.source}${middleDotsRegex.source}${commasRegex.source}${periodsRegex.source}]+`,
+  'u'
+)
+
 /**
  * 分離禁則文字
  */
diff --git a/src/util-text-classes.ts b/src/util-text-classes.ts
index 44fea00..f0773fd 100644
--- a/src/util-text-classes.ts
+++ b/src/util-text-classes.ts
@@ -26,6 +26,10 @@ const CharClass = {
       `(${util.closingsRegex.source}|${util.commasRegex.source}|${util.periodsRegex.source})`
     )
 
+    // 各設定は以下のプロパティを持つ:
+    // - regex: 対象の正規表現
+    // - hasSpaceBefore: 自身の前に四分アキが入るか
+    // - hasSpaceAfter: 自身の後に四分アキが入るか
     const settings = {
       spaceBefore: {
         regex: util.openingsRegex,


Test patch:
diff --git a/tests/insert-separators.test.ts b/tests/insert-separators.test.ts
index 2df740a..7483070 100644
--- a/tests/insert-separators.test.ts
+++ b/tests/insert-separators.test.ts
@@ -35,6 +35,20 @@ describe('insertSeparators', () => {
     expect(insertSeparatorsToText(currentText, nextText, options)).toEqual(expected)
   })
 
+  it('does not insert a thin space after a opening bracket', () => {
+    const currentText = '（'
+    const nextText = '注'
+    const expected = '（'
+    expect(insertSeparatorsToText(currentText, nextText, options)).toEqual(expected)
+  })
+
+  it('does not insert a thin space before a closing bracket', () => {
+    const currentText = '例'
+    const nextText = '）'
+    const expected = '例'
+    expect(insertSeparatorsToText(currentText, nextText, options)).toEqual(expected)
+  })
+
   it('does not insert a thin space before a latin comma', () => {
     const currentText = '文字'
     const nextText = ','