소스 검색

feat(search): search-pali-wbw 结果 ref 增加书缩写 (abbr_my/abbr_pts/abbr_wp)

visuddhinanda 3 일 전
부모
커밋
a091675a12

+ 16 - 4
api-v13/app/Http/Resources/SearchPaliWbwResource.php

@@ -4,6 +4,7 @@ namespace App\Http\Resources;
 
 use App\Models\PageNumber;
 use App\Models\PaliText;
+use App\Services\PaliSeriesesService;
 use Illuminate\Contracts\Support\Arrayable;
 use Illuminate\Http\Request;
 use Illuminate\Http\Resources\Json\JsonResource;
@@ -62,7 +63,9 @@ class SearchPaliWbwResource extends JsonResource
             $data['highlight'] = str_replace($keyWordsUpper, $keyReplace, $paliText->html);
         }
 
-        $pageNumbers = PageNumber::where('book', $this->book)
+        $series = app(PaliSeriesesService::class)->find((int) $this->book, (int) $this->paragraph);
+
+        $ref = PageNumber::where('book', $this->book)
             ->where('paragraph', $this->paragraph)
             ->orderBy('wid')
             ->get()
@@ -70,13 +73,22 @@ class SearchPaliWbwResource extends JsonResource
             ->map(fn ($pageNumber) => [
                 'type' => $pageNumber->type,
                 'page' => $pageNumber->page,
+                'title' => match ($pageNumber->type) {
+                    'M' => $series['abbr_my'] ?? null,
+                    'P' => $series['abbr_pts'] ?? null,
+                    default => null,
+                },
             ])
             ->values()
             ->all();
 
-        if ($pageNumbers !== []) {
-            $data['ref'] = $pageNumbers;
-        }
+        $ref[] = [
+            'type' => 'wp',
+            'page' => $this->paragraph,
+            'title' => $series['abbr_wp'] ?? null,
+        ];
+
+        $data['ref'] = $ref;
 
         return $data;
     }

+ 8 - 0
api-v13/app/Providers/AppServiceProvider.php

@@ -2,6 +2,7 @@
 
 namespace App\Providers;
 
+use App\Services\PaliSeriesesService;
 use App\Services\RomanizeService;
 use App\Tools\QueryBuilderMacro;
 use App\View\Composers\BlogViewComposer;
@@ -48,6 +49,13 @@ class AppServiceProvider extends ServiceProvider
         |--------------------------------------------------------------------------
         */
         $this->app->singleton(RomanizeService::class);
+
+        /*
+        |--------------------------------------------------------------------------
+        | Pali Serieses Service
+        |--------------------------------------------------------------------------
+        */
+        $this->app->singleton(PaliSeriesesService::class);
     }
 
     /**

+ 46 - 0
api-v13/app/Services/PaliSeriesesService.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Services;
+
+class PaliSeriesesService
+{
+    /**
+     * 书缩写表:book => [起始段落 => ['abbr_my' => ..., 'abbr_pts' => ..., 'abbr_wp' => ...]]
+     *
+     * @var array<int, array<int, array{abbr_my: string, abbr_pts: string, abbr_wp: string}>>
+     */
+    private array $serieses;
+
+    public function __construct()
+    {
+        $this->serieses = require resource_path('data/pali_serieses.php');
+    }
+
+    /**
+     * 根据书号与段落号查找该段所属文本的书缩写。
+     *
+     * 缩写表以“段落起始号”为键,同一书内多个文本按起始段落递增排列;
+     * 这里取不大于目标段落的最大起始号对应条目。
+     *
+     * @return array{abbr_my: string, abbr_pts: string, abbr_wp: string}|null
+     */
+    public function find(int $book, int $paragraph): ?array
+    {
+        $entries = $this->serieses[$book] ?? null;
+
+        if (! is_array($entries)) {
+            return null;
+        }
+
+        $result = null;
+        foreach ($entries as $start => $abbr) {
+            if ($start > $paragraph) {
+                break;
+            }
+
+            $result = $abbr;
+        }
+
+        return $result;
+    }
+}

+ 1843 - 0
api-v13/resources/data/pali_serieses.php

