@d3plus/text 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*
2
- @d3plus/text v3.0.2
2
+ @d3plus/text v3.0.4
3
3
  A smart SVG text box with line wrapping and automatic font size scaling.
4
4
  Copyright (c) 2025 D3plus - https://d3plus.org
5
5
  @license MIT
@@ -109,10 +109,10 @@
109
109
  }));
110
110
 
111
111
  (function (global, factory) {
112
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('@d3plus/dom')) :
113
- typeof define === 'function' && define.amd ? define('@d3plus/text', ['exports', 'd3-array', '@d3plus/dom'], factory) :
114
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3plus = {}, global.d3Array, global.dom));
115
- })(this, (function (exports, d3Array, dom) { 'use strict';
112
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('linebreak'), require('@d3plus/dom')) :
113
+ typeof define === 'function' && define.amd ? define('@d3plus/text', ['exports', 'linebreak', '@d3plus/dom'], factory) :
114
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3plus = {}, global.LineBreaker, global.dom));
115
+ })(this, (function (exports, LineBreaker, dom) { 'use strict';
116
116
 
117
117
  /**
118
118
  @const fontFamily
@@ -255,1332 +255,19 @@
255
255
  });
256
256
  }
257
257
 
258
- // scraped from http://www.fileformat.info/info/unicode/category/Mc/list.htm
259
- // and http://www.fileformat.info/info/unicode/category/Mn/list.htm
260
- // JSON.stringify([].slice.call(document.getElementsByClassName("table-list")[0].getElementsByTagName("tr")).filter(function(d){ return d.getElementsByTagName("a").length && d.getElementsByTagName("a")[0].innerHTML.length === 6; }).map(function(d){ return d.getElementsByTagName("a")[0].innerHTML.replace("U", "u").replace("+", ""); }).sort());
261
- // The following unicode characters combine to form new characters and should never be split from surrounding characters.
262
- const a = [
263
- "u0903",
264
- "u093B",
265
- "u093E",
266
- "u093F",
267
- "u0940",
268
- "u0949",
269
- "u094A",
270
- "u094B",
271
- "u094C",
272
- "u094E",
273
- "u094F",
274
- "u0982",
275
- "u0983",
276
- "u09BE",
277
- "u09BF",
278
- "u09C0",
279
- "u09C7",
280
- "u09C8",
281
- "u09CB",
282
- "u09CC",
283
- "u09D7",
284
- "u0A03",
285
- "u0A3E",
286
- "u0A3F",
287
- "u0A40",
288
- "u0A83",
289
- "u0ABE",
290
- "u0ABF",
291
- "u0AC0",
292
- "u0AC9",
293
- "u0ACB",
294
- "u0ACC",
295
- "u0B02",
296
- "u0B03",
297
- "u0B3E",
298
- "u0B40",
299
- "u0B47",
300
- "u0B48",
301
- "u0B4B",
302
- "u0B4C",
303
- "u0B57",
304
- "u0BBE",
305
- "u0BBF",
306
- "u0BC1",
307
- "u0BC2",
308
- "u0BC6",
309
- "u0BC7",
310
- "u0BC8",
311
- "u0BCA",
312
- "u0BCB",
313
- "u0BCC",
314
- "u0BD7",
315
- "u0C01",
316
- "u0C02",
317
- "u0C03",
318
- "u0C41",
319
- "u0C42",
320
- "u0C43",
321
- "u0C44",
322
- "u0C82",
323
- "u0C83",
324
- "u0CBE",
325
- "u0CC0",
326
- "u0CC1",
327
- "u0CC2",
328
- "u0CC3",
329
- "u0CC4",
330
- "u0CC7",
331
- "u0CC8",
332
- "u0CCA",
333
- "u0CCB",
334
- "u0CD5",
335
- "u0CD6",
336
- "u0D02",
337
- "u0D03",
338
- "u0D3E",
339
- "u0D3F",
340
- "u0D40",
341
- "u0D46",
342
- "u0D47",
343
- "u0D48",
344
- "u0D4A",
345
- "u0D4B",
346
- "u0D4C",
347
- "u0D57",
348
- "u0D82",
349
- "u0D83",
350
- "u0DCF",
351
- "u0DD0",
352
- "u0DD1",
353
- "u0DD8",
354
- "u0DD9",
355
- "u0DDA",
356
- "u0DDB",
357
- "u0DDC",
358
- "u0DDD",
359
- "u0DDE",
360
- "u0DDF",
361
- "u0DF2",
362
- "u0DF3",
363
- "u0F3E",
364
- "u0F3F",
365
- "u0F7F",
366
- "u102B",
367
- "u102C",
368
- "u1031",
369
- "u1038",
370
- "u103B",
371
- "u103C",
372
- "u1056",
373
- "u1057",
374
- "u1062",
375
- "u1063",
376
- "u1064",
377
- "u1067",
378
- "u1068",
379
- "u1069",
380
- "u106A",
381
- "u106B",
382
- "u106C",
383
- "u106D",
384
- "u1083",
385
- "u1084",
386
- "u1087",
387
- "u1088",
388
- "u1089",
389
- "u108A",
390
- "u108B",
391
- "u108C",
392
- "u108F",
393
- "u109A",
394
- "u109B",
395
- "u109C",
396
- "u17B6",
397
- "u17BE",
398
- "u17BF",
399
- "u17C0",
400
- "u17C1",
401
- "u17C2",
402
- "u17C3",
403
- "u17C4",
404
- "u17C5",
405
- "u17C7",
406
- "u17C8",
407
- "u1923",
408
- "u1924",
409
- "u1925",
410
- "u1926",
411
- "u1929",
412
- "u192A",
413
- "u192B",
414
- "u1930",
415
- "u1931",
416
- "u1933",
417
- "u1934",
418
- "u1935",
419
- "u1936",
420
- "u1937",
421
- "u1938",
422
- "u1A19",
423
- "u1A1A",
424
- "u1A55",
425
- "u1A57",
426
- "u1A61",
427
- "u1A63",
428
- "u1A64",
429
- "u1A6D",
430
- "u1A6E",
431
- "u1A6F",
432
- "u1A70",
433
- "u1A71",
434
- "u1A72",
435
- "u1B04",
436
- "u1B35",
437
- "u1B3B",
438
- "u1B3D",
439
- "u1B3E",
440
- "u1B3F",
441
- "u1B40",
442
- "u1B41",
443
- "u1B43",
444
- "u1B44",
445
- "u1B82",
446
- "u1BA1",
447
- "u1BA6",
448
- "u1BA7",
449
- "u1BAA",
450
- "u1BE7",
451
- "u1BEA",
452
- "u1BEB",
453
- "u1BEC",
454
- "u1BEE",
455
- "u1BF2",
456
- "u1BF3",
457
- "u1C24",
458
- "u1C25",
459
- "u1C26",
460
- "u1C27",
461
- "u1C28",
462
- "u1C29",
463
- "u1C2A",
464
- "u1C2B",
465
- "u1C34",
466
- "u1C35",
467
- "u1CE1",
468
- "u1CF2",
469
- "u1CF3",
470
- "u302E",
471
- "u302F",
472
- "uA823",
473
- "uA824",
474
- "uA827",
475
- "uA880",
476
- "uA881",
477
- "uA8B4",
478
- "uA8B5",
479
- "uA8B6",
480
- "uA8B7",
481
- "uA8B8",
482
- "uA8B9",
483
- "uA8BA",
484
- "uA8BB",
485
- "uA8BC",
486
- "uA8BD",
487
- "uA8BE",
488
- "uA8BF",
489
- "uA8C0",
490
- "uA8C1",
491
- "uA8C2",
492
- "uA8C3",
493
- "uA952",
494
- "uA953",
495
- "uA983",
496
- "uA9B4",
497
- "uA9B5",
498
- "uA9BA",
499
- "uA9BB",
500
- "uA9BD",
501
- "uA9BE",
502
- "uA9BF",
503
- "uA9C0",
504
- "uAA2F",
505
- "uAA30",
506
- "uAA33",
507
- "uAA34",
508
- "uAA4D",
509
- "uAA7B",
510
- "uAA7D",
511
- "uAAEB",
512
- "uAAEE",
513
- "uAAEF",
514
- "uAAF5",
515
- "uABE3",
516
- "uABE4",
517
- "uABE6",
518
- "uABE7",
519
- "uABE9",
520
- "uABEA",
521
- "uABEC"
522
- ];
523
- const b = [
524
- "u0300",
525
- "u0301",
526
- "u0302",
527
- "u0303",
528
- "u0304",
529
- "u0305",
530
- "u0306",
531
- "u0307",
532
- "u0308",
533
- "u0309",
534
- "u030A",
535
- "u030B",
536
- "u030C",
537
- "u030D",
538
- "u030E",
539
- "u030F",
540
- "u0310",
541
- "u0311",
542
- "u0312",
543
- "u0313",
544
- "u0314",
545
- "u0315",
546
- "u0316",
547
- "u0317",
548
- "u0318",
549
- "u0319",
550
- "u031A",
551
- "u031B",
552
- "u031C",
553
- "u031D",
554
- "u031E",
555
- "u031F",
556
- "u0320",
557
- "u0321",
558
- "u0322",
559
- "u0323",
560
- "u0324",
561
- "u0325",
562
- "u0326",
563
- "u0327",
564
- "u0328",
565
- "u0329",
566
- "u032A",
567
- "u032B",
568
- "u032C",
569
- "u032D",
570
- "u032E",
571
- "u032F",
572
- "u0330",
573
- "u0331",
574
- "u0332",
575
- "u0333",
576
- "u0334",
577
- "u0335",
578
- "u0336",
579
- "u0337",
580
- "u0338",
581
- "u0339",
582
- "u033A",
583
- "u033B",
584
- "u033C",
585
- "u033D",
586
- "u033E",
587
- "u033F",
588
- "u0340",
589
- "u0341",
590
- "u0342",
591
- "u0343",
592
- "u0344",
593
- "u0345",
594
- "u0346",
595
- "u0347",
596
- "u0348",
597
- "u0349",
598
- "u034A",
599
- "u034B",
600
- "u034C",
601
- "u034D",
602
- "u034E",
603
- "u034F",
604
- "u0350",
605
- "u0351",
606
- "u0352",
607
- "u0353",
608
- "u0354",
609
- "u0355",
610
- "u0356",
611
- "u0357",
612
- "u0358",
613
- "u0359",
614
- "u035A",
615
- "u035B",
616
- "u035C",
617
- "u035D",
618
- "u035E",
619
- "u035F",
620
- "u0360",
621
- "u0361",
622
- "u0362",
623
- "u0363",
624
- "u0364",
625
- "u0365",
626
- "u0366",
627
- "u0367",
628
- "u0368",
629
- "u0369",
630
- "u036A",
631
- "u036B",
632
- "u036C",
633
- "u036D",
634
- "u036E",
635
- "u036F",
636
- "u0483",
637
- "u0484",
638
- "u0485",
639
- "u0486",
640
- "u0487",
641
- "u0591",
642
- "u0592",
643
- "u0593",
644
- "u0594",
645
- "u0595",
646
- "u0596",
647
- "u0597",
648
- "u0598",
649
- "u0599",
650
- "u059A",
651
- "u059B",
652
- "u059C",
653
- "u059D",
654
- "u059E",
655
- "u059F",
656
- "u05A0",
657
- "u05A1",
658
- "u05A2",
659
- "u05A3",
660
- "u05A4",
661
- "u05A5",
662
- "u05A6",
663
- "u05A7",
664
- "u05A8",
665
- "u05A9",
666
- "u05AA",
667
- "u05AB",
668
- "u05AC",
669
- "u05AD",
670
- "u05AE",
671
- "u05AF",
672
- "u05B0",
673
- "u05B1",
674
- "u05B2",
675
- "u05B3",
676
- "u05B4",
677
- "u05B5",
678
- "u05B6",
679
- "u05B7",
680
- "u05B8",
681
- "u05B9",
682
- "u05BA",
683
- "u05BB",
684
- "u05BC",
685
- "u05BD",
686
- "u05BF",
687
- "u05C1",
688
- "u05C2",
689
- "u05C4",
690
- "u05C5",
691
- "u05C7",
692
- "u0610",
693
- "u0611",
694
- "u0612",
695
- "u0613",
696
- "u0614",
697
- "u0615",
698
- "u0616",
699
- "u0617",
700
- "u0618",
701
- "u0619",
702
- "u061A",
703
- "u064B",
704
- "u064C",
705
- "u064D",
706
- "u064E",
707
- "u064F",
708
- "u0650",
709
- "u0651",
710
- "u0652",
711
- "u0653",
712
- "u0654",
713
- "u0655",
714
- "u0656",
715
- "u0657",
716
- "u0658",
717
- "u0659",
718
- "u065A",
719
- "u065B",
720
- "u065C",
721
- "u065D",
722
- "u065E",
723
- "u065F",
724
- "u0670",
725
- "u06D6",
726
- "u06D7",
727
- "u06D8",
728
- "u06D9",
729
- "u06DA",
730
- "u06DB",
731
- "u06DC",
732
- "u06DF",
733
- "u06E0",
734
- "u06E1",
735
- "u06E2",
736
- "u06E3",
737
- "u06E4",
738
- "u06E7",
739
- "u06E8",
740
- "u06EA",
741
- "u06EB",
742
- "u06EC",
743
- "u06ED",
744
- "u0711",
745
- "u0730",
746
- "u0731",
747
- "u0732",
748
- "u0733",
749
- "u0734",
750
- "u0735",
751
- "u0736",
752
- "u0737",
753
- "u0738",
754
- "u0739",
755
- "u073A",
756
- "u073B",
757
- "u073C",
758
- "u073D",
759
- "u073E",
760
- "u073F",
761
- "u0740",
762
- "u0741",
763
- "u0742",
764
- "u0743",
765
- "u0744",
766
- "u0745",
767
- "u0746",
768
- "u0747",
769
- "u0748",
770
- "u0749",
771
- "u074A",
772
- "u07A6",
773
- "u07A7",
774
- "u07A8",
775
- "u07A9",
776
- "u07AA",
777
- "u07AB",
778
- "u07AC",
779
- "u07AD",
780
- "u07AE",
781
- "u07AF",
782
- "u07B0",
783
- "u07EB",
784
- "u07EC",
785
- "u07ED",
786
- "u07EE",
787
- "u07EF",
788
- "u07F0",
789
- "u07F1",
790
- "u07F2",
791
- "u07F3",
792
- "u0816",
793
- "u0817",
794
- "u0818",
795
- "u0819",
796
- "u081B",
797
- "u081C",
798
- "u081D",
799
- "u081E",
800
- "u081F",
801
- "u0820",
802
- "u0821",
803
- "u0822",
804
- "u0823",
805
- "u0825",
806
- "u0826",
807
- "u0827",
808
- "u0829",
809
- "u082A",
810
- "u082B",
811
- "u082C",
812
- "u082D",
813
- "u0859",
814
- "u085A",
815
- "u085B",
816
- "u08E3",
817
- "u08E4",
818
- "u08E5",
819
- "u08E6",
820
- "u08E7",
821
- "u08E8",
822
- "u08E9",
823
- "u08EA",
824
- "u08EB",
825
- "u08EC",
826
- "u08ED",
827
- "u08EE",
828
- "u08EF",
829
- "u08F0",
830
- "u08F1",
831
- "u08F2",
832
- "u08F3",
833
- "u08F4",
834
- "u08F5",
835
- "u08F6",
836
- "u08F7",
837
- "u08F8",
838
- "u08F9",
839
- "u08FA",
840
- "u08FB",
841
- "u08FC",
842
- "u08FD",
843
- "u08FE",
844
- "u08FF",
845
- "u0900",
846
- "u0901",
847
- "u0902",
848
- "u093A",
849
- "u093C",
850
- "u0941",
851
- "u0942",
852
- "u0943",
853
- "u0944",
854
- "u0945",
855
- "u0946",
856
- "u0947",
857
- "u0948",
858
- "u094D",
859
- "u0951",
860
- "u0952",
861
- "u0953",
862
- "u0954",
863
- "u0955",
864
- "u0956",
865
- "u0957",
866
- "u0962",
867
- "u0963",
868
- "u0981",
869
- "u09BC",
870
- "u09C1",
871
- "u09C2",
872
- "u09C3",
873
- "u09C4",
874
- "u09CD",
875
- "u09E2",
876
- "u09E3",
877
- "u0A01",
878
- "u0A02",
879
- "u0A3C",
880
- "u0A41",
881
- "u0A42",
882
- "u0A47",
883
- "u0A48",
884
- "u0A4B",
885
- "u0A4C",
886
- "u0A4D",
887
- "u0A51",
888
- "u0A70",
889
- "u0A71",
890
- "u0A75",
891
- "u0A81",
892
- "u0A82",
893
- "u0ABC",
894
- "u0AC1",
895
- "u0AC2",
896
- "u0AC3",
897
- "u0AC4",
898
- "u0AC5",
899
- "u0AC7",
900
- "u0AC8",
901
- "u0ACD",
902
- "u0AE2",
903
- "u0AE3",
904
- "u0B01",
905
- "u0B3C",
906
- "u0B3F",
907
- "u0B41",
908
- "u0B42",
909
- "u0B43",
910
- "u0B44",
911
- "u0B4D",
912
- "u0B56",
913
- "u0B62",
914
- "u0B63",
915
- "u0B82",
916
- "u0BC0",
917
- "u0BCD",
918
- "u0C00",
919
- "u0C3E",
920
- "u0C3F",
921
- "u0C40",
922
- "u0C46",
923
- "u0C47",
924
- "u0C48",
925
- "u0C4A",
926
- "u0C4B",
927
- "u0C4C",
928
- "u0C4D",
929
- "u0C55",
930
- "u0C56",
931
- "u0C62",
932
- "u0C63",
933
- "u0C81",
934
- "u0CBC",
935
- "u0CBF",
936
- "u0CC6",
937
- "u0CCC",
938
- "u0CCD",
939
- "u0CE2",
940
- "u0CE3",
941
- "u0D01",
942
- "u0D41",
943
- "u0D42",
944
- "u0D43",
945
- "u0D44",
946
- "u0D4D",
947
- "u0D62",
948
- "u0D63",
949
- "u0DCA",
950
- "u0DD2",
951
- "u0DD3",
952
- "u0DD4",
953
- "u0DD6",
954
- "u0E31",
955
- "u0E34",
956
- "u0E35",
957
- "u0E36",
958
- "u0E37",
959
- "u0E38",
960
- "u0E39",
961
- "u0E3A",
962
- "u0E47",
963
- "u0E48",
964
- "u0E49",
965
- "u0E4A",
966
- "u0E4B",
967
- "u0E4C",
968
- "u0E4D",
969
- "u0E4E",
970
- "u0EB1",
971
- "u0EB4",
972
- "u0EB5",
973
- "u0EB6",
974
- "u0EB7",
975
- "u0EB8",
976
- "u0EB9",
977
- "u0EBB",
978
- "u0EBC",
979
- "u0EC8",
980
- "u0EC9",
981
- "u0ECA",
982
- "u0ECB",
983
- "u0ECC",
984
- "u0ECD",
985
- "u0F18",
986
- "u0F19",
987
- "u0F35",
988
- "u0F37",
989
- "u0F39",
990
- "u0F71",
991
- "u0F72",
992
- "u0F73",
993
- "u0F74",
994
- "u0F75",
995
- "u0F76",
996
- "u0F77",
997
- "u0F78",
998
- "u0F79",
999
- "u0F7A",
1000
- "u0F7B",
1001
- "u0F7C",
1002
- "u0F7D",
1003
- "u0F7E",
1004
- "u0F80",
1005
- "u0F81",
1006
- "u0F82",
1007
- "u0F83",
1008
- "u0F84",
1009
- "u0F86",
1010
- "u0F87",
1011
- "u0F8D",
1012
- "u0F8E",
1013
- "u0F8F",
1014
- "u0F90",
1015
- "u0F91",
1016
- "u0F92",
1017
- "u0F93",
1018
- "u0F94",
1019
- "u0F95",
1020
- "u0F96",
1021
- "u0F97",
1022
- "u0F99",
1023
- "u0F9A",
1024
- "u0F9B",
1025
- "u0F9C",
1026
- "u0F9D",
1027
- "u0F9E",
1028
- "u0F9F",
1029
- "u0FA0",
1030
- "u0FA1",
1031
- "u0FA2",
1032
- "u0FA3",
1033
- "u0FA4",
1034
- "u0FA5",
1035
- "u0FA6",
1036
- "u0FA7",
1037
- "u0FA8",
1038
- "u0FA9",
1039
- "u0FAA",
1040
- "u0FAB",
1041
- "u0FAC",
1042
- "u0FAD",
1043
- "u0FAE",
1044
- "u0FAF",
1045
- "u0FB0",
1046
- "u0FB1",
1047
- "u0FB2",
1048
- "u0FB3",
1049
- "u0FB4",
1050
- "u0FB5",
1051
- "u0FB6",
1052
- "u0FB7",
1053
- "u0FB8",
1054
- "u0FB9",
1055
- "u0FBA",
1056
- "u0FBB",
1057
- "u0FBC",
1058
- "u0FC6",
1059
- "u102D",
1060
- "u102E",
1061
- "u102F",
1062
- "u1030",
1063
- "u1032",
1064
- "u1033",
1065
- "u1034",
1066
- "u1035",
1067
- "u1036",
1068
- "u1037",
1069
- "u1039",
1070
- "u103A",
1071
- "u103D",
1072
- "u103E",
1073
- "u1058",
1074
- "u1059",
1075
- "u105E",
1076
- "u105F",
1077
- "u1060",
1078
- "u1071",
1079
- "u1072",
1080
- "u1073",
1081
- "u1074",
1082
- "u1082",
1083
- "u1085",
1084
- "u1086",
1085
- "u108D",
1086
- "u109D",
1087
- "u135D",
1088
- "u135E",
1089
- "u135F",
1090
- "u1712",
1091
- "u1713",
1092
- "u1714",
1093
- "u1732",
1094
- "u1733",
1095
- "u1734",
1096
- "u1752",
1097
- "u1753",
1098
- "u1772",
1099
- "u1773",
1100
- "u17B4",
1101
- "u17B5",
1102
- "u17B7",
1103
- "u17B8",
1104
- "u17B9",
1105
- "u17BA",
1106
- "u17BB",
1107
- "u17BC",
1108
- "u17BD",
1109
- "u17C6",
1110
- "u17C9",
1111
- "u17CA",
1112
- "u17CB",
1113
- "u17CC",
1114
- "u17CD",
1115
- "u17CE",
1116
- "u17CF",
1117
- "u17D0",
1118
- "u17D1",
1119
- "u17D2",
1120
- "u17D3",
1121
- "u17DD",
1122
- "u180B",
1123
- "u180C",
1124
- "u180D",
1125
- "u18A9",
1126
- "u1920",
1127
- "u1921",
1128
- "u1922",
1129
- "u1927",
1130
- "u1928",
1131
- "u1932",
1132
- "u1939",
1133
- "u193A",
1134
- "u193B",
1135
- "u1A17",
1136
- "u1A18",
1137
- "u1A1B",
1138
- "u1A56",
1139
- "u1A58",
1140
- "u1A59",
1141
- "u1A5A",
1142
- "u1A5B",
1143
- "u1A5C",
1144
- "u1A5D",
1145
- "u1A5E",
1146
- "u1A60",
1147
- "u1A62",
1148
- "u1A65",
1149
- "u1A66",
1150
- "u1A67",
1151
- "u1A68",
1152
- "u1A69",
1153
- "u1A6A",
1154
- "u1A6B",
1155
- "u1A6C",
1156
- "u1A73",
1157
- "u1A74",
1158
- "u1A75",
1159
- "u1A76",
1160
- "u1A77",
1161
- "u1A78",
1162
- "u1A79",
1163
- "u1A7A",
1164
- "u1A7B",
1165
- "u1A7C",
1166
- "u1A7F",
1167
- "u1AB0",
1168
- "u1AB1",
1169
- "u1AB2",
1170
- "u1AB3",
1171
- "u1AB4",
1172
- "u1AB5",
1173
- "u1AB6",
1174
- "u1AB7",
1175
- "u1AB8",
1176
- "u1AB9",
1177
- "u1ABA",
1178
- "u1ABB",
1179
- "u1ABC",
1180
- "u1ABD",
1181
- "u1B00",
1182
- "u1B01",
1183
- "u1B02",
1184
- "u1B03",
1185
- "u1B34",
1186
- "u1B36",
1187
- "u1B37",
1188
- "u1B38",
1189
- "u1B39",
1190
- "u1B3A",
1191
- "u1B3C",
1192
- "u1B42",
1193
- "u1B6B",
1194
- "u1B6C",
1195
- "u1B6D",
1196
- "u1B6E",
1197
- "u1B6F",
1198
- "u1B70",
1199
- "u1B71",
1200
- "u1B72",
1201
- "u1B73",
1202
- "u1B80",
1203
- "u1B81",
1204
- "u1BA2",
1205
- "u1BA3",
1206
- "u1BA4",
1207
- "u1BA5",
1208
- "u1BA8",
1209
- "u1BA9",
1210
- "u1BAB",
1211
- "u1BAC",
1212
- "u1BAD",
1213
- "u1BE6",
1214
- "u1BE8",
1215
- "u1BE9",
1216
- "u1BED",
1217
- "u1BEF",
1218
- "u1BF0",
1219
- "u1BF1",
1220
- "u1C2C",
1221
- "u1C2D",
1222
- "u1C2E",
1223
- "u1C2F",
1224
- "u1C30",
1225
- "u1C31",
1226
- "u1C32",
1227
- "u1C33",
1228
- "u1C36",
1229
- "u1C37",
1230
- "u1CD0",
1231
- "u1CD1",
1232
- "u1CD2",
1233
- "u1CD4",
1234
- "u1CD5",
1235
- "u1CD6",
1236
- "u1CD7",
1237
- "u1CD8",
1238
- "u1CD9",
1239
- "u1CDA",
1240
- "u1CDB",
1241
- "u1CDC",
1242
- "u1CDD",
1243
- "u1CDE",
1244
- "u1CDF",
1245
- "u1CE0",
1246
- "u1CE2",
1247
- "u1CE3",
1248
- "u1CE4",
1249
- "u1CE5",
1250
- "u1CE6",
1251
- "u1CE7",
1252
- "u1CE8",
1253
- "u1CED",
1254
- "u1CF4",
1255
- "u1CF8",
1256
- "u1CF9",
1257
- "u1DC0",
1258
- "u1DC1",
1259
- "u1DC2",
1260
- "u1DC3",
1261
- "u1DC4",
1262
- "u1DC5",
1263
- "u1DC6",
1264
- "u1DC7",
1265
- "u1DC8",
1266
- "u1DC9",
1267
- "u1DCA",
1268
- "u1DCB",
1269
- "u1DCC",
1270
- "u1DCD",
1271
- "u1DCE",
1272
- "u1DCF",
1273
- "u1DD0",
1274
- "u1DD1",
1275
- "u1DD2",
1276
- "u1DD3",
1277
- "u1DD4",
1278
- "u1DD5",
1279
- "u1DD6",
1280
- "u1DD7",
1281
- "u1DD8",
1282
- "u1DD9",
1283
- "u1DDA",
1284
- "u1DDB",
1285
- "u1DDC",
1286
- "u1DDD",
1287
- "u1DDE",
1288
- "u1DDF",
1289
- "u1DE0",
1290
- "u1DE1",
1291
- "u1DE2",
1292
- "u1DE3",
1293
- "u1DE4",
1294
- "u1DE5",
1295
- "u1DE6",
1296
- "u1DE7",
1297
- "u1DE8",
1298
- "u1DE9",
1299
- "u1DEA",
1300
- "u1DEB",
1301
- "u1DEC",
1302
- "u1DED",
1303
- "u1DEE",
1304
- "u1DEF",
1305
- "u1DF0",
1306
- "u1DF1",
1307
- "u1DF2",
1308
- "u1DF3",
1309
- "u1DF4",
1310
- "u1DF5",
1311
- "u1DFC",
1312
- "u1DFD",
1313
- "u1DFE",
1314
- "u1DFF",
1315
- "u20D0",
1316
- "u20D1",
1317
- "u20D2",
1318
- "u20D3",
1319
- "u20D4",
1320
- "u20D5",
1321
- "u20D6",
1322
- "u20D7",
1323
- "u20D8",
1324
- "u20D9",
1325
- "u20DA",
1326
- "u20DB",
1327
- "u20DC",
1328
- "u20E1",
1329
- "u20E5",
1330
- "u20E6",
1331
- "u20E7",
1332
- "u20E8",
1333
- "u20E9",
1334
- "u20EA",
1335
- "u20EB",
1336
- "u20EC",
1337
- "u20ED",
1338
- "u20EE",
1339
- "u20EF",
1340
- "u20F0",
1341
- "u2CEF",
1342
- "u2CF0",
1343
- "u2CF1",
1344
- "u2D7F",
1345
- "u2DE0",
1346
- "u2DE1",
1347
- "u2DE2",
1348
- "u2DE3",
1349
- "u2DE4",
1350
- "u2DE5",
1351
- "u2DE6",
1352
- "u2DE7",
1353
- "u2DE8",
1354
- "u2DE9",
1355
- "u2DEA",
1356
- "u2DEB",
1357
- "u2DEC",
1358
- "u2DED",
1359
- "u2DEE",
1360
- "u2DEF",
1361
- "u2DF0",
1362
- "u2DF1",
1363
- "u2DF2",
1364
- "u2DF3",
1365
- "u2DF4",
1366
- "u2DF5",
1367
- "u2DF6",
1368
- "u2DF7",
1369
- "u2DF8",
1370
- "u2DF9",
1371
- "u2DFA",
1372
- "u2DFB",
1373
- "u2DFC",
1374
- "u2DFD",
1375
- "u2DFE",
1376
- "u2DFF",
1377
- "u302A",
1378
- "u302B",
1379
- "u302C",
1380
- "u302D",
1381
- "u3099",
1382
- "u309A",
1383
- "uA66F",
1384
- "uA674",
1385
- "uA675",
1386
- "uA676",
1387
- "uA677",
1388
- "uA678",
1389
- "uA679",
1390
- "uA67A",
1391
- "uA67B",
1392
- "uA67C",
1393
- "uA67D",
1394
- "uA69E",
1395
- "uA69F",
1396
- "uA6F0",
1397
- "uA6F1",
1398
- "uA802",
1399
- "uA806",
1400
- "uA80B",
1401
- "uA825",
1402
- "uA826",
1403
- "uA8C4",
1404
- "uA8E0",
1405
- "uA8E1",
1406
- "uA8E2",
1407
- "uA8E3",
1408
- "uA8E4",
1409
- "uA8E5",
1410
- "uA8E6",
1411
- "uA8E7",
1412
- "uA8E8",
1413
- "uA8E9",
1414
- "uA8EA",
1415
- "uA8EB",
1416
- "uA8EC",
1417
- "uA8ED",
1418
- "uA8EE",
1419
- "uA8EF",
1420
- "uA8F0",
1421
- "uA8F1",
1422
- "uA926",
1423
- "uA927",
1424
- "uA928",
1425
- "uA929",
1426
- "uA92A",
1427
- "uA92B",
1428
- "uA92C",
1429
- "uA92D",
1430
- "uA947",
1431
- "uA948",
1432
- "uA949",
1433
- "uA94A",
1434
- "uA94B",
1435
- "uA94C",
1436
- "uA94D",
1437
- "uA94E",
1438
- "uA94F",
1439
- "uA950",
1440
- "uA951",
1441
- "uA980",
1442
- "uA981",
1443
- "uA982",
1444
- "uA9B3",
1445
- "uA9B6",
1446
- "uA9B7",
1447
- "uA9B8",
1448
- "uA9B9",
1449
- "uA9BC",
1450
- "uA9E5",
1451
- "uAA29",
1452
- "uAA2A",
1453
- "uAA2B",
1454
- "uAA2C",
1455
- "uAA2D",
1456
- "uAA2E",
1457
- "uAA31",
1458
- "uAA32",
1459
- "uAA35",
1460
- "uAA36",
1461
- "uAA43",
1462
- "uAA4C",
1463
- "uAA7C",
1464
- "uAAB0",
1465
- "uAAB2",
1466
- "uAAB3",
1467
- "uAAB4",
1468
- "uAAB7",
1469
- "uAAB8",
1470
- "uAABE",
1471
- "uAABF",
1472
- "uAAC1",
1473
- "uAAEC",
1474
- "uAAED",
1475
- "uAAF6",
1476
- "uABE5",
1477
- "uABE8",
1478
- "uABED",
1479
- "uFB1E",
1480
- "uFE00",
1481
- "uFE01",
1482
- "uFE02",
1483
- "uFE03",
1484
- "uFE04",
1485
- "uFE05",
1486
- "uFE06",
1487
- "uFE07",
1488
- "uFE08",
1489
- "uFE09",
1490
- "uFE0A",
1491
- "uFE0B",
1492
- "uFE0C",
1493
- "uFE0D",
1494
- "uFE0E",
1495
- "uFE0F",
1496
- "uFE20",
1497
- "uFE21",
1498
- "uFE22",
1499
- "uFE23",
1500
- "uFE24",
1501
- "uFE25",
1502
- "uFE26",
1503
- "uFE27",
1504
- "uFE28",
1505
- "uFE29",
1506
- "uFE2A",
1507
- "uFE2B",
1508
- "uFE2C",
1509
- "uFE2D",
1510
- "uFE2E",
1511
- "uFE2F"
1512
- ];
1513
- var combiningMarks = a.concat(b);
1514
-
1515
- const splitChars = [
1516
- "-",
1517
- ";",
1518
- ":",
1519
- "&",
1520
- "|",
1521
- "u0E2F",
1522
- "u0EAF",
1523
- "u0EC6",
1524
- "u0ECC",
1525
- "u104A",
1526
- "u104B",
1527
- "u104C",
1528
- "u104D",
1529
- "u104E",
1530
- "u104F",
1531
- "u2013",
1532
- "u2014",
1533
- "u2027",
1534
- "u3000",
1535
- "u3001",
1536
- "u3002",
1537
- "uFF0C",
1538
- "uFF5E" // wave dash
1539
- ];
1540
- const prefixChars = [
1541
- "'",
1542
- "<",
1543
- "(",
1544
- "{",
1545
- "[",
1546
- "u00AB",
1547
- "u300A",
1548
- "u3008" // left angle bracket
1549
- ];
1550
- const suffixChars = [
1551
- "'",
1552
- ">",
1553
- ")",
1554
- "}",
1555
- "]",
1556
- ".",
1557
- "!",
1558
- "?",
1559
- "/",
1560
- "u00BB",
1561
- "u300B",
1562
- "u3009" // right angle bracket
1563
- ].concat(splitChars);
1564
- const burmeseRange = "\u1000-\u102A\u103F-\u1049\u1050-\u1055";
1565
- const japaneseRange = "\u3040-\u309f\u30a0-\u30ff\uff00-\uff0b\uff0d-\uff5d\uff5f-\uff9f\u3400-\u4dbf";
1566
- const chineseRange = "\u3400-\u9FBF";
1567
- const laoRange = "\u0E81-\u0EAE\u0EB0-\u0EC4\u0EC8-\u0ECB\u0ECD-\u0EDD";
1568
- const noSpaceRange = burmeseRange + chineseRange + japaneseRange + laoRange;
1569
- const splitWords = new RegExp(`(\\${splitChars.join("|\\")})*[^\\s|\\${splitChars.join("|\\")}]*(\\${splitChars.join("|\\")})*`, "g");
1570
- const noSpaceLanguage = new RegExp(`[${noSpaceRange}]`);
1571
- const splitAllChars = new RegExp(`(\\${prefixChars.join("|\\")})*[${noSpaceRange}](\\${suffixChars.join("|\\")}|\\${combiningMarks.join("|\\")})*|[a-z0-9]+`, "gi");
1572
258
  /**
1573
259
  @function textSplit
1574
260
  @desc Splits a given sentence into an array of words.
1575
261
  @param {String} sentence
1576
262
  */ function textSplit(sentence) {
1577
- if (!noSpaceLanguage.test(sentence)) return stringify(sentence).match(splitWords).filter((w)=>w.length);
1578
- return d3Array.merge(stringify(sentence).match(splitWords).map((d)=>{
1579
- if (noSpaceLanguage.test(d)) return d.match(splitAllChars);
1580
- return [
1581
- d
1582
- ];
1583
- }));
263
+ const breaker = new LineBreaker(sentence);
264
+ let bk, last, words = [];
265
+ while(bk = breaker.nextBreak()){
266
+ const word = sentence.slice(last, bk.position);
267
+ words.push(word);
268
+ last = bk.position;
269
+ }
270
+ return words;
1584
271
  }
1585
272
 
1586
273
  /**
@@ -1624,11 +311,11 @@
1624
311
  "line-height": lineHeight
1625
312
  };
1626
313
  let line = 1, textProg = "", truncated = false, widthProg = 0;
1627
- const lineData = [], sizes = dom.textWidth(words, style), space = dom.textWidth(" ", style);
314
+ const lineData = [], sizes = dom.textWidth(words, style);
1628
315
  for(let i = 0; i < words.length; i++){
1629
316
  let word = words[i];
1630
317
  const wordWidth = sizes[words.indexOf(word)];
1631
- word += sentence.slice(textProg.length + word.length).match("^( |\n)*", "g")[0];
318
+ // newline if breaking character or not enough width
1632
319
  if (textProg.slice(-1) === "\n" || widthProg + wordWidth > width) {
1633
320
  if (!i && !overflow) {
1634
321
  truncated = true;
@@ -1646,7 +333,6 @@
1646
333
  else lineData[line - 1] += word;
1647
334
  textProg += word;
1648
335
  widthProg += wordWidth;
1649
- widthProg += word.match(/[\s]*$/g)[0].length * space;
1650
336
  }
1651
337
  return {
1652
338
  lines: lineData,
@@ -1750,7 +436,7 @@
1750
436
  "vs",
1751
437
  "vs."
1752
438
  ];
1753
- const uppercase = [
439
+ const acronyms = [
1754
440
  "CEO",
1755
441
  "CFO",
1756
442
  "CNC",
@@ -1764,30 +450,19 @@
1764
450
  "TV",
1765
451
  "UI"
1766
452
  ];
453
+ const uppercase = acronyms.reduce((arr, d)=>(arr.push(`${d}s`), arr), acronyms.map((d)=>d.toLowerCase()));
1767
454
  /**
1768
455
  @function titleCase
1769
- @desc Capitalizes the first letter of each word in a phrase/sentence.
456
+ @desc Capitalizes the first letter of each word in a phrase/sentence, accounting for words in English that should be kept lowercase such as "and" or "of", as well as acronym that should be kept uppercase such as "CEO" or "TVs".
1770
457
  @param {String} str The string to apply the title case logic.
1771
458
  */ function titleCase(str) {
1772
- if (str === void 0) return "";
1773
- const smalls = lowercase.map((s)=>s.toLowerCase());
1774
- let bigs = uppercase.slice();
1775
- bigs = bigs.concat(bigs.map((b)=>`${b}s`));
1776
- const biglow = bigs.map((b)=>b.toLowerCase());
1777
- const split = textSplit(str);
1778
- return split.map((s, i)=>{
1779
- if (s) {
1780
- const lower = s.toLowerCase();
1781
- const stripped = suffixChars.includes(lower.charAt(lower.length - 1)) ? lower.slice(0, -1) : lower;
1782
- const bigindex = biglow.indexOf(stripped);
1783
- if (bigindex >= 0) return bigs[bigindex];
1784
- else if (smalls.includes(stripped) && i !== 0 && i !== split.length - 1) return lower;
1785
- else return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();
1786
- } else return "";
1787
- }).reduce((ret, s, i)=>{
1788
- if (i && str.charAt(ret.length) === " ") ret += " ";
1789
- ret += s;
1790
- return ret;
459
+ if (str === undefined) return "";
460
+ return textSplit(str).reduce((str, word, i)=>{
461
+ let formattedWord = word;
462
+ const trimmedWord = word.toLowerCase().slice(0, -1);
463
+ const exempt = uppercase.includes(trimmedWord) || lowercase.includes(trimmedWord) && i !== 0 && word.toLowerCase() !== trimmedWord;
464
+ if (!exempt) formattedWord = word.charAt(0).toUpperCase() + word.slice(1);
465
+ return str + formattedWord;
1791
466
  }, "");
1792
467
  }
1793
468