9
9
%% Copyright (C) 2016-2018 by Zeping Lee <zepinglee AT gmail.com>
10
10
%%
11
11
%% This file may be distributed and/or modified under the
12
- %% conditions of the LaTeX Project Public License, either
13
- %% version 1.2 of this license or (at your option) any later
14
- %% version. The latest version of this license is in:
15
- %%
16
- %% http://www.latex-project.org/lppl.txt
17
- %%
18
- %% and version 1.2 or later is part of all distributions of
19
- %% LaTeX version 1999/12/01 or later.
20
- %%
21
- %% This BibTeX style file is derived from `plainnat.bst' by Patrick W Daly,
22
- %% which was designed for use with the `natbib.sty' package.
12
+ %% conditions of the LaTeX Project Public License, either version 1.3c
13
+ %% of this license or (at your option) any later version.
14
+ %% The latest version of this license is in
15
+ %% https://www.latex-project.org/lppl.txt
16
+ %% and version 1.3c or later is part of all distributions of LaTeX
17
+ %% version 2005/12/01 or later.
23
18
%%
24
19
ENTRY
25
20
{ address
@@ -55,7 +50,7 @@ INTEGERS { output.state before.all mid.sentence after.sentence after.block after
55
50
56
51
INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other }
57
52
58
- INTEGERS { charptr stringlength }
53
+ INTEGERS { charptr len }
59
54
60
55
FUNCTION {init.state.consts}
61
56
{ #0 'before.all :=
@@ -273,27 +268,7 @@ FUNCTION {emphasize}
273
268
if$
274
269
}
275
270
276
- INTEGERS { ascii }
277
-
278
- FUNCTION {get.char.lang}
279
- { chr.to.int$ 'ascii :=
280
- ascii #64 > ascii #91 < and ascii #96 > ascii #123 < and or
281
- { lang.en }
282
- { ascii #227 > ascii #234 < and
283
- { lang.zh }
284
- { ascii #227 =
285
- { lang.ja }
286
- { ascii #207 > ascii #212 < and
287
- { lang.ru }
288
- { lang.en }
289
- if$
290
- }
291
- if$
292
- }
293
- if$
294
- }
295
- if$
296
- }
271
+ INTEGERS { byte second.byte }
297
272
298
273
INTEGERS { char.lang tmp.lang }
299
274
@@ -302,29 +277,67 @@ STRINGS { tmp.str }
302
277
FUNCTION {get.str.lang}
303
278
{ 'tmp.str :=
304
279
lang.other 'tmp.lang :=
305
- tmp.str empty$
306
- { "Empty string!" warning$ }
307
- { #1 ' charptr :=
308
- tmp.str text.length$ #1 + 'stringlength :=
309
- { charptr stringlength < }
310
- { tmp.str charptr #1 substring$ get.char.lang 'char.lang :=
311
- char.lang tmp.lang >
312
- { char. lang 'tmp .lang := }
313
- 'skip$
280
+ #1 'charptr :=
281
+ tmp.str text.length$ #1 + 'len :=
282
+ { charptr len < }
283
+ { tmp.str charptr #1 substring$ chr.to.int$ 'byte :=
284
+ byte #128 <
285
+ { charptr #1 + 'charptr :=
286
+ byte #64 > byte #91 < and byte #96 > byte #123 < and or
287
+ { lang.en 'char .lang := }
288
+ { lang.other 'char.lang := }
314
289
if$
315
-
316
- char.lang lang.zh = char.lang lang.ja = or
317
- { charptr #3 + 'charptr := }
318
- { char.lang lang.ru =
319
- { charptr #2 + 'charptr := }
320
- { charptr #1 + 'charptr := }
290
+ }
291
+ { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte :=
292
+ byte #224 <
293
+ { charptr #2 + 'charptr :=
294
+ byte #207 > byte #212 < and
295
+ byte #212 = second.byte #176 < and or
296
+ { lang.ru 'char.lang := }
297
+ { lang.other 'char.lang := }
298
+ if$
299
+ }
300
+ { byte #240 <
301
+ { charptr #3 + 'charptr :=
302
+ byte #227 > byte #234 < and
303
+ { lang.zh 'char.lang := }
304
+ { byte #227 =
305
+ { second.byte #143 >
306
+ { lang.zh 'char.lang := }
307
+ { second.byte #128 > second.byte #132 < and
308
+ { lang.ja 'char.lang := }
309
+ { lang.other 'char.lang := }
310
+ if$
311
+ }
312
+ if$
313
+ }
314
+ { byte #239 =
315
+ second.byte #163 > second.byte #172 < and and
316
+ { lang.zh 'char.lang := }
317
+ { lang.other 'char.lang := }
318
+ if$
319
+ }
320
+ if$
321
+ }
322
+ if$
323
+ }
324
+ { charptr #4 + 'charptr :=
325
+ byte #240 = second.byte #159 > and
326
+ { lang.zh 'char.lang := }
327
+ { lang.other 'char.lang := }
328
+ if$
329
+ }
321
330
if$
322
331
}
323
332
if$
324
333
}
325
- while$
334
+ if$
335
+ char.lang tmp.lang >
336
+ { char.lang 'tmp.lang := }
337
+ 'skip$
338
+ if$
326
339
}
327
- if $
340
+ while $
328
341
tmp.lang
329
342
}
330
343
@@ -427,27 +440,61 @@ FUNCTION {format.url}
427
440
}
428
441
429
442
FUNCTION {is.doi.in.url}
430
- { url empty$
431
- { #0 }
432
- { doi text.length$ 'stringlength :=
433
- url text.length$ 'charptr :=
434
- { url charptr stringlength substring$ doi = not
435
- charptr #0 >
436
- and
443
+ { 's :=
444
+ s empty$
445
+ { #1 }
446
+ { url empty$
447
+ { #0 }
448
+ { s text.length$ 'len :=
449
+ url text.length$ 'charptr :=
450
+ { url charptr len substring$ s = not
451
+ charptr #0 >
452
+ and
453
+ }
454
+ { charptr #1 - 'charptr := }
455
+ while$
456
+ charptr
437
457
}
438
- { charptr #1 - 'charptr := }
439
- while$
440
- charptr
458
+ if$
441
459
}
442
460
if$
443
461
}
444
462
445
463
FUNCTION {format.doi}
446
- { doi empty$
447
- { "" }
448
- { is.doi.in.url
464
+ { ""
465
+ doi empty$
466
+ 'skip$
467
+ { "" 's :=
468
+ doi 't :=
469
+ #0 'numnames :=
470
+ { t empty$ not}
471
+ { t #1 #1 substring$ 'tmp.str :=
472
+ tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or
473
+ { t #2 #1 substring$ empty$
474
+ { s tmp.str * 's := }
475
+ 'skip$
476
+ if$
477
+ s empty$ s is.doi.in.url or
478
+ 'skip$
479
+ { numnames #1 + 'numnames :=
480
+ numnames #1 >
481
+ { ", " * }
482
+ { "DOI: " * }
483
+ if$
484
+ "\doi{" s * "}" * *
485
+ }
486
+ if$
487
+ "" 's :=
488
+ }
489
+ { s tmp.str * 's := }
490
+ if$
491
+ t #2 global.max$ substring$ 't :=
492
+ }
493
+ while$
494
+ 's :=
495
+ s empty$ not
496
+ { new.block s }
449
497
{ "" }
450
- { new.block "\doi{" doi * "}" * }
451
498
if$
452
499
}
453
500
if$
@@ -456,7 +503,12 @@ FUNCTION {format.doi}
456
503
FUNCTION {format.title}
457
504
{ title empty$
458
505
{ "" }
459
- { title "t" change.case$ }
506
+ { title
507
+ entry.lang lang.en =
508
+ { "t" change.case$ }
509
+ 'skip$
510
+ if$
511
+ }
460
512
if$
461
513
}
462
514
@@ -574,22 +626,15 @@ FUNCTION {output.bibitem}
574
626
before.all 'output.state :=
575
627
}
576
628
577
- FUNCTION {n.dashify }
629
+ FUNCTION {hyphenate }
578
630
{ 't :=
579
631
""
580
632
{ t empty$ not }
581
633
{ t #1 #1 substring$ "-" =
582
- { t #1 #2 substring$ "--" = not
583
- { "--" *
584
- t #2 global.max$ substring$ 't :=
585
- }
586
- { { t #1 #1 substring$ "-" = }
587
- { "-" *
588
- t #2 global.max$ substring$ 't :=
589
- }
590
- while$
591
- }
592
- if$
634
+ { "-" *
635
+ { t #1 #1 substring$ "-" = }
636
+ { t #2 global.max$ substring$ 't := }
637
+ while$
593
638
}
594
639
{ t #1 #1 substring$ *
595
640
t #2 global.max$ substring$ 't :=
@@ -604,8 +649,8 @@ FUNCTION {extract.before.dash}
604
649
{ pop$ "" }
605
650
{ 's :=
606
651
#1 'charptr :=
607
- s text.length$ #1 + 'stringlength :=
608
- { charptr stringlength <
652
+ s text.length$ #1 + 'len :=
653
+ { charptr len <
609
654
s charptr #1 substring$ "-" = not
610
655
and
611
656
}
@@ -621,14 +666,14 @@ FUNCTION {extract.after.dash}
621
666
{ pop$ "" }
622
667
{ 's :=
623
668
#1 'charptr :=
624
- s text.length$ #1 + 'stringlength :=
625
- { charptr stringlength <
669
+ s text.length$ #1 + 'len :=
670
+ { charptr len <
626
671
s charptr #1 substring$ "-" = not
627
672
and
628
673
}
629
674
{ charptr #1 + 'charptr := }
630
675
while$
631
- { charptr stringlength <
676
+ { charptr len <
632
677
s charptr #1 substring$ "-" =
633
678
and
634
679
}
@@ -749,7 +794,7 @@ FUNCTION {format.volume}
749
794
{ "" }
750
795
{ volume is.number
751
796
{ is.in.chinese
752
- { "第" volume * "卷" * }
797
+ { "第 " volume * " 卷" * }
753
798
{ "volume" volume tie.or.space.connect }
754
799
if$
755
800
}
@@ -764,7 +809,7 @@ FUNCTION {format.number}
764
809
{ "" }
765
810
{ number is.number
766
811
{ is.in.chinese
767
- { "第" number * "册" * }
812
+ { "第 " number * " 册" * }
768
813
{ "number" number tie.or.space.connect }
769
814
if$
770
815
}
@@ -798,7 +843,10 @@ FUNCTION {format.series.vol.num.title}
798
843
if$
799
844
}
800
845
if$
801
- "t" change.case$
846
+ entry.lang lang.en =
847
+ { "t" change.case$ }
848
+ 'skip$
849
+ if$
802
850
}
803
851
804
852
FUNCTION {format.series.vol.num.booktitle}
@@ -842,7 +890,7 @@ FUNCTION {format.edition}
842
890
{ "" }
843
891
{ edition is.number
844
892
{ is.in.chinese
845
- { edition "版" * }
893
+ { edition " 版" * }
846
894
{ edition num.to.ordinal " ed." * }
847
895
if$
848
896
}
@@ -868,12 +916,9 @@ FUNCTION {format.sine.loco}
868
916
if$
869
917
}
870
918
871
- FUNCTION {format.address}
872
- { address }
873
-
874
919
FUNCTION {format.sine.nomine}
875
920
{ is.in.chinese
876
- { "[出版地不详 ]" }
921
+ { "[出版者不详 ]" }
877
922
{ "[s.n.]" }
878
923
if$
879
924
}
@@ -935,7 +980,7 @@ FUNCTION {format.address.publisher}
935
980
FUNCTION {format.pages}
936
981
{ pages empty$
937
982
{ "" }
938
- { pages n.dashify }
983
+ { pages hyphenate }
939
984
if$
940
985
}
941
986
@@ -1397,8 +1442,6 @@ FUNCTION {sortify}
1397
1442
"l" change.case$
1398
1443
}
1399
1444
1400
- INTEGERS { len }
1401
-
1402
1445
FUNCTION {chop.word}
1403
1446
{ 's :=
1404
1447
'len :=
@@ -1742,7 +1785,7 @@ FUNCTION {begin.bib}
1742
1785
write$ newline$
1743
1786
"\providecommand{\href}[2]{\url{#2}}"
1744
1787
write$ newline$
1745
- "\providecommand{\doi}[1]{DOI: \href{http ://dx. doi.org/#1}{#1}}"
1788
+ "\providecommand{\doi}[1]{\href{https ://doi.org/#1}{#1}}"
1746
1789
write$ newline$
1747
1790
"\expandafter\ifx\csname urlstyle\endcsname\relax\relax\else"
1748
1791
write$ newline$
0 commit comments