@@ -0,0 +1,1843 @@
+<?php
+
+return [
+    1 => [
+        2 => [
+            'abbr_my' => 'namakkāra',
+            'abbr_pts' => 'Nam',
+            'abbr_wp' => 'namakkāra.',
+        ],
+        159 => [
+            'abbr_my' => 'namakkāra-ṭī',
+            'abbr_pts' => 'NamT',
+            'abbr_wp' => 'namakkāra.ṭī.',
+        ],
+    ],
+    2 => [
+        2 => [
+            'abbr_my' => 'mahāpaṇāmapāṭha',
+            'abbr_pts' => 'Mpp',
+            'abbr_wp' => 'mahāpaṇāma.',
+        ],
+        428 => [
+            'abbr_my' => 'tigumbacetiya thomanā',
+            'abbr_pts' => 'Tgc',
+            'abbr_wp' => 'tigumba.',
+        ],
+        479 => [
+            'abbr_my' => 'vāsamālinīkya',
+            'abbr_pts' => 'Vāsam',
+            'abbr_wp' => 'vāsamālinī.',
+        ],
+    ],
+    3 => [
+        2 => [
+            'abbr_my' => 'lakkhaṇāto',
+            'abbr_pts' => 'Lakkh',
+            'abbr_wp' => 'lakkhaṇā.',
+        ],
+    ],
+    4 => [
+        2 => [
+            'abbr_my' => 'suttavandanā',
+            'abbr_pts' => 'Sutv',
+            'abbr_wp' => 'suttavandanā.',
+        ],
+    ],
+    5 => [
+        2 => [
+            'abbr_my' => 'jinālaṅkāra',
+            'abbr_pts' => 'Jināl',
+            'abbr_wp' => 'jinālaṅkāra.',
+        ],
+    ],
+    6 => [
+        2 => [
+            'abbr_my' => 'kamalāñjali',
+            'abbr_pts' => 'Kamal',
+            'abbr_wp' => 'kamalāñjali.',
+        ],
+    ],
+    7 => [
+        2 => [
+            'abbr_my' => 'pajjamadhu',
+            'abbr_pts' => 'Pjm',
+            'abbr_wp' => 'pajjamadhu.',
+        ],
+    ],
+    8 => [
+        2 => [
+            'abbr_my' => 'buddhaguṇagāthāvalī',
+            'abbr_pts' => 'Bgg',
+            'abbr_wp' => 'buddhaguṇagāthāvalī.',
+        ],
+    ],
+    9 => [
+        2 => [
+            'abbr_my' => 'abhidhānappadīpikā-ṭī',
+            'abbr_pts' => 'AbhpT',
+            'abbr_wp' => 'abhidhāna.ṭī.',
+        ],
+    ],
+    10 => [
+        2 => [
+            'abbr_my' => 'subodhālaṅkāro',
+            'abbr_pts' => 'Subodh',
+            'abbr_wp' => 'subodhālaṅkāra.',
+        ],
+    ],
+    11 => [
+        2 => [
+            'abbr_my' => 'subodhālaṅkāra-ṭī',
+            'abbr_pts' => 'SubodhT',
+            'abbr_wp' => 'subodhālaṅkāra.ṭī.',
+        ],
+    ],
+    12 => [
+        2 => [
+            'abbr_my' => 'bālāvatāra',
+            'abbr_pts' => 'Bālāv',
+            'abbr_wp' => 'bālāvatāra.',
+        ],
+    ],
+    13 => [
+        2 => [
+            'abbr_my' => 'moggallānasuttapāṭho',
+            'abbr_pts' => 'Mogg',
+            'abbr_wp' => 'moggallāna.sutta.',
+        ],
+        1105 => [
+            'abbr_my' => 'moggallānabyākaraṇaṃ',
+            'abbr_pts' => 'Mogg',
+            'abbr_wp' => 'moggallāna.byākaraṇa.',
+        ],
+    ],
+    14 => [
+        2 => [
+            'abbr_my' => 'kaccāyanabyākaraṇaṃ',
+            'abbr_pts' => 'Kacc',
+            'abbr_wp' => 'kaccāyana.byākaraṇa.',
+        ],
+        715 => [
+            'abbr_my' => 'mahākaccāyanasaddāpāṭha',
+            'abbr_pts' => 'Kacc',
+            'abbr_wp' => 'mahākaccāyana.sadda.',
+        ],
+    ],
+    15 => [
+        2 => [
+            'abbr_my' => 'saddanītippakaraṇaṃ (padamālā)',
+            'abbr_pts' => 'Sadd',
+            'abbr_wp' => 'saddanīti.pada.',
+        ],
+    ],
+    16 => [
+        2 => [
+            'abbr_my' => 'saddanītippakaraṇaṃ (dhātumālā)',
+            'abbr_pts' => 'Sadd',
+            'abbr_wp' => 'saddanīti.dhātu.',
+        ],
+    ],
+    17 => [
+        2 => [
+            'abbr_my' => 'padarūpasiddhi',
+            'abbr_pts' => 'Rūp',
+            'abbr_wp' => 'padarūpasiddhi.',
+        ],
+    ],
+    18 => [
+        2 => [
+            'abbr_my' => 'moggallāna-pañcikā-ṭī',
+            'abbr_pts' => 'MoggPT',
+            'abbr_wp' => 'moggallāna.pañcikā.ṭī.',
+        ],
+    ],
+    19 => [
+        2 => [
+            'abbr_my' => 'payogasiddhi',
+            'abbr_pts' => 'Payog',
+            'abbr_wp' => 'payogasiddhi.',
+        ],
+    ],
+    20 => [
+        2 => [
+            'abbr_my' => 'vuttodayaṃ',
+            'abbr_pts' => 'Vutt',
+            'abbr_wp' => 'vuttodaya.',
+        ],
+    ],
+    21 => [
+        2 => [
+            'abbr_my' => 'abhidhānappadīpikā',
+            'abbr_pts' => 'Abhp',
+            'abbr_wp' => 'abhidhāna.',
+        ],
+    ],
+    22 => [
+        2 => [
+            'abbr_my' => 'niruttidīpanīpāṭha',
+            'abbr_pts' => 'Nirutt',
+            'abbr_wp' => 'niruttidīpanī.',
+        ],
+    ],
+    23 => [
+        2 => [
+            'abbr_my' => 'paramatthadīpanī',
+            'abbr_pts' => 'Pmd',
+            'abbr_wp' => 'paramatthadīpanī.',
+        ],
+    ],
+    24 => [
+        2 => [
+            'abbr_my' => 'anudīpanīpāṭha',
+            'abbr_pts' => 'Anudīp',
+            'abbr_wp' => 'anudīpanī.',
+        ],
+    ],
+    25 => [
+        2 => [
+            'abbr_my' => 'paṭṭhānuddesa dīpanīpāṭha',
+            'abbr_pts' => 'Paṭṭhud',
+            'abbr_wp' => 'paṭṭhānuddesadīpanī.',
+        ],
+    ],
+    26 => [
+        2 => [
+            'abbr_my' => 'caturārakkhadīpanī',
+            'abbr_pts' => 'Catur',
+            'abbr_wp' => 'caturārakkhadīpanī.',
+        ],
+    ],
+    27 => [
+        2 => [
+            'abbr_my' => 'kavidappaṇanīti',
+            'abbr_pts' => 'Kavid',
+            'abbr_wp' => 'kavidappaṇanīti.',
+        ],
+    ],
+    28 => [
+        2 => [
+            'abbr_my' => 'nītimañjarī',
+            'abbr_pts' => 'Nītim',
+            'abbr_wp' => 'nītimañjarī.',
+        ],
+    ],
+    29 => [
+        2 => [
+            'abbr_my' => 'dhammanīti',
+            'abbr_pts' => 'Dhn',
+            'abbr_wp' => 'dhammanīti.',
+        ],
+    ],
+    30 => [
+        2 => [
+            'abbr_my' => 'mahārahanīti',
+            'abbr_pts' => 'Mhn',
+            'abbr_wp' => 'mahārahanīti.',
+        ],
+    ],
+    31 => [
+        2 => [
+            'abbr_my' => 'lokanīti',
+            'abbr_pts' => 'Ln',
+            'abbr_wp' => 'lokanīti.',
+        ],
+    ],
+    32 => [
+        2 => [
+            'abbr_my' => 'suttantanīti',
+            'abbr_pts' => 'Sutn',
+            'abbr_wp' => 'suttantanīti.',
+        ],
+        134 => [
+            'abbr_my' => 'vasalasutta',
+            'abbr_pts' => 'Sutn',
+            'abbr_wp' => 'vasalasutta.',
+        ],
+    ],
+    33 => [
+        2 => [
+            'abbr_my' => 'sūrassatīnīti 1',
+            'abbr_pts' => 'Sūrn',
+            'abbr_wp' => 'sūrassatīnīti.',
+        ],
+    ],
+    34 => [
+        2 => [
+            'abbr_my' => 'cāṇakyanīti',
+            'abbr_pts' => 'Cāṇ',
+            'abbr_wp' => 'cāṇakyanīti.',
+        ],
+    ],
+    35 => [
+        2 => [
+            'abbr_my' => 'naradakkhadīpanī',
+            'abbr_pts' => 'Narad',
+            'abbr_wp' => 'naradakkhadīpanī.',
+        ],
+    ],
+    36 => [
+        2 => [
+            'abbr_my' => 'rasavāhinī',
+            'abbr_pts' => 'Ras',
+            'abbr_wp' => 'rasavāhinī.',
+        ],
+    ],
+    37 => [
+        2 => [
+            'abbr_my' => 'sīmavisodhanī',
+            'abbr_pts' => 'Sīmav',
+            'abbr_wp' => 'sīmavisodhanī.',
+        ],
+    ],
+    38 => [
+        2 => [
+            'abbr_my' => 'vessantarāgīti',
+            'abbr_pts' => 'Vessag',
+            'abbr_wp' => 'vessantarāgīti.',
+        ],
+    ],
+    39 => [
+        3 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) dīghanikāye',
+            'abbr_pts' => 'SgyDn',
+            'abbr_wp' => 'saṅgāyana.dī.',
+        ],
+    ],
+    40 => [
+        3 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) majjhimanikāya 1',
+            'abbr_pts' => 'SgyMn',
+            'abbr_wp' => 'saṅgāyana.ma.',
+        ],
+    ],
+    41 => [
+        3 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) saṃyuttanikāye 1',
+            'abbr_pts' => 'SgySn',
+            'abbr_wp' => 'saṅgāyana.saṃ.',
+        ],
+    ],
+    42 => [
+        3 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) aṅguttaranikāye 1',
+            'abbr_pts' => 'SgyAn',
+            'abbr_wp' => 'saṅgāyana.a.',
+        ],
+    ],
+    43 => [
+        2 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) vinayapiṭaka 1',
+            'abbr_pts' => 'SgyVin',
+            'abbr_wp' => 'saṅgāyana.vinaya.',
+        ],
+    ],
+    44 => [
+        2 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) abhidhammapiṭaka',
+            'abbr_pts' => 'SgyAbh',
+            'abbr_wp' => 'saṅgāyana.abhidhamma.',
+        ],
+    ],
+    45 => [
+        2 => [
+            'abbr_my' => '(saṅgayana-puccha vissajjanā) aṭṭhakathā 1',
+            'abbr_pts' => 'SgyAṭṭh',
+            'abbr_wp' => 'saṅgāyana.aṭṭhakathā.',
+        ],
+    ],
+    46 => [
+        1 => [
+            'abbr_my' => 'milida-ṭī',
+            'abbr_pts' => 'MilT',
+            'abbr_wp' => 'milinda.ṭī.',
+        ],
+    ],
+    47 => [
+        1 => [
+            'abbr_my' => 'padamañjarī',
+            'abbr_pts' => 'Padam',
+            'abbr_wp' => 'padamañjarī.',
+        ],
+    ],
+    48 => [
+        1 => [
+            'abbr_my' => 'padasādhanaṃ',
+            'abbr_pts' => 'Padas',
+            'abbr_wp' => 'padasādhana.',
+        ],
+    ],
+    49 => [
+        1 => [
+            'abbr_my' => 'saddabindu pakaraṇaṃ',
+            'abbr_pts' => 'Saddb',
+            'abbr_wp' => 'saddabindu.',
+        ],
+    ],
+    50 => [
+        1 => [
+            'abbr_my' => 'kaccāyana dhātu mañjūsā',
+            'abbr_pts' => 'Dhātum',
+            'abbr_wp' => 'kaccāyana.dhātumañjūsā.',
+        ],
+    ],
+    51 => [
+        1 => [
+            'abbr_my' => 'samantakūṭavaṇṇanā',
+            'abbr_pts' => 'Samantak',
+            'abbr_wp' => 'samantakūṭavaṇṇanā.',
+        ],
+    ],
+    52 => [
+        1 => [
+            'abbr_my' => 'moggallāna vuttivivaraṇapañcikā',
+            'abbr_pts' => 'MoggP',
+            'abbr_wp' => 'moggallāna.vuttivivaraṇapañcikā.',
+        ],
+    ],
+    53 => [
+        1 => [
+            'abbr_my' => 'thupavaṃsa',
+            'abbr_pts' => 'Thūp',
+            'abbr_wp' => 'thupavaṃsa.',
+        ],
+    ],
+    54 => [
+        1 => [
+            'abbr_my' => 'dāṭhāvaṃsa',
+            'abbr_pts' => 'Dāṭh',
+            'abbr_wp' => 'dāṭhāvaṃsa.',
+        ],
+    ],
+    55 => [
+        1 => [
+            'abbr_my' => 'dhātupāṭha vilāsiniyā',
+            'abbr_pts' => 'Dhātup',
+            'abbr_wp' => 'dhātupāṭha.vilāsinī.',
+        ],
+    ],
+    56 => [
+        1 => [
+            'abbr_my' => 'dhātuvaṃsa',
+            'abbr_pts' => 'Dhātuv',
+            'abbr_wp' => 'dhātuvaṃsa.',
+        ],
+    ],
+    57 => [
+        1 => [
+            'abbr_my' => 'hatthavanagallavihāra vaṃso',
+            'abbr_pts' => 'Hatth',
+            'abbr_wp' => 'hatthavanagallavihāravaṃsa.',
+        ],
+    ],
+    58 => [
+        1 => [
+            'abbr_my' => 'jinacaritaya',
+            'abbr_pts' => 'Jinac',
+            'abbr_wp' => 'jinacarita.',
+        ],
+    ],
+    59 => [
+        1 => [
+            'abbr_my' => 'jinavaṃsadīpaṃ',
+            'abbr_pts' => 'Jinav',
+            'abbr_wp' => 'jinavaṃsadīpa.',
+        ],
+    ],
+    60 => [
+        1 => [
+            'abbr_my' => 'telakaṭāhagāthā',
+            'abbr_pts' => 'Tel',
+            'abbr_wp' => 'telakaṭāhagāthā.',
+        ],
+    ],
+    61 => [
+        2 => [
+            'abbr_my' => 'cūḷaganthavaṃsa',
+            'abbr_pts' => 'Cgv',
+            'abbr_wp' => 'cūḷaganthavaṃsa.',
+        ],
+    ],
+    62 => [
+        2 => [
+            'abbr_my' => 'sāsanavaṃsappadīpikā',
+            'abbr_pts' => 'Sāsp',
+            'abbr_wp' => 'sāsanavaṃsappadīpikā.',
+        ],
+    ],
+    63 => [
+        2 => [
+            'abbr_my' => 'mahāvaṃsa',
+            'abbr_pts' => 'Mhv',
+            'abbr_wp' => 'mahāvaṃsa.',
+        ],
+    ],
+    64 => [
+        2 => [
+            'abbr_my' => 'visuddhi 1',
+            'abbr_pts' => 'Vism',
+            'abbr_wp' => 'visuddhi.1.',
+        ],
+    ],
+    65 => [
+        2 => [
+            'abbr_my' => 'visuddhi 2',
+            'abbr_pts' => 'Vism',
+            'abbr_wp' => 'visuddhi.2.',
+        ],
+    ],
+    66 => [
+        2 => [
+            'abbr_my' => 'mahāṭī 1',
+            'abbr_pts' => 'VismT',
+            'abbr_wp' => 'visuddhi.mahāṭī.1.',
+        ],
+    ],
+    67 => [
+        2 => [
+            'abbr_my' => 'mahāṭī 2',
+            'abbr_pts' => 'VismT',
+            'abbr_wp' => 'visuddhi.mahāṭī.2.',
+        ],
+    ],
+    68 => [
+        2 => [
+            'abbr_my' => 'visuddhimagga nidānakathā',
+            'abbr_pts' => 'VismNid',
+            'abbr_wp' => 'visuddhi.nidāna.',
+        ],
+    ],
+    69 => [
+        3 => [
+            'abbr_my' => 'paṭṭhāna 2',
+            'abbr_pts' => 'Paṭṭh',
+            'abbr_wp' => 'paṭṭhāna.2.',
+        ],
+    ],
+    70 => [
+        3 => [
+            'abbr_my' => 'paṭṭhāna 3',
+            'abbr_pts' => 'Paṭṭh',
+            'abbr_wp' => 'paṭṭhāna.3.',
+        ],
+    ],
+    71 => [
+        3 => [
+            'abbr_my' => 'paṭṭhāna 4',
+            'abbr_pts' => 'Paṭṭh',
+            'abbr_wp' => 'paṭṭhāna.4.',
+        ],
+    ],
+    72 => [
+        3 => [
+            'abbr_my' => 'paṭṭhāna 5',
+            'abbr_pts' => 'Paṭṭh',
+            'abbr_wp' => 'paṭṭhāna.5.',
+        ],
+    ],
+    73 => [
+        3 => [
+            'abbr_my' => 'abhi 1',
+            'abbr_pts' => 'Dhs',
+            'abbr_wp' => 'dha.sa.',
+        ],
+    ],
+    74 => [
+        3 => [
+            'abbr_my' => 'abhi 2',
+            'abbr_pts' => 'Vibh',
+            'abbr_wp' => 'vibha.',
+        ],
+    ],
+    75 => [
+        3 => [
+            'abbr_my' => 'abhi 3',
+            'abbr_pts' => 'Dhātuk',
+            'abbr_wp' => 'dhātu.kathā.',
+        ],
+    ],
+    76 => [
+        3 => [
+            'abbr_my' => 'abhi 4',
+            'abbr_pts' => 'Pugg',
+            'abbr_wp' => 'puggala.paññatti.',
+        ],
+    ],
+    77 => [
+        3 => [
+            'abbr_my' => 'abhi 5',
+            'abbr_pts' => 'Kv',
+            'abbr_wp' => 'kathā.vatthu.',
+        ],
+    ],
+    78 => [
+        3 => [
+            'abbr_my' => 'abhi 6',
+            'abbr_pts' => 'Yam',
+            'abbr_wp' => 'yama.1.',
+        ],
+    ],
+    79 => [
+        3 => [
+            'abbr_my' => 'abhi 7',
+            'abbr_pts' => 'Yam',
+            'abbr_wp' => 'yama.2.',
+        ],
+    ],
+    80 => [
+        3 => [
+            'abbr_my' => 'abhi 8',
+            'abbr_pts' => 'Yam',
+            'abbr_wp' => 'yama.3.',
+        ],
+    ],
+    81 => [
+        3 => [
+            'abbr_my' => 'paṭṭhāna 1',
+            'abbr_pts' => 'Paṭṭh',
+            'abbr_wp' => 'paṭṭhāna.1.',
+        ],
+    ],
+    82 => [
+        3 => [
+            'abbr_my' => 'aṃ 3',
+            'abbr_pts' => 'An V',
+            'abbr_wp' => 'a.ni.10.',
+        ],
+    ],
+    83 => [
+        3 => [
+            'abbr_my' => 'aṃ 3',
+            'abbr_pts' => 'An V',
+            'abbr_wp' => 'a.ni.11.',
+        ],
+    ],
+    84 => [
+        3 => [
+            'abbr_my' => 'aṃ 1',
+            'abbr_pts' => 'An I',
+            'abbr_wp' => 'a.ni.1.',
+        ],
+    ],
+    85 => [
+        3 => [
+            'abbr_my' => 'aṃ 1',
+            'abbr_pts' => 'An I',
+            'abbr_wp' => 'a.ni.2.',
+        ],
+    ],
+    86 => [
+        3 => [
+            'abbr_my' => 'aṃ 1',
+            'abbr_pts' => 'An I',
+            'abbr_wp' => 'a.ni.3.',
+        ],
+    ],
+    87 => [
+        3 => [
+            'abbr_my' => 'aṃ 1',
+            'abbr_pts' => 'An II',
+            'abbr_wp' => 'a.ni.4.',
+        ],
+    ],
+    88 => [
+        3 => [
+            'abbr_my' => 'aṃ 2',
+            'abbr_pts' => 'An III',
+            'abbr_wp' => 'a.ni.5.',
+        ],
+    ],
+    89 => [
+        3 => [
+            'abbr_my' => 'aṃ 2',
+            'abbr_pts' => 'An III',
+            'abbr_wp' => 'a.ni.6.',
+        ],
+    ],
+    90 => [
+        3 => [
+            'abbr_my' => 'aṃ 2',
+            'abbr_pts' => 'An IV',
+            'abbr_wp' => 'a.ni.7.',
+        ],
+    ],
+    91 => [
+        3 => [
+            'abbr_my' => 'aṃ 3',
+            'abbr_pts' => 'An IV',
+            'abbr_wp' => 'a.ni.8.',
+        ],
+    ],
+    92 => [
+        3 => [
+            'abbr_my' => 'aṃ 3',
+            'abbr_pts' => 'An IV',
+            'abbr_wp' => 'a.ni.9.',
+        ],
+    ],
+    93 => [
+        3 => [
+            'abbr_my' => 'dī 1',
+            'abbr_pts' => 'Dn I',
+            'abbr_wp' => 'dī.ni.1.',
+        ],
+    ],
+    94 => [
+        3 => [
+            'abbr_my' => 'dī 2',
+            'abbr_pts' => 'Dn II',
+            'abbr_wp' => 'dī.ni.2.',
+        ],
+    ],
+    95 => [
+        3 => [
+            'abbr_my' => 'dī 3',
+            'abbr_pts' => 'Dn III',
+            'abbr_wp' => 'dī.ni.3.',
+        ],
+    ],
+    96 => [
+        4 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'DhsA',
+            'abbr_wp' => 'dha.sa.aṭṭha.',
+        ],
+    ],
+    97 => [
+        4 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'VibhA',
+            'abbr_wp' => 'vibha.aṭṭha.',
+        ],
+    ],
+    98 => [
+        4 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'DhātukA',
+            'abbr_wp' => 'dhātu.kathā.aṭṭha.',
+        ],
+        173 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'PuggA',
+            'abbr_wp' => 'puggala.paññatti.aṭṭha.',
+        ],
+        474 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'KvA',
+            'abbr_wp' => 'kathā.vatthu.aṭṭha.',
+        ],
+        1623 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'YamA',
+            'abbr_wp' => 'yama.aṭṭha.',
+        ],
+        1880 => [
+            'abbr_my' => 'abhi-ṭṭha',
+            'abbr_pts' => 'PaṭṭhA',
+            'abbr_wp' => 'paṭṭhāna.aṭṭha.',
+        ],
+    ],
+    99 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭṭha 1',
+            'abbr_pts' => 'AnA I',
+            'abbr_wp' => 'a.ni.aṭṭha.1.',
+        ],
+    ],
+    100 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭṭha 2',
+            'abbr_pts' => 'AnA II',
+            'abbr_wp' => 'a.ni.aṭṭha.2.',
+        ],
+        325 => [
+            'abbr_my' => 'aṃ-ṭṭha 2',
+            'abbr_pts' => 'AnA II',
+            'abbr_wp' => 'a.ni.aṭṭha.3.',
+        ],
+        997 => [
+            'abbr_my' => 'aṃ-ṭṭha 2',
+            'abbr_pts' => 'AnA III',
+            'abbr_wp' => 'a.ni.aṭṭha.4.',
+        ],
+    ],
+    101 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA III',
+            'abbr_wp' => 'a.ni.aṭṭha.5.',
+        ],
+        503 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA III',
+            'abbr_wp' => 'a.ni.aṭṭha.6.',
+        ],
+        792 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA IV',
+            'abbr_wp' => 'a.ni.aṭṭha.7.',
+        ],
+    ],
+    102 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA IV',
+            'abbr_wp' => 'a.ni.aṭṭha.8.',
+        ],
+        275 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA IV',
+            'abbr_wp' => 'a.ni.aṭṭha.9.',
+        ],
+        409 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA V',
+            'abbr_wp' => 'a.ni.aṭṭha.10.',
+        ],
+        706 => [
+            'abbr_my' => 'aṃ-ṭṭha 3',
+            'abbr_pts' => 'AnA V',
+            'abbr_wp' => 'a.ni.aṭṭha.11.',
+        ],
+    ],
+    103 => [
+        3 => [
+            'abbr_my' => 'dī-ṭṭha 1',
+            'abbr_pts' => 'DnA I',
+            'abbr_wp' => 'dī.ni.aṭṭha.1.',
+        ],
+    ],
+    104 => [
+        3 => [
+            'abbr_my' => 'dī-ṭṭha 2',
+            'abbr_pts' => 'DnA II',
+            'abbr_wp' => 'dī.ni.aṭṭha.2.',
+        ],
+    ],
+    105 => [
+        3 => [
+            'abbr_my' => 'dī-ṭṭha 3',
+            'abbr_pts' => 'DnA III',
+            'abbr_wp' => 'dī.ni.aṭṭha.3.',
+        ],
+    ],
+    106 => [
+        3 => [
+            'abbr_my' => 'therīgāthā-ṭṭha',
+            'abbr_pts' => 'ThīA',
+            'abbr_wp' => 'therī.aṭṭha.',
+        ],
+    ],
+    107 => [
+        3 => [
+            'abbr_my' => 'apadāna-ṭṭha 1',
+            'abbr_pts' => 'ApA',
+            'abbr_wp' => 'apa.aṭṭha.',
+        ],
+    ],
+    108 => [
+        3 => [
+            'abbr_my' => 'buddhavaṃsa-ṭṭha',
+            'abbr_pts' => 'BvA',
+            'abbr_wp' => 'buddhavaṃ.aṭṭha.',
+        ],
+    ],
+    109 => [
+        3 => [
+            'abbr_my' => 'cariyāpiṭaka-ṭṭha',
+            'abbr_pts' => 'CpA',
+            'abbr_wp' => 'cariyā.aṭṭha.',
+        ],
+    ],
+    110 => [
+        4 => [
+            'abbr_my' => 'jātaka-ṭṭha 1',
+            'abbr_pts' => 'JaA I',
+            'abbr_wp' => 'jā.aṭṭha.1.',
+        ],
+    ],
+    111 => [
+        3 => [
+            'abbr_my' => 'jātaka-ṭṭha 2',
+            'abbr_pts' => 'JaA II',
+            'abbr_wp' => 'jā.aṭṭha.2.',
+        ],
+    ],
+    112 => [
+        4 => [
+            'abbr_my' => 'jātaka-ṭṭha 3',
+            'abbr_pts' => 'JaA III',
+            'abbr_wp' => 'jā.aṭṭha.3.',
+        ],
+    ],
+    113 => [
+        4 => [
+            'abbr_my' => 'jātaka-ṭṭha 4',
+            'abbr_pts' => 'JaA IV',
+            'abbr_wp' => 'jā.aṭṭha.4.',
+        ],
+        5312 => [
+            'abbr_my' => 'jātaka-ṭṭha 5',
+            'abbr_pts' => 'JaA V',
+            'abbr_wp' => 'jā.aṭṭha.5.',
+        ],
+    ],
+    114 => [
+        1 => [
+            'abbr_my' => 'jātaka-ṭṭha 5',
+            'abbr_pts' => 'JaA V',
+            'abbr_wp' => 'jā.aṭṭha.6.',
+        ],
+    ],
+    115 => [
+        3 => [
+            'abbr_my' => 'jātaka-ṭṭha 6',
+            'abbr_pts' => 'JaA VI',
+            'abbr_wp' => 'jā.aṭṭha.7.',
+        ],
+    ],
+    116 => [
+        3 => [
+            'abbr_my' => 'khuddakapāṭha-ṭṭha',
+            'abbr_pts' => 'KhpA',
+            'abbr_wp' => 'khuddaka.aṭṭha.',
+        ],
+    ],
+    117 => [
+        3 => [
+            'abbr_my' => 'jātaka-ṭṭha 7',
+            'abbr_pts' => 'JaA VI',
+            'abbr_wp' => 'jā.aṭṭha.8.',
+        ],
+    ],
+    118 => [
+        3 => [
+            'abbr_my' => 'mahāni-ṭṭha',
+            'abbr_pts' => 'MndA I',
+            'abbr_wp' => 'mahāni.aṭṭha.',
+        ],
+    ],
+    119 => [
+        3 => [
+            'abbr_my' => 'cūḷani-ṭṭha',
+            'abbr_pts' => 'CndA',
+            'abbr_wp' => 'cūḷani.aṭṭha.',
+        ],
+    ],
+    120 => [
+        3 => [
+            'abbr_my' => 'paṭisaṃ-ṭṭha 1',
+            'abbr_pts' => 'PaṭisA I',
+            'abbr_wp' => 'paṭi.ma.aṭṭha.',
+        ],
+    ],
+    121 => [
+        3 => [
+            'abbr_my' => 'netti-ṭṭha',
+            'abbr_pts' => 'NettA',
+            'abbr_wp' => 'netti.aṭṭha.',
+        ],
+    ],
+    122 => [
+        3 => [
+            'abbr_my' => 'dhammapada-ṭṭha 1',
+            'abbr_pts' => 'DhpA I',
+            'abbr_wp' => 'dhamma.aṭṭha.',
+        ],
+    ],
+    123 => [
+        3 => [
+            'abbr_my' => 'udāna-ṭṭha',
+            'abbr_pts' => 'UdA',
+            'abbr_wp' => 'udāna.aṭṭha.',
+        ],
+    ],
+    124 => [
+        3 => [
+            'abbr_my' => 'itivuttaka-ṭṭha',
+            'abbr_pts' => 'ItA I',
+            'abbr_wp' => 'itivutta.aṭṭha.',
+        ],
+    ],
+    125 => [
+        3 => [
+            'abbr_my' => 'suttanipāta-ṭṭha 1',
+            'abbr_pts' => 'SnpA I',
+            'abbr_wp' => 'suttani.aṭṭha.',
+        ],
+    ],
+    126 => [
+        3 => [
+            'abbr_my' => 'vimānavatthu-ṭṭha',
+            'abbr_pts' => 'VvA',
+            'abbr_wp' => 'vimāna.aṭṭha.',
+        ],
+    ],
+    127 => [
+        3 => [
+            'abbr_my' => 'petavatthu-ṭṭha',
+            'abbr_pts' => 'PvA',
+            'abbr_wp' => 'peta.aṭṭha.',
+        ],
+    ],
+    128 => [
+        3 => [
+            'abbr_my' => 'theragāthā-ṭṭha 1',
+            'abbr_pts' => 'ThA I',
+            'abbr_wp' => 'thera.aṭṭha.1.',
+        ],
+    ],
+    129 => [
+        3 => [
+            'abbr_my' => 'theragāthā-ṭṭha 2',
+            'abbr_pts' => 'ThA II',
+            'abbr_wp' => 'thera.aṭṭha.2.',
+        ],
+    ],
+    130 => [
+        3 => [
+            'abbr_my' => 'ma-ṭṭha 1',
+            'abbr_pts' => 'MnA I',
+            'abbr_wp' => 'ma.ni.aṭṭha.1.',
+        ],
+    ],
+    131 => [
+        3 => [
+            'abbr_my' => 'ma-ṭṭha 3',
+            'abbr_pts' => 'MnA III',
+            'abbr_wp' => 'ma.ni.aṭṭha.2.',
+        ],
+    ],
+    132 => [
+        3 => [
+            'abbr_my' => 'ma-ṭṭha 4',
+            'abbr_pts' => 'MnA IV',
+            'abbr_wp' => 'ma.ni.aṭṭha.3.',
+        ],
+    ],
+    133 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭṭha 1',
+            'abbr_pts' => 'SnA I',
+            'abbr_wp' => 'saṃ.ni.aṭṭha.1.',
+        ],
+    ],
+    134 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭṭha 2',
+            'abbr_pts' => 'SnA II',
+            'abbr_wp' => 'saṃ.ni.aṭṭha.2.',
+        ],
+    ],
+    135 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭṭha 2',
+            'abbr_pts' => 'SnA II',
+            'abbr_wp' => 'saṃ.ni.aṭṭha.3.',
+        ],
+    ],
+    136 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭṭha 3',
+            'abbr_pts' => 'SnA II',
+            'abbr_wp' => 'saṃ.ni.aṭṭha.4.',
+        ],
+    ],
+    137 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭṭha 3',
+            'abbr_pts' => 'SnA III',
+            'abbr_wp' => 'saṃ.ni.aṭṭha.5.',
+        ],
+    ],
+    138 => [
+        3 => [
+            'abbr_my' => 'vi-ṭṭha 1',
+            'abbr_pts' => 'VinA I',
+            'abbr_wp' => 'pārā.aṭṭha.',
+        ],
+    ],
+    139 => [
+        3 => [
+            'abbr_my' => 'vi-ṭṭha',
+            'abbr_pts' => 'VinA IV',
+            'abbr_wp' => 'pāci.aṭṭha.',
+        ],
+        925 => [
+            'abbr_my' => 'vi-ṭṭha',
+            'abbr_pts' => 'VinA IV',
+            'abbr_wp' => 'pāci.aṭṭha.bhikkhunī.',
+        ],
+    ],
+    140 => [
+        3 => [
+            'abbr_my' => 'vi-ṭṭha',
+            'abbr_pts' => 'VinA V',
+            'abbr_wp' => 'mahāva.aṭṭha.',
+        ],
+    ],
+    141 => [
+        3 => [
+            'abbr_my' => 'vi-ṭṭha',
+            'abbr_pts' => 'VinA VI',
+            'abbr_wp' => 'cūḷava.aṭṭha.',
+        ],
+    ],
+    142 => [
+        3 => [
+            'abbr_my' => 'vi-ṭṭha',
+            'abbr_pts' => 'VinA VII',
+            'abbr_wp' => 'pari.aṭṭha.',
+        ],
+    ],
+    143 => [
+        3 => [
+            'abbr_my' => 'apadān 1',
+            'abbr_pts' => 'Ap I',
+            'abbr_wp' => 'apa.1.',
+        ],
+    ],
+    144 => [
+        3 => [
+            'abbr_my' => 'apadān 2',
+            'abbr_pts' => 'Ap II',
+            'abbr_wp' => 'apa.2.',
+        ],
+        6534 => [
+            'abbr_my' => 'apadān 2',
+            'abbr_pts' => 'Ap II',
+            'abbr_wp' => 'therī.apa.',
+        ],
+    ],
+    145 => [
+        3 => [
+            'abbr_my' => 'buddhavaṃsa 2',
+            'abbr_pts' => 'Bv',
+            'abbr_wp' => 'buddhavaṃ.',
+        ],
+    ],
+    146 => [
+        3 => [
+            'abbr_my' => 'cariyāpiṭaka 2',
+            'abbr_pts' => 'Cp',
+            'abbr_wp' => 'cariyā.',
+        ],
+    ],
+    147 => [
+        3 => [
+            'abbr_my' => 'jātaka 2',
+            'abbr_pts' => 'Ja',
+            'abbr_wp' => 'jā.2.',
+        ],
+    ],
+    148 => [
+        3 => [
+            'abbr_my' => 'jātaka 1',
+            'abbr_pts' => 'Ja',
+            'abbr_wp' => 'jā.1.',
+        ],
+    ],
+    149 => [
+        3 => [
+            'abbr_my' => 'mahāni',
+            'abbr_pts' => 'Mnd I',
+            'abbr_wp' => 'mahāni.',
+        ],
+    ],
+    150 => [
+        3 => [
+            'abbr_my' => 'cūḷani',
+            'abbr_pts' => 'Cnd',
+            'abbr_wp' => 'cūḷani.',
+        ],
+    ],
+    151 => [
+        3 => [
+            'abbr_my' => 'paṭisaṃ',
+            'abbr_pts' => 'Paṭis I',
+            'abbr_wp' => 'paṭi.ma.',
+        ],
+    ],
+    152 => [
+        3 => [
+            'abbr_my' => 'milinda',
+            'abbr_pts' => 'Mil',
+            'abbr_wp' => 'milinda.',
+        ],
+    ],
+    153 => [
+        3 => [
+            'abbr_my' => 'nettippakaraṇa',
+            'abbr_pts' => 'Nett',
+            'abbr_wp' => 'netti.',
+        ],
+    ],
+    154 => [
+        3 => [
+            'abbr_my' => 'khuddakapāṭha',
+            'abbr_pts' => 'Khp',
+            'abbr_wp' => 'khuddaka.',
+        ],
+    ],
+    155 => [
+        3 => [
+            'abbr_my' => 'peṭakopadesa',
+            'abbr_pts' => 'Peṭ',
+            'abbr_wp' => 'peṭako.',
+        ],
+    ],
+    156 => [
+        3 => [
+            'abbr_my' => 'dhammapada',
+            'abbr_pts' => 'Dhp',
+            'abbr_wp' => 'dhamma.',
+        ],
+    ],
+    157 => [
+        3 => [
+            'abbr_my' => 'udāna',
+            'abbr_pts' => 'Ud',
+            'abbr_wp' => 'udāna.',
+        ],
+    ],
+    158 => [
+        3 => [
+            'abbr_my' => 'itivuttaka',
+            'abbr_pts' => 'It',
+            'abbr_wp' => 'itivutta.',
+        ],
+    ],
+    159 => [
+        3 => [
+            'abbr_my' => 'suttanipāta',
+            'abbr_pts' => 'Snp',
+            'abbr_wp' => 'suttani.',
+        ],
+    ],
+    160 => [
+        3 => [
+            'abbr_my' => 'vimānavatthu',
+            'abbr_pts' => 'Vv',
+            'abbr_wp' => 'vimāna.',
+        ],
+    ],
+    161 => [
+        3 => [
+            'abbr_my' => 'petavatthu',
+            'abbr_pts' => 'Pv',
+            'abbr_wp' => 'peta.',
+        ],
+    ],
+    162 => [
+        3 => [
+            'abbr_my' => 'theragāthā',
+            'abbr_pts' => 'Th',
+            'abbr_wp' => 'theragāthā.',
+        ],
+    ],
+    163 => [
+        3 => [
+            'abbr_my' => 'therīgāthā',
+            'abbr_pts' => 'Thī',
+            'abbr_wp' => 'therī.',
+        ],
+    ],
+    164 => [
+        3 => [
+            'abbr_my' => 'ma 1',
+            'abbr_pts' => 'Mn I',
+            'abbr_wp' => 'ma.ni.1.',
+        ],
+    ],
+    165 => [
+        3 => [
+            'abbr_my' => 'ma 2',
+            'abbr_pts' => 'Mn I',
+            'abbr_wp' => 'ma.ni.2.',
+        ],
+    ],
+    166 => [
+        3 => [
+            'abbr_my' => 'ma 3',
+            'abbr_pts' => 'Mn II',
+            'abbr_wp' => 'ma.ni.3.',
+        ],
+    ],
+    167 => [
+        3 => [
+            'abbr_my' => 'saṃ 1',
+            'abbr_pts' => 'Sn I',
+            'abbr_wp' => 'saṃ.ni.1.',
+        ],
+    ],
+    168 => [
+        3 => [
+            'abbr_my' => 'saṃ 1',
+            'abbr_pts' => 'Sn II',
+            'abbr_wp' => 'saṃ.ni.2.',
+        ],
+    ],
+    169 => [
+        3 => [
+            'abbr_my' => 'saṃ 2',
+            'abbr_pts' => 'Sn III',
+            'abbr_wp' => 'saṃ.ni.3.',
+        ],
+    ],
+    170 => [
+        3 => [
+            'abbr_my' => 'saṃ 2',
+            'abbr_pts' => 'Sn IV',
+            'abbr_wp' => 'saṃ.ni.4.',
+        ],
+    ],
+    171 => [
+        3 => [
+            'abbr_my' => 'saṃ 3',
+            'abbr_pts' => 'Sn V',
+            'abbr_wp' => 'saṃ.ni.5.',
+        ],
+    ],
+    172 => [
+        3 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'DhsT',
+            'abbr_wp' => 'dha.sa.mūlaṭī.',
+        ],
+    ],
+    173 => [
+        3 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'VibhT',
+            'abbr_wp' => 'vibha.mūlaṭī.',
+        ],
+        1155 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'VibhAnuT',
+            'abbr_wp' => 'vibha.anuṭī.',
+        ],
+    ],
+    174 => [
+        4 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'DhātukT',
+            'abbr_wp' => 'dhātu.kathā.mūlaṭī.',
+        ],
+        100 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'PuggT',
+            'abbr_wp' => 'puggala.paññatti.mūlaṭī.',
+        ],
+        201 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'KvT',
+            'abbr_wp' => 'kathā.vatthu.mūlaṭī.',
+        ],
+        865 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'YamT',
+            'abbr_wp' => 'yama.mūlaṭī.',
+        ],
+        1059 => [
+            'abbr_my' => 'mūlaṭī',
+            'abbr_pts' => 'PaṭṭhT',
+            'abbr_wp' => 'paṭṭhāna.mūlaṭī.',
+        ],
+    ],
+    175 => [
+        3 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'DhsAnuT',
+            'abbr_wp' => 'dha.sa.anuṭī.',
+        ],
+    ],
+    176 => [
+        4 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'DhātukAnuT',
+            'abbr_wp' => 'dhātu.kathā.anuṭī.',
+        ],
+        117 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'PuggAnuT',
+            'abbr_wp' => 'puggala.paññatti.anuṭī.',
+        ],
+        213 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'KvAnuT',
+            'abbr_wp' => 'kathā.vatthu.anuṭī.',
+        ],
+        917 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'YamAnuT',
+            'abbr_wp' => 'yama.anuṭī.',
+        ],
+        1139 => [
+            'abbr_my' => 'anuṭī',
+            'abbr_pts' => 'PaṭṭhAnuT',
+            'abbr_wp' => 'paṭṭhāna.anuṭī.',
+        ],
+    ],
+    177 => [
+        2 => [
+            'abbr_my' => 'abhidhammāvatāro',
+            'abbr_pts' => 'Abhāv',
+            'abbr_wp' => 'abhidhammāvatāra.',
+        ],
+        4805 => [
+            'abbr_my' => 'nāmarūpaparicchedo',
+            'abbr_pts' => 'Nāmarp',
+            'abbr_wp' => 'nāmarūpapariccheda.',
+        ],
+        10627 => [
+            'abbr_my' => 'paramatthavinicchayo',
+            'abbr_pts' => 'Paramv',
+            'abbr_wp' => 'paramatthavinicchaya.',
+        ],
+        14272 => [
+            'abbr_my' => 'saccasaṅkhepo',
+            'abbr_pts' => 'Sacc',
+            'abbr_wp' => 'saccasaṅkhepa.',
+        ],
+    ],
+    178 => [
+        2 => [
+            'abbr_my' => 'abhidhammatthasaṅgaho',
+            'abbr_pts' => 'Abhs',
+            'abbr_wp' => 'abhidhammatthasaṅgaha.',
+        ],
+        875 => [
+            'abbr_my' => 'abhidhammatthavibhāvinī-ṭī',
+            'abbr_pts' => 'AbhsT',
+            'abbr_wp' => 'abhidhammatthavibhāvinī.ṭī.',
+        ],
+    ],
+    179 => [
+        2 => [
+            'abbr_my' => 'abhidhammāvatāra-purāṇa-ṭī',
+            'abbr_pts' => 'AbhāvPT',
+            'abbr_wp' => 'abhidhammāvatāra.purāṇaṭī.',
+        ],
+        872 => [
+            'abbr_my' => 'abhidhammāvatāra-abhinava-ṭī 1',
+            'abbr_pts' => 'AbhāvAbhT',
+            'abbr_wp' => 'abhidhammāvatāra.abhinavaṭī.',
+        ],
+    ],
+    180 => [
+        2 => [
+            'abbr_my' => 'abhidhammamātikā',
+            'abbr_pts' => 'AbhMāt',
+            'abbr_wp' => 'abhidhammamātikā.',
+        ],
+        1221 => [
+            'abbr_my' => 'mohavicchedanī',
+            'abbr_pts' => 'Moh',
+            'abbr_wp' => 'mohavicchedanī.',
+        ],
+    ],
+    181 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭī 1',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.1.',
+        ],
+    ],
+    182 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭī 2',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.2.',
+        ],
+        324 => [
+            'abbr_my' => 'aṃ-ṭī 2',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.3.',
+        ],
+        1023 => [
+            'abbr_my' => 'aṃ-ṭī 2',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.4.',
+        ],
+    ],
+    183 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.5.',
+        ],
+        470 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.6.',
+        ],
+        793 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.7.',
+        ],
+    ],
+    184 => [
+        3 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.8.',
+        ],
+        278 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.9.',
+        ],
+        466 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.10.',
+        ],
+        776 => [
+            'abbr_my' => 'aṃ-ṭī 3',
+            'abbr_pts' => 'AnT',
+            'abbr_wp' => 'a.ni.ṭī.11.',
+        ],
+    ],
+    185 => [
+        3 => [
+            'abbr_my' => 'dī-ṭī 1',
+            'abbr_pts' => 'DnT I',
+            'abbr_wp' => 'dī.ni.ṭī.1.',
+        ],
+    ],
+    186 => [
+        3 => [
+            'abbr_my' => 'dī-ṭī 2',
+            'abbr_pts' => 'DnT II',
+            'abbr_wp' => 'dī.ni.ṭī.2.',
+        ],
+    ],
+    187 => [
+        3 => [
+            'abbr_my' => 'dī-ṭī 3',
+            'abbr_pts' => 'DnT III',
+            'abbr_wp' => 'dī.ni.ṭī.3.',
+        ],
+    ],
+    188 => [
+        3 => [
+            'abbr_my' => 'dī-abhi-ṭī 1',
+            'abbr_pts' => 'DnAbhT',
+            'abbr_wp' => 'dī.ni.abhi.ṭī.1.',
+        ],
+    ],
+    189 => [
+        3 => [
+            'abbr_my' => 'dī-abhi-ṭī 2',
+            'abbr_pts' => 'DnAbhT',
+            'abbr_wp' => 'dī.ni.abhi.ṭī.2.',
+        ],
+    ],
+    190 => [
+        3 => [
+            'abbr_my' => 'nett-ṭī',
+            'abbr_pts' => 'NettT',
+            'abbr_wp' => 'netti.ṭī.',
+        ],
+    ],
+    191 => [
+        3 => [
+            'abbr_my' => 'nett-vi',
+            'abbr_pts' => 'NettVibh',
+            'abbr_wp' => 'netti.vibhā.',
+        ],
+    ],
+    192 => [
+        3 => [
+            'abbr_my' => 'ma-ṭī 1',
+            'abbr_pts' => 'MnT',
+            'abbr_wp' => 'ma.ni.ṭī.1.',
+        ],
+    ],
+    193 => [
+        3 => [
+            'abbr_my' => 'ma-ṭī 2',
+            'abbr_pts' => 'MnT',
+            'abbr_wp' => 'ma.ni.ṭī.2.',
+        ],
+    ],
+    194 => [
+        3 => [
+            'abbr_my' => 'ma-ṭī 2',
+            'abbr_pts' => 'MnT',
+            'abbr_wp' => 'ma.ni.ṭī.3.',
+        ],
+    ],
+    195 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭī 1',
+            'abbr_pts' => 'SnT',
+            'abbr_wp' => 'saṃ.ni.ṭī.1.',
+        ],
+    ],
+    196 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭī 2',
+            'abbr_pts' => 'SnT',
+            'abbr_wp' => 'saṃ.ni.ṭī.2.',
+        ],
+    ],
+    197 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭī 2',
+            'abbr_pts' => 'SnT',
+            'abbr_wp' => 'saṃ.ni.ṭī.3.',
+        ],
+    ],
+    198 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭī 2',
+            'abbr_pts' => 'SnT',
+            'abbr_wp' => 'saṃ.ni.ṭī.4.',
+        ],
+    ],
+    199 => [
+        3 => [
+            'abbr_my' => 'saṃ-ṭī 2',
+            'abbr_pts' => 'SnT',
+            'abbr_wp' => 'saṃ.ni.ṭī.5.',
+        ],
+    ],
+    200 => [
+        2 => [
+            'abbr_my' => 'vi.vi.',
+            'abbr_pts' => 'VinVn',
+            'abbr_wp' => 'vinayavinicchaya.',
+        ],
+        10176 => [
+            'abbr_my' => 'ut.vi.',
+            'abbr_pts' => 'UttVn',
+            'abbr_wp' => 'uttaravinicchaya.',
+        ],
+    ],
+    201 => [
+        2 => [
+            'abbr_my' => 'vi.vi.-ṭī',
+            'abbr_pts' => 'VinVnT',
+            'abbr_wp' => 'vinayavinicchaya.ṭī.',
+        ],
+        4270 => [
+            'abbr_my' => 'ut.vi.-ṭī',
+            'abbr_pts' => 'UttVnT',
+            'abbr_wp' => 'uttaravinicchaya.ṭī.',
+        ],
+    ],
+    202 => [
+        3 => [
+            'abbr_my' => 'pāci.yo.',
+            'abbr_pts' => 'PācYoj',
+            'abbr_wp' => 'pācityādiyojanā.',
+        ],
+    ],
+    203 => [
+        3 => [
+            'abbr_my' => 'khudda',
+            'abbr_pts' => 'Khuddas',
+            'abbr_wp' => 'khuddasikkhā.',
+        ],
+        1620 => [
+            'abbr_my' => 'khudda pu ṭī',
+            'abbr_pts' => 'KhuddasPT',
+            'abbr_wp' => 'khuddasikkhā.purāṇaṭī.',
+        ],
+        2361 => [
+            'abbr_my' => 'khudda abh ṭī',
+            'abbr_pts' => 'KhuddasAbhT',
+            'abbr_wp' => 'khuddasikkhā.abhinavaṭī.',
+        ],
+        3100 => [
+            'abbr_my' => 'mūlasikkhā',
+            'abbr_pts' => 'Mūlas',
+            'abbr_wp' => 'mūlasikkhā.',
+        ],
+        3481 => [
+            'abbr_my' => 'mūlasikkhā ṭī',
+            'abbr_pts' => 'MūlasT',
+            'abbr_wp' => 'mūlasikkhā.ṭī.',
+        ],
+    ],
+    204 => [
+        3 => [
+            'abbr_my' => 'sārattha 1',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.1.',
+        ],
+    ],
+    205 => [
+        3 => [
+            'abbr_my' => 'sārattha 2',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.2.',
+        ],
+    ],
+    206 => [
+        3 => [
+            'abbr_my' => 'sārattha 3',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.3.',
+        ],
+        717 => [
+            'abbr_my' => 'sārattha 3',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.3.mahāva.',
+        ],
+        1753 => [
+            'abbr_my' => 'sārattha 3',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.3.cūḷava.',
+        ],
+        2154 => [
+            'abbr_my' => 'sārattha 3',
+            'abbr_pts' => 'VinT',
+            'abbr_wp' => 'sārattha.ṭī.3.pari.',
+        ],
+    ],
+    207 => [
+        3 => [
+            'abbr_my' => 'pātimokkha',
+            'abbr_pts' => 'Pātim',
+            'abbr_wp' => 'pātimokkha.',
+        ],
+        524 => [
+            'abbr_my' => 'pātimokkha',
+            'abbr_pts' => 'Pātim',
+            'abbr_wp' => 'bhikkhunīpātimokkha.',
+        ],
+        1215 => [
+            'abbr_my' => 'kaṅkhāvitaraṇī',
+            'abbr_pts' => 'Kkh',
+            'abbr_wp' => 'kaṅkhā.aṭṭha.',
+        ],
+    ],
+    208 => [
+        3 => [
+            'abbr_my' => 'vinayasaṅgaha-ṭṭha',
+            'abbr_pts' => 'VinSgh',
+            'abbr_wp' => 'vi.saṅga.aṭṭha.',
+        ],
+    ],
+    209 => [
+        3 => [
+            'abbr_my' => 'vajira-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.',
+        ],
+        166 => [
+            'abbr_my' => 'vajira-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.pārā.',
+        ],
+        992 => [
+            'abbr_my' => 'vajira-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.pāci.',
+        ],
+        1708 => [
+            'abbr_my' => 'vajira-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.mahāva.',
+        ],
+        2217 => [
+            'abbr_my' => 'vajira-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.cūḷava.',
+        ],
+        2428 => [
+            'abbr_my' => 'vajirab-ṭī',
+            'abbr_pts' => 'VjbT',
+            'abbr_wp' => 'vajira.ṭī.pari.',
+        ],
+    ],
+    210 => [
+        3 => [
+            'abbr_my' => 'vimati 1',
+            'abbr_pts' => 'VmvT',
+            'abbr_wp' => 'vimati.ṭī.',
+        ],
+        1658 => [
+            'abbr_my' => 'vimati 2',
+            'abbr_pts' => 'VmvT',
+            'abbr_wp' => 'vimati.ṭī.bhikkhunī.',
+        ],
+        1779 => [
+            'abbr_my' => 'vimati 2',
+            'abbr_pts' => 'VmvT',
+            'abbr_wp' => 'vimati.ṭī.mahāva.',
+        ],
+        2431 => [
+            'abbr_my' => 'vimati 2',
+            'abbr_pts' => 'VmvT',
+            'abbr_wp' => 'vimati.ṭī.cūḷava.',
+        ],
+        2792 => [
+            'abbr_my' => 'vimati 2',
+            'abbr_pts' => 'VmvT',
+            'abbr_wp' => 'vimati.ṭī.pari.',
+        ],
+    ],
+    211 => [
+        3 => [
+            'abbr_my' => 'vi.laṅ.-ṭī 1',
+            'abbr_pts' => 'Vinālk',
+            'abbr_wp' => 'vinayālaṅkāra.ṭī.',
+        ],
+    ],
+    212 => [
+        2 => [
+            'abbr_my' => 'kaṅkhā',
+            'abbr_pts' => 'KkhPT',
+            'abbr_wp' => 'kaṅkhā.purāṇaṭī.',
+        ],
+        671 => [
+            'abbr_my' => 'kaṅkhā',
+            'abbr_pts' => 'KkhAbhT',
+            'abbr_wp' => 'kaṅkhā.abhinavaṭī.',
+        ],
+    ],
+    213 => [
+        3 => [
+            'abbr_my' => 'vi 1',
+            'abbr_pts' => 'Vin III',
+            'abbr_wp' => 'pārā.',
+        ],
+    ],
+    214 => [
+        3 => [
+            'abbr_my' => 'vi 1',
+            'abbr_pts' => 'Vin IV',
+            'abbr_wp' => 'pāci.',
+        ],
+        2162 => [
+            'abbr_my' => 'vi 1',
+            'abbr_pts' => 'Vin IV',
+            'abbr_wp' => 'pāci.bhikkhunī.',
+        ],
+    ],
+    215 => [
+        3 => [
+            'abbr_my' => 'vi 2',
+            'abbr_pts' => 'Vin I',
+            'abbr_wp' => 'mahāva.',
+        ],
+    ],
+    216 => [
+        3 => [
+            'abbr_my' => 'vi 2',
+            'abbr_pts' => 'Vin II',
+            'abbr_wp' => 'cūḷava.',
+        ],
+    ],
+    217 => [
+        3 => [
+            'abbr_my' => 'vi 3',
+            'abbr_pts' => 'Vin V',
+            'abbr_wp' => 'pari.',
+        ],
+    ],
+];

+ 35 - 12
api-v13/tests/Feature/SearchPaliWbwRefTest.php

@@ -1,10 +1,12 @@
 <?php
 
 /**
- * search-pali-wbw 的资源里要带上 page_numbers 的页码引用。
+ * search-pali-wbw 的资源里要带上页码引用 ref
  *
  * 每个 (book, paragraph) 在 page_numbers 里可能因为 wid 不同而有多行,
- * 输出时每个 type 只保留 wid 最小的那一行,并且只暴露 type / page 两个字段。
+ * 输出时每个 type 只保留 wid 最小的那一行,并且暴露 type / page / title 三个字段;
+ * title 是书缩写:type 为 M 时取 abbr_my、为 P 时取 abbr_pts。
+ * 另外恒有一条 type='wp' 的条目,page 为段落号、title 为 abbr_wp。
  */
 use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Support\Facades\DB;
@@ -50,14 +52,14 @@ function paliTextRow(int $paragraph = 1): array
 /**
  * 造一行 page_numbers。
  */
-function pageNumberRow(string $type, int $wid, int $page): array
+function pageNumberRow(string $type, int $wid, int $page, int $paragraph = 1): array
 {
     return [
         'type' => $type,
         'volume' => 1,
         'page' => $page,
         'book' => 1,
-        'paragraph' => 1,
+        'paragraph' => $paragraph,
         'wid' => $wid,
         'pcd_book_id' => 1,
     ];
@@ -78,20 +80,41 @@ it('adds ref with the smallest wid page for each type', function () {
         ->assertOk();
 
     $ref = $response->json('data.rows.0.ref');
-    expect($ref)->toHaveCount(2);
-
     $byType = collect($ref)->keyBy('type');
 
-    expect($byType->get('a'))->toBe(['type' => 'a', 'page' => 222])
-        ->and($byType->get('b'))->toBe(['type' => 'b', 'page' => 555]);
+    expect($byType->get('a'))->toBe(['type' => 'a', 'page' => 222, 'title' => null])
+        ->and($byType->get('b'))->toBe(['type' => 'b', 'page' => 555, 'title' => null])
+        ->and($byType->get('wp'))->toBe(['type' => 'wp', 'page' => 1, 'title' => null]);
 });
 
-it('omits ref when there are no page_numbers rows', function () {
-    DB::table('wbw_templates')->insert([wbwRow()]);
-    DB::table('pali_texts')->insert([paliTextRow()]);
+it('adds the series abbreviation as title for M and P types', function () {
+    DB::table('wbw_templates')->insert([wbwRow(10)]);
+    DB::table('pali_texts')->insert([paliTextRow(10)]);
+    DB::table('page_numbers')->insert([
+        pageNumberRow('M', 1, 111, 10),
+        pageNumberRow('P', 2, 222, 10),
+        pageNumberRow('V', 3, 333, 10),
+    ]);
+
+    $response = $this->getJson('/api/v2/search-pali-wbw?key=dhammo')
+        ->assertOk();
+
+    $byType = collect($response->json('data.rows.0.ref'))->keyBy('type');
+
+    expect($byType->get('M'))->toBe(['type' => 'M', 'page' => 111, 'title' => 'namakkāra'])
+        ->and($byType->get('P'))->toBe(['type' => 'P', 'page' => 222, 'title' => 'Nam'])
+        ->and($byType->get('V'))->toBe(['type' => 'V', 'page' => 333, 'title' => null])
+        ->and($byType->get('wp'))->toBe(['type' => 'wp', 'page' => 10, 'title' => 'namakkāra.']);
+});
+
+it('adds the wp entry even when there are no page_numbers rows', function () {
+    DB::table('wbw_templates')->insert([wbwRow(10)]);
+    DB::table('pali_texts')->insert([paliTextRow(10)]);
 
     $response = $this->getJson('/api/v2/search-pali-wbw?key=dhammo')
         ->assertOk();
 
-    expect($response->json('data.rows.0'))->not->toHaveKey('ref');
+    expect($response->json('data.rows.0.ref'))->toBe([
+        ['type' => 'wp', 'page' => 10, 'title' => 'namakkāra.'],
+    ]);
 });