urdu-text-utils 0.1.0 → 0.1.1

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.
package/dist/index.cjs CHANGED
@@ -509,57 +509,622 @@ function highlightUrdu(text, query, wrap = (m) => `<mark>${m}</mark>`) {
509
509
  return out;
510
510
  }
511
511
 
512
- // src/transliterate.ts
512
+ // src/dictionary.ts
513
513
  var WORD_DICTIONARY = {
514
+ // ---- pronouns, determiners, question words ----
515
+ "\u0645\u06CC\u06BA": "mein",
516
+ "\u06C1\u0645": "hum",
517
+ "\u062A\u0645": "tum",
514
518
  "\u0622\u067E": "aap",
519
+ "\u0648\u06C1": "woh",
520
+ "\u06CC\u06C1": "yeh",
521
+ "\u0645\u06CC\u0631\u0627": "mera",
522
+ "\u0645\u06CC\u0631\u06CC": "meri",
523
+ "\u0645\u06CC\u0631\u06D2": "mere",
524
+ "\u06C1\u0645\u0627\u0631\u0627": "hamara",
525
+ "\u06C1\u0645\u0627\u0631\u06CC": "hamari",
526
+ "\u062A\u0645\u06C1\u0627\u0631\u0627": "tumhara",
527
+ "\u062A\u0645\u06C1\u0627\u0631\u06CC": "tumhari",
515
528
  "\u0622\u067E\u06A9\u0627": "aapka",
529
+ "\u0622\u067E\u06A9\u06CC": "aapki",
530
+ "\u0627\u0633": "is",
531
+ "\u0627\u0646": "un",
532
+ "\u0627\u067E\u0646\u0627": "apna",
533
+ "\u0627\u067E\u0646\u06CC": "apni",
534
+ "\u062E\u0648\u062F": "khud",
535
+ "\u06A9\u0648\u0646": "kaun",
536
+ "\u06A9\u06CC\u0627": "kya",
537
+ "\u06A9\u06C1\u0627\u06BA": "kahan",
538
+ "\u06A9\u0628": "kab",
539
+ "\u06A9\u06CC\u0648\u06BA": "kyun",
540
+ "\u06A9\u06CC\u0633\u06D2": "kaisay",
541
+ "\u06A9\u06CC\u0633\u0627": "kaisa",
542
+ "\u06A9\u062A\u0646\u0627": "kitna",
543
+ "\u06A9\u062A\u0646\u06CC": "kitni",
544
+ "\u062C\u0648": "jo",
545
+ "\u062C\u0633": "jis",
546
+ "\u0633\u0628": "sab",
547
+ "\u06A9\u0648\u0626\u06CC": "koi",
548
+ "\u06A9\u0686\u06BE": "kuch",
549
+ "\u06C1\u0631": "har",
550
+ // ---- function words ----
516
551
  "\u0627\u0648\u0631": "aur",
517
- "\u0627\u06CC\u06A9": "aik",
518
- "\u0627\u062D\u0645\u062F": "ahmed",
519
- "\u0627\u0686\u06BE\u0627": "acha",
520
- "\u0628\u06C1\u062A": "bohat",
521
- "\u067E\u0627\u06A9\u0633\u062A\u0627\u0646": "pakistan",
522
- "\u067E\u0627\u0646\u06CC": "paani",
552
+ "\u06CC\u0627": "ya",
553
+ "\u0627\u06AF\u0631": "agar",
554
+ "\u0644\u06CC\u06A9\u0646": "lekin",
555
+ "\u0645\u06AF\u0631": "magar",
556
+ "\u062A\u0648": "to",
557
+ "\u0628\u06BE\u06CC": "bhi",
558
+ "\u0646\u06C1": "na",
559
+ "\u0646\u06C1\u06CC\u06BA": "nahi",
560
+ "\u0645\u062A": "mat",
561
+ "\u06A9\u0627": "ka",
562
+ "\u06A9\u06CC": "ki",
563
+ "\u06A9\u06D2": "ke",
564
+ "\u06A9\u0648": "ko",
565
+ "\u0646\u06D2": "ne",
566
+ "\u0633\u06D2": "se",
523
567
  "\u067E\u0631": "par",
524
- "\u067E\u06C1\u0644\u0627": "pehla",
525
- "\u062A\u0645": "tum",
568
+ "\u062A\u06A9": "tak",
569
+ "\u0644\u06CC\u06D2": "liye",
570
+ "\u0633\u0627\u062A\u06BE": "sath",
571
+ "\u0628\u063A\u06CC\u0631": "baghair",
572
+ "\u0648\u062C\u06C1": "wajah",
573
+ "\u0637\u0631\u062D": "tarah",
574
+ "\u0637\u0631\u0641": "taraf",
575
+ "\u0628\u0627\u0631\u06D2": "baray",
576
+ "\u0628\u0639\u062F": "baad",
577
+ "\u067E\u06C1\u0644\u06D2": "pehlay",
578
+ "\u062F\u0648\u0631\u0627\u0646": "doran",
579
+ "\u062F\u0631\u0645\u06CC\u0627\u0646": "darmiyan",
580
+ // ---- place and direction ----
581
+ "\u06CC\u06C1\u0627\u06BA": "yahan",
582
+ "\u0648\u06C1\u0627\u06BA": "wahan",
583
+ "\u0633\u0627\u0645\u0646\u06D2": "samnay",
584
+ "\u067E\u06CC\u0686\u06BE\u06D2": "peechay",
585
+ "\u0622\u06AF\u06D2": "agay",
586
+ "\u0627\u0648\u067E\u0631": "oopar",
587
+ "\u0646\u06CC\u0686\u06D2": "neechay",
588
+ "\u0627\u0646\u062F\u0631": "andar",
589
+ "\u0628\u0627\u06C1\u0631": "bahar",
590
+ "\u067E\u0627\u0633": "paas",
591
+ "\u062F\u0648\u0631": "door",
592
+ "\u0642\u0631\u06CC\u0628": "qareeb",
593
+ // ---- to be, and tense auxiliaries ----
594
+ "\u06C1\u06D2": "hai",
595
+ "\u06C1\u06CC\u06BA": "hain",
596
+ "\u06C1\u0648\u06BA": "hoon",
597
+ "\u06C1\u0648": "ho",
526
598
  "\u062A\u06BE\u0627": "tha",
527
599
  "\u062A\u06BE\u06CC": "thi",
528
- "\u062D\u0627\u0644": "haal",
529
- "\u062E\u0627\u0646": "khan",
530
- "\u062E\u0648\u0628\u0635\u0648\u0631\u062A": "khoobsurat",
531
- "\u062F\u0646": "din",
532
- "\u0631\u0627\u062A": "raat",
533
- "\u0632\u06CC\u062F": "zaid",
534
- "\u0633\u06D2": "se",
535
- "\u0634\u06C1\u0631": "shehar",
536
- "\u0639\u0644\u06CC": "ali",
537
- "\u06A9\u0627": "ka",
538
- "\u06A9\u062A\u0627\u0628": "kitaab",
539
- "\u06A9\u0631": "kar",
600
+ "\u062A\u06BE\u06D2": "thay",
601
+ "\u062A\u06BE\u06CC\u06BA": "thein",
602
+ "\u06C1\u0648\u06AF\u0627": "hoga",
603
+ "\u06C1\u0648\u06AF\u06CC": "hogi",
604
+ "\u06C1\u0648\u0646\u0627": "hona",
605
+ "\u06C1\u0648\u0627": "hua",
606
+ "\u06C1\u0648\u0626\u06CC": "hui",
607
+ "\u06C1\u0648\u0626\u06D2": "hue",
608
+ // ---- common verbs ----
540
609
  "\u06A9\u0631\u0646\u0627": "karna",
541
- "\u06A9\u06D2": "ke",
542
- "\u06A9\u06CC": "ki",
543
- "\u06A9\u06CC\u0627": "kya",
544
- "\u06A9\u06CC\u0633\u06D2": "kaisay",
610
+ "\u06A9\u0631\u062A\u0627": "karta",
611
+ "\u06A9\u0631\u062A\u06CC": "karti",
612
+ "\u06A9\u0631\u062A\u06D2": "karte",
613
+ "\u06A9\u0631\u06CC\u06BA": "karain",
614
+ "\u06A9\u0631\u0648": "karo",
615
+ "\u06A9\u0631": "kar",
616
+ "\u062C\u0627\u0646\u0627": "jana",
617
+ "\u062C\u0627\u062A\u0627": "jata",
618
+ "\u062C\u0627\u062A\u06CC": "jati",
619
+ "\u062C\u0627\u062A\u06D2": "jate",
620
+ "\u062C\u0627\u0626\u06D2": "jaye",
621
+ "\u062C\u0627\u0624": "jao",
622
+ "\u06AF\u06CC\u0627": "gaya",
623
+ "\u06AF\u0626\u06CC": "gayi",
624
+ "\u06AF\u0626\u06D2": "gaye",
625
+ "\u0622\u0646\u0627": "aana",
626
+ "\u0622\u062A\u0627": "aata",
627
+ "\u0622\u062A\u06CC": "aati",
628
+ "\u0622\u06CC\u0627": "aaya",
629
+ "\u0622\u0626\u06CC": "aayi",
630
+ "\u062F\u06CC\u0646\u0627": "dena",
631
+ "\u062F\u06CC\u0627": "diya",
632
+ "\u062F\u06D2": "de",
633
+ "\u062F\u0648": "do",
634
+ "\u0644\u06CC\u0646\u0627": "lena",
635
+ "\u0644\u06CC\u0627": "liya",
636
+ "\u0644\u06D2": "le",
637
+ "\u06A9\u06C1\u0646\u0627": "kehna",
638
+ "\u06A9\u06C1\u0627": "kaha",
639
+ "\u06A9\u06C1\u062A\u0627": "kehta",
640
+ "\u06A9\u06C1\u062A\u06D2": "kehte",
641
+ "\u062F\u06CC\u06A9\u06BE\u0646\u0627": "dekhna",
642
+ "\u062F\u06CC\u06A9\u06BE\u0627": "dekha",
643
+ "\u062F\u06CC\u06A9\u06BE\u0648": "dekho",
644
+ "\u062F\u06CC\u06A9\u06BE\u062A\u0627": "dekhta",
645
+ "\u0633\u0646\u0646\u0627": "sunna",
646
+ "\u0633\u0646\u0627": "suna",
647
+ "\u0633\u0646\u0648": "suno",
648
+ "\u0628\u0648\u0644\u0646\u0627": "bolna",
649
+ "\u0628\u0648\u0644\u0627": "bola",
650
+ "\u067E\u0691\u06BE\u0646\u0627": "parhna",
651
+ "\u067E\u0691\u06BE\u0627": "parha",
652
+ "\u067E\u0691\u06BE\u062A\u0627": "parhta",
653
+ "\u0644\u06A9\u06BE\u0646\u0627": "likhna",
654
+ "\u0644\u06A9\u06BE\u0627": "likha",
655
+ "\u0633\u0645\u062C\u06BE\u0646\u0627": "samajhna",
656
+ "\u0633\u0645\u062C\u06BE\u0627": "samjha",
657
+ "\u0633\u0645\u062C\u06BE": "samajh",
658
+ "\u062C\u0627\u0646\u0646\u0627": "janna",
659
+ "\u062C\u0627\u0646\u062A\u0627": "janta",
660
+ "\u062C\u0627\u0646\u062A\u06D2": "jante",
661
+ "\u0645\u0639\u0644\u0648\u0645": "maloom",
662
+ "\u0686\u0627\u06C1\u0646\u0627": "chahna",
663
+ "\u0686\u0627\u06C1\u062A\u0627": "chahta",
664
+ "\u0686\u0627\u06C1\u06CC\u06D2": "chahiye",
665
+ "\u0633\u06A9\u0646\u0627": "sakna",
666
+ "\u0633\u06A9\u062A\u0627": "sakta",
667
+ "\u0633\u06A9\u062A\u06CC": "sakti",
668
+ "\u0633\u06A9\u062A\u06D2": "sakte",
669
+ "\u0631\u06C1\u0646\u0627": "rehna",
670
+ "\u0631\u06C1\u0627": "raha",
671
+ "\u0631\u06C1\u06CC": "rahi",
672
+ "\u0631\u06C1\u06D2": "rahe",
673
+ "\u0631\u06C1\u062A\u0627": "rehta",
674
+ "\u0628\u0646\u0646\u0627": "banna",
675
+ "\u0628\u0646\u0627\u0646\u0627": "banana",
676
+ "\u0628\u0646\u0627\u06CC\u0627": "banaya",
677
+ "\u0628\u0646\u0627": "bana",
678
+ "\u0645\u0644\u0646\u0627": "milna",
679
+ "\u0645\u0644\u0627": "mila",
680
+ "\u0645\u0644\u062A\u0627": "milta",
681
+ "\u0645\u0644\u06CC": "mili",
682
+ "\u06A9\u06BE\u0627\u0646\u0627": "khana",
683
+ "\u06A9\u06BE\u0627\u06CC\u0627": "khaya",
684
+ "\u067E\u06CC\u0646\u0627": "peena",
685
+ "\u067E\u06CC\u0627": "piya",
686
+ "\u0633\u0648\u0646\u0627": "sona",
687
+ "\u0627\u0679\u06BE\u0646\u0627": "uthna",
688
+ "\u0628\u06CC\u0679\u06BE\u0646\u0627": "baithna",
689
+ "\u0628\u06CC\u0679\u06BE\u0648": "baitho",
690
+ "\u0686\u0644\u0646\u0627": "chalna",
691
+ "\u0686\u0644\u0627": "chala",
692
+ "\u0686\u0644\u0648": "chalo",
693
+ "\u062F\u0648\u0691\u0646\u0627": "daurna",
694
+ "\u0628\u06BE\u0627\u06AF\u0646\u0627": "bhagna",
695
+ "\u0644\u0627\u0646\u0627": "lana",
696
+ "\u0644\u0627\u06CC\u0627": "laya",
697
+ "\u0631\u06A9\u06BE\u0646\u0627": "rakhna",
698
+ "\u0631\u06A9\u06BE\u0627": "rakha",
699
+ "\u0645\u0627\u0646\u06AF\u0646\u0627": "mangna",
700
+ "\u067E\u0648\u0686\u06BE\u0646\u0627": "poochna",
701
+ "\u067E\u0648\u0686\u06BE\u0627": "poocha",
702
+ "\u0628\u062A\u0627\u0646\u0627": "batana",
703
+ "\u0628\u062A\u0627\u06CC\u0627": "bataya",
704
+ "\u0628\u062A\u0627\u0624": "batao",
705
+ "\u06A9\u06BE\u0648\u0644\u0646\u0627": "kholna",
706
+ "\u06A9\u06BE\u0644\u0627": "khula",
707
+ "\u0645\u0631\u0646\u0627": "marna",
708
+ "\u062C\u06CC\u0646\u0627": "jeena",
709
+ // Oblique infinitives, extremely common before postpositions (کرنے کے لیے).
710
+ "\u06A9\u0631\u0646\u06D2": "karne",
711
+ "\u062C\u0627\u0646\u06D2": "jane",
712
+ "\u06C1\u0648\u0646\u06D2": "hone",
713
+ "\u062F\u06CC\u0646\u06D2": "dene",
714
+ "\u0644\u06CC\u0646\u06D2": "lene",
715
+ "\u06A9\u06C1\u0646\u06D2": "kehne",
716
+ "\u0631\u06C1\u0646\u06D2": "rehne",
717
+ "\u062F\u06CC\u06A9\u06BE\u0646\u06D2": "dekhne",
718
+ "\u067E\u0691\u06BE\u0646\u06D2": "parhne",
719
+ "\u0644\u06A9\u06BE\u0646\u06D2": "likhne",
720
+ "\u0648\u0627\u0644\u0627": "wala",
721
+ "\u0648\u0627\u0644\u06CC": "wali",
722
+ "\u0648\u0627\u0644\u06D2": "walay",
723
+ "\u062D\u0635\u06C1": "hissa",
724
+ "\u0634\u0631\u0648\u0639": "shuru",
725
+ "\u062E\u062A\u0645": "khatam",
726
+ "\u0628\u0646\u062F": "band",
727
+ "\u067E\u06CC\u062F\u0627": "paida",
728
+ // ---- people and society ----
729
+ "\u0622\u062F\u0645\u06CC": "aadmi",
730
+ "\u0639\u0648\u0631\u062A": "aurat",
545
731
  "\u0644\u0691\u06A9\u0627": "larka",
546
732
  "\u0644\u0691\u06A9\u06CC": "larki",
547
- "\u0644\u06CC\u06D2": "liye",
548
- "\u0645\u062D\u0645\u062F": "muhammad",
549
- "\u0645\u0636\u0645\u0648\u0646": "mazmoon",
733
+ "\u0628\u0686\u06C1": "bacha",
734
+ "\u0628\u0686\u06CC": "bachi",
735
+ "\u0628\u0686\u06D2": "bache",
736
+ "\u0645\u0627\u06BA": "maan",
737
+ "\u0628\u0627\u067E": "baap",
738
+ "\u0648\u0627\u0644\u062F": "walid",
739
+ "\u0648\u0627\u0644\u062F\u06C1": "walida",
740
+ "\u0628\u06BE\u0627\u0626\u06CC": "bhai",
741
+ "\u0628\u06C1\u0646": "behan",
742
+ "\u0628\u06CC\u0679\u0627": "beta",
743
+ "\u0628\u06CC\u0679\u06CC": "beti",
744
+ "\u0634\u0627\u062F\u06CC": "shaadi",
745
+ "\u0628\u06CC\u0648\u06CC": "biwi",
746
+ "\u0634\u0648\u06C1\u0631": "shauhar",
747
+ "\u062F\u0648\u0633\u062A": "dost",
748
+ "\u062F\u0634\u0645\u0646": "dushman",
749
+ "\u0627\u0633\u062A\u0627\u062F": "ustad",
750
+ "\u0688\u0627\u06A9\u0679\u0631": "doctor",
751
+ "\u0648\u06A9\u06CC\u0644": "wakeel",
752
+ "\u06A9\u0633\u0627\u0646": "kisan",
753
+ "\u0645\u0632\u062F\u0648\u0631": "mazdoor",
754
+ "\u0633\u067E\u0627\u06C1\u06CC": "sipahi",
755
+ "\u0641\u0648\u062C": "fauj",
756
+ "\u0635\u062F\u0631": "sadar",
757
+ "\u0648\u0632\u06CC\u0631": "wazeer",
758
+ "\u062D\u06A9\u0648\u0645\u062A": "hukumat",
759
+ "\u0639\u0648\u0627\u0645": "awam",
760
+ "\u0644\u0648\u06AF": "log",
761
+ "\u0627\u0646\u0633\u0627\u0646": "insan",
762
+ "\u0645\u0631\u06CC\u0636": "mareez",
763
+ // ---- places ----
764
+ "\u06AF\u06BE\u0631": "ghar",
765
+ "\u06A9\u0645\u0631\u06C1": "kamra",
766
+ "\u062F\u0631\u0648\u0627\u0632\u06C1": "darwaza",
767
+ "\u06A9\u06BE\u0691\u06A9\u06CC": "khirki",
768
+ "\u0686\u06BE\u062A": "chhat",
769
+ "\u062F\u06CC\u0648\u0627\u0631": "deewar",
770
+ "\u0645\u062F\u0631\u0633\u06C1": "madrasa",
771
+ "\u06C1\u0633\u067E\u062A\u0627\u0644": "hospital",
772
+ "\u062F\u06A9\u0627\u0646": "dukan",
773
+ "\u0628\u0627\u0632\u0627\u0631": "bazaar",
774
+ "\u0645\u0633\u062C\u062F": "masjid",
775
+ "\u0634\u06C1\u0631": "shehar",
776
+ "\u06AF\u0627\u0624\u06BA": "gaon",
550
777
  "\u0645\u0644\u06A9": "mulk",
551
- "\u0645\u06CC\u06BA": "mein",
552
- "\u0645\u06CC\u0631\u0627": "mera",
553
- "\u0645\u06CC\u0631\u06CC": "meri",
778
+ "\u062F\u0646\u06CC\u0627": "dunya",
779
+ "\u0631\u0627\u0633\u062A\u06C1": "rasta",
780
+ "\u0633\u0691\u06A9": "sarak",
781
+ "\u067E\u0644": "pul",
782
+ "\u0628\u0627\u063A": "bagh",
783
+ "\u0645\u06CC\u062F\u0627\u0646": "maidan",
784
+ "\u062F\u0641\u062A\u0631": "daftar",
785
+ "\u067E\u0627\u06A9\u0633\u062A\u0627\u0646": "pakistan",
786
+ // ---- English loanwords in everyday Urdu ----
787
+ // These matter most in the reverse direction: the rule engine reads "school"
788
+ // as s-ch-ool and produces سچول, so the pairing has to be explicit.
789
+ "\u0633\u06A9\u0648\u0644": "school",
790
+ "\u06A9\u0627\u0644\u062C": "college",
791
+ "\u06CC\u0648\u0646\u06CC\u0648\u0631\u0633\u0679\u06CC": "university",
792
+ "\u06A9\u0645\u067E\u06CC\u0648\u0679\u0631": "computer",
793
+ "\u0645\u0648\u0628\u0627\u0626\u0644": "mobile",
794
+ "\u0641\u0648\u0646": "phone",
795
+ "\u0627\u0646\u0679\u0631\u0646\u06CC\u0679": "internet",
796
+ "\u0645\u0627\u0631\u06A9\u06CC\u0679": "market",
797
+ "\u0627\u0633\u0679\u06CC\u0634\u0646": "station",
798
+ "\u0628\u0633": "bus",
799
+ "\u0679\u0631\u06CC\u0646": "train",
800
+ "\u0633\u0627\u0626\u06CC\u06A9\u0644": "cycle",
801
+ "\u06C1\u0648\u0679\u0644": "hotel",
802
+ "\u0627\u0646\u062C\u06CC\u0646\u0626\u0631": "engineer",
803
+ "\u067E\u0648\u0644\u06CC\u0633": "police",
804
+ // ---- time and weather ----
805
+ "\u062F\u0646": "din",
806
+ "\u0631\u0627\u062A": "raat",
807
+ "\u0635\u0628\u062D": "subah",
808
+ "\u0634\u0627\u0645": "shaam",
809
+ "\u062F\u0648\u067E\u06C1\u0631": "dopahar",
810
+ "\u0648\u0642\u062A": "waqt",
811
+ "\u06AF\u06BE\u0646\u0679\u06C1": "ghanta",
812
+ "\u06C1\u0641\u062A\u06C1": "hafta",
813
+ "\u0645\u06C1\u06CC\u0646\u06C1": "maheena",
814
+ "\u0633\u0627\u0644": "saal",
815
+ "\u0622\u062C": "aaj",
816
+ "\u06A9\u0644": "kal",
817
+ "\u067E\u0631\u0633\u0648\u06BA": "parson",
818
+ "\u0627\u0628\u06BE\u06CC": "abhi",
819
+ "\u0627\u0628": "ab",
820
+ "\u067E\u06BE\u0631": "phir",
821
+ "\u062A\u0628": "tab",
822
+ "\u062C\u0628": "jab",
823
+ "\u0645\u0648\u0633\u0645": "mausam",
824
+ "\u06AF\u0631\u0645\u06CC": "garmi",
825
+ "\u0633\u0631\u062F\u06CC": "sardi",
826
+ "\u0628\u0627\u0631\u0634": "barish",
827
+ // ہوا is both "hua" (happened) and "hawa" (wind/air). The auxiliary is far more
828
+ // frequent in prose, so it wins the forward direction; see ROMAN_VARIANTS for
829
+ // the reverse mapping of "hawa".
830
+ "\u062F\u06BE\u0648\u067E": "dhoop",
831
+ "\u0628\u0627\u062F\u0644": "badal",
832
+ "\u0628\u0631\u0641": "baraf",
833
+ "\u0622\u0633\u0645\u0627\u0646": "asman",
834
+ "\u0632\u0645\u06CC\u0646": "zameen",
835
+ "\u0633\u0648\u0631\u062C": "sooraj",
836
+ "\u0686\u0627\u0646\u062F": "chand",
837
+ "\u0633\u062A\u0627\u0631\u06C1": "sitara",
838
+ // ---- objects, food, transport ----
839
+ "\u06A9\u062A\u0627\u0628": "kitaab",
840
+ "\u0642\u0644\u0645": "qalam",
841
+ "\u06A9\u0627\u063A\u0630": "kaghaz",
842
+ "\u0645\u06CC\u0632": "mez",
843
+ "\u06A9\u0631\u0633\u06CC": "kursi",
844
+ "\u067E\u0627\u0646\u06CC": "paani",
845
+ "\u062F\u0648\u062F\u06BE": "doodh",
846
+ "\u0686\u0627\u0626\u06D2": "chai",
847
+ "\u0631\u0648\u0679\u06CC": "roti",
848
+ "\u0686\u0627\u0648\u0644": "chawal",
849
+ "\u06AF\u0648\u0634\u062A": "gosht",
850
+ "\u0633\u0628\u0632\u06CC": "sabzi",
851
+ "\u067E\u06BE\u0644": "phal",
852
+ "\u0622\u0645": "aam",
853
+ "\u0633\u06CC\u0628": "saib",
854
+ "\u06A9\u06CC\u0644\u0627": "kela",
855
+ "\u0627\u0646\u06AF\u0648\u0631": "angoor",
856
+ "\u0646\u0645\u06A9": "namak",
857
+ "\u0686\u06CC\u0646\u06CC": "cheeni",
858
+ "\u062A\u06CC\u0644": "tel",
859
+ "\u0627\u0646\u0688\u0627": "anda",
860
+ "\u0645\u0686\u06BE\u0644\u06CC": "machhli",
861
+ "\u0645\u0631\u063A\u06CC": "murghi",
862
+ "\u06AF\u0627\u0691\u06CC": "gaari",
863
+ "\u062C\u06C1\u0627\u0632": "jahaz",
864
+ "\u067E\u06CC\u0633\u06C1": "paisa",
865
+ "\u0631\u0648\u067E\u06CC\u06C1": "rupya",
866
+ "\u0646\u0648\u06A9\u0631\u06CC": "naukri",
867
+ "\u06A9\u0627\u0645": "kaam",
868
+ "\u06A9\u0627\u0631\u0648\u0628\u0627\u0631": "karobar",
869
+ "\u0642\u06CC\u0645\u062A": "qeemat",
870
+ "\u062A\u062D\u0641\u06C1": "tohfa",
871
+ "\u06A9\u067E\u0691\u0627": "kapra",
872
+ "\u062C\u0648\u062A\u0627": "joota",
873
+ "\u0679\u0648\u067E\u06CC": "topi",
874
+ "\u0686\u0627\u0628\u06CC": "chabi",
875
+ "\u06AF\u06BE\u0691\u06CC": "ghari",
876
+ "\u0628\u0633\u062A\u0631": "bistar",
877
+ "\u0635\u0627\u0628\u0646": "sabun",
878
+ // ---- feeling and abstraction ----
879
+ "\u0645\u062D\u0628\u062A": "mohabbat",
880
+ "\u067E\u06CC\u0627\u0631": "pyaar",
881
+ "\u062E\u0648\u0634\u06CC": "khushi",
882
+ "\u063A\u0645": "gham",
883
+ "\u062F\u06A9\u06BE": "dukh",
884
+ "\u0688\u0631": "dar",
885
+ "\u062E\u0648\u0641": "khauf",
886
+ "\u0627\u0645\u06CC\u062F": "umeed",
887
+ "\u06CC\u0642\u06CC\u0646": "yaqeen",
888
+ "\u0633\u0686": "sach",
889
+ "\u062C\u06BE\u0648\u0679": "jhoot",
890
+ "\u0627\u0646\u0635\u0627\u0641": "insaf",
891
+ "\u0638\u0644\u0645": "zulm",
892
+ "\u0639\u0632\u062A": "izzat",
893
+ "\u0634\u06A9\u0631\u06CC\u06C1": "shukriya",
894
+ "\u0645\u0639\u0627\u0641": "maaf",
895
+ "\u0645\u0639\u0627\u0641\u06CC": "maafi",
896
+ "\u062F\u0639\u0627": "dua",
897
+ "\u062E\u0648\u0627\u0628": "khwab",
898
+ "\u0632\u0646\u062F\u06AF\u06CC": "zindagi",
899
+ "\u0645\u0648\u062A": "maut",
900
+ "\u0635\u062D\u062A": "sehat",
901
+ "\u0628\u06CC\u0645\u0627\u0631\u06CC": "beemari",
902
+ "\u062F\u0648\u0627": "dawa",
903
+ "\u0637\u0627\u0642\u062A": "taqat",
904
+ "\u06A9\u0645\u0632\u0648\u0631\u06CC": "kamzori",
905
+ "\u0636\u0631\u0648\u0631\u062A": "zaroorat",
906
+ "\u0645\u062F\u062F": "madad",
907
+ "\u06A9\u0648\u0634\u0634": "koshish",
908
+ "\u06A9\u0627\u0645\u06CC\u0627\u0628\u06CC": "kamyabi",
909
+ "\u0646\u0627\u06A9\u0627\u0645\u06CC": "nakami",
910
+ "\u0641\u06CC\u0635\u0644\u06C1": "faisla",
911
+ "\u0631\u0627\u0626\u06D2": "raye",
912
+ "\u062E\u06CC\u0627\u0644": "khayal",
913
+ "\u0633\u0648\u0686": "soch",
914
+ // ---- knowledge, language, culture ----
915
+ "\u0639\u0644\u0645": "ilm",
916
+ "\u062A\u0639\u0644\u06CC\u0645": "taleem",
917
+ "\u0633\u0628\u0642": "sabaq",
918
+ "\u0627\u0645\u062A\u062D\u0627\u0646": "imtihan",
919
+ "\u0646\u062A\u06CC\u062C\u06C1": "nateeja",
920
+ "\u0645\u0633\u0626\u0644\u06C1": "masla",
921
+ "\u062D\u0644": "hal",
922
+ "\u0633\u0648\u0627\u0644": "sawal",
923
+ "\u062C\u0648\u0627\u0628": "jawab",
924
+ "\u0628\u0627\u062A": "baat",
925
+ "\u0628\u0627\u062A\u06CC\u06BA": "baatein",
926
+ "\u0632\u0628\u0627\u0646": "zuban",
927
+ "\u0644\u0641\u0638": "lafz",
554
928
  "\u0646\u0627\u0645": "naam",
555
- "\u0646\u06C1\u06CC\u06BA": "nahi",
556
- "\u0648\u06C1": "woh",
557
- "\u06C1\u06D2": "hai",
558
- "\u06C1\u06CC\u06BA": "hain",
559
- "\u06C1\u0648": "ho",
560
- "\u06C1\u0648\u06BA": "hoon",
561
- "\u06CC\u06C1": "yeh"
929
+ "\u062E\u0628\u0631": "khabar",
930
+ "\u06A9\u06C1\u0627\u0646\u06CC": "kahani",
931
+ "\u0645\u0636\u0645\u0648\u0646": "mazmoon",
932
+ "\u0634\u0639\u0631": "sher",
933
+ "\u063A\u0632\u0644": "ghazal",
934
+ "\u0627\u062F\u0628": "adab",
935
+ "\u062A\u0627\u0631\u06CC\u062E": "tareekh",
936
+ "\u062B\u0642\u0627\u0641\u062A": "saqafat",
937
+ "\u0645\u0648\u0633\u06CC\u0642\u06CC": "moseeqi",
938
+ "\u062A\u0635\u0648\u06CC\u0631": "tasweer",
939
+ "\u0631\u0646\u06AF": "rang",
940
+ "\u0622\u0648\u0627\u0632": "awaz",
941
+ // ---- religion ----
942
+ "\u0646\u0645\u0627\u0632": "namaz",
943
+ "\u0631\u0648\u0632\u06C1": "roza",
944
+ "\u0639\u06CC\u062F": "eid",
945
+ "\u0645\u0630\u06C1\u0628": "mazhab",
946
+ "\u0627\u0633\u0644\u0627\u0645": "islam",
947
+ "\u0627\u0644\u0644\u06C1": "allah",
948
+ "\u0631\u0633\u0648\u0644": "rasool",
949
+ "\u0646\u0628\u06CC": "nabi",
950
+ "\u0642\u0631\u0622\u0646": "quran",
951
+ "\u062F\u06CC\u0646": "deen",
952
+ "\u0627\u06CC\u0645\u0627\u0646": "imaan",
953
+ "\u062C\u0646\u062A": "jannat",
954
+ // ---- body ----
955
+ "\u062F\u0644": "dil",
956
+ "\u062F\u0645\u0627\u063A": "dimagh",
957
+ "\u062C\u0633\u0645": "jism",
958
+ "\u06C1\u0627\u062A\u06BE": "hath",
959
+ "\u067E\u0627\u0624\u06BA": "paon",
960
+ "\u0633\u0631": "sar",
961
+ "\u0622\u0646\u06A9\u06BE": "aankh",
962
+ "\u0622\u0646\u06A9\u06BE\u06CC\u06BA": "aankhein",
963
+ "\u06A9\u0627\u0646": "kaan",
964
+ "\u0646\u0627\u06A9": "naak",
965
+ "\u0645\u0646\u06C1": "munh",
966
+ "\u062F\u0627\u0646\u062A": "daant",
967
+ "\u0628\u0627\u0644": "baal",
968
+ "\u0686\u06C1\u0631\u06C1": "chehra",
969
+ // ---- adjectives ----
970
+ "\u0627\u0686\u06BE\u0627": "acha",
971
+ "\u0627\u0686\u06BE\u06CC": "achi",
972
+ "\u0628\u0631\u0627": "bura",
973
+ "\u0628\u0631\u06CC": "buri",
974
+ "\u0628\u0691\u0627": "bara",
975
+ "\u0628\u0691\u06CC": "bari",
976
+ "\u0686\u06BE\u0648\u0679\u0627": "chhota",
977
+ "\u0686\u06BE\u0648\u0679\u06CC": "chhoti",
978
+ "\u0646\u06CC\u0627": "naya",
979
+ "\u0646\u0626\u06CC": "nayi",
980
+ "\u067E\u0631\u0627\u0646\u0627": "purana",
981
+ "\u0644\u0645\u0628\u0627": "lamba",
982
+ "\u0645\u0648\u0679\u0627": "mota",
983
+ "\u067E\u062A\u0644\u0627": "patla",
984
+ "\u062A\u06CC\u0632": "tez",
985
+ "\u0622\u06C1\u0633\u062A\u06C1": "ahista",
986
+ "\u06AF\u0631\u0645": "garam",
987
+ "\u0679\u06BE\u0646\u0688\u0627": "thanda",
988
+ "\u0645\u06CC\u0679\u06BE\u0627": "meetha",
989
+ "\u06A9\u0691\u0648\u0627": "karwa",
990
+ "\u0635\u0627\u0641": "saaf",
991
+ "\u06AF\u0646\u062F\u0627": "ganda",
992
+ "\u062E\u0627\u0644\u06CC": "khali",
993
+ "\u0628\u06BE\u0631\u0627": "bhara",
994
+ "\u0645\u0634\u06A9\u0644": "mushkil",
995
+ "\u0622\u0633\u0627\u0646": "aasan",
996
+ "\u0636\u0631\u0648\u0631\u06CC": "zaroori",
997
+ "\u0645\u06A9\u0645\u0644": "mukammal",
998
+ "\u062A\u06CC\u0627\u0631": "tayyar",
999
+ "\u062E\u0648\u0634": "khush",
1000
+ "\u0646\u0627\u0631\u0627\u0636": "naraz",
1001
+ "\u067E\u0631\u06CC\u0634\u0627\u0646": "pareshan",
1002
+ "\u062A\u06BE\u06A9\u0627": "thaka",
1003
+ "\u0628\u06CC\u0645\u0627\u0631": "beemar",
1004
+ "\u0627\u0645\u06CC\u0631": "ameer",
1005
+ "\u063A\u0631\u06CC\u0628": "ghareeb",
1006
+ "\u0645\u0634\u06C1\u0648\u0631": "mashhoor",
1007
+ "\u062E\u0648\u0628\u0635\u0648\u0631\u062A": "khoobsurat",
1008
+ "\u0630\u06C1\u06CC\u0646": "zaheen",
1009
+ "\u0628\u06C1\u0627\u062F\u0631": "bahadur",
1010
+ "\u0633\u0633\u062A": "sust",
1011
+ "\u0645\u062D\u0646\u062A\u06CC": "mehnati",
1012
+ "\u0633\u0686\u0627": "sacha",
1013
+ "\u062C\u06BE\u0648\u0679\u0627": "jhoota",
1014
+ "\u067E\u06CC\u0627\u0631\u0627": "pyara",
1015
+ "\u0639\u062C\u06CC\u0628": "ajeeb",
1016
+ "\u062E\u0627\u0635": "khaas",
1017
+ "\u0639\u0627\u0645": "aam",
1018
+ // ---- numbers and ordinals ----
1019
+ "\u0627\u06CC\u06A9": "aik",
1020
+ "\u062A\u06CC\u0646": "teen",
1021
+ "\u0686\u0627\u0631": "char",
1022
+ "\u067E\u0627\u0646\u0686": "panch",
1023
+ "\u0686\u06BE": "chhe",
1024
+ "\u0633\u0627\u062A": "saat",
1025
+ "\u0622\u0679\u06BE": "aath",
1026
+ "\u0646\u0648": "nau",
1027
+ "\u062F\u0633": "das",
1028
+ "\u06AF\u06CC\u0627\u0631\u06C1": "gyarah",
1029
+ "\u0628\u0627\u0631\u06C1": "barah",
1030
+ "\u0628\u06CC\u0633": "bees",
1031
+ "\u067E\u0686\u0627\u0633": "pachas",
1032
+ "\u0633\u0648": "so",
1033
+ "\u06C1\u0632\u0627\u0631": "hazar",
1034
+ "\u0644\u0627\u06A9\u06BE": "lakh",
1035
+ "\u06A9\u0631\u0648\u0691": "karor",
1036
+ "\u067E\u06C1\u0644\u0627": "pehla",
1037
+ "\u062F\u0648\u0633\u0631\u0627": "dosra",
1038
+ "\u062A\u06CC\u0633\u0631\u0627": "teesra",
1039
+ "\u0622\u062E\u0631\u06CC": "aakhri",
1040
+ // ---- greetings and discourse markers ----
1041
+ "\u0633\u0644\u0627\u0645": "salam",
1042
+ "\u062E\u062F\u0627": "khuda",
1043
+ "\u062D\u0627\u0641\u0638": "hafiz",
1044
+ "\u0645\u06C1\u0631\u0628\u0627\u0646\u06CC": "meherbani",
1045
+ "\u0645\u0628\u0627\u0631\u06A9": "mubarak",
1046
+ "\u06C1\u0627\u06BA": "haan",
1047
+ "\u062C\u06CC": "ji",
1048
+ "\u0679\u06BE\u06CC\u06A9": "theek",
1049
+ "\u0628\u0627\u0644\u06A9\u0644": "bilkul",
1050
+ "\u0636\u0631\u0648\u0631": "zaroor",
1051
+ "\u0634\u0627\u06CC\u062F": "shayad",
1052
+ "\u0627\u06A9\u062B\u0631": "aksar",
1053
+ "\u06A9\u0628\u06BE\u06CC": "kabhi",
1054
+ "\u06C1\u0645\u06CC\u0634\u06C1": "hamesha",
1055
+ "\u062C\u0644\u062F\u06CC": "jaldi",
1056
+ "\u062F\u06CC\u0631": "der",
1057
+ "\u0622\u0631\u0627\u0645": "aaram",
1058
+ "\u062A\u06BE\u0648\u0691\u0627": "thora",
1059
+ "\u0632\u06CC\u0627\u062F\u06C1": "ziyada",
1060
+ "\u06A9\u0645": "kam",
1061
+ "\u0628\u06C1\u062A": "bohat",
1062
+ "\u0635\u0631\u0641": "sirf",
1063
+ "\u0648\u0627\u0642\u0639\u06CC": "waqai",
1064
+ // ---- names that appear constantly in Urdu content ----
1065
+ "\u0645\u062D\u0645\u062F": "muhammad",
1066
+ "\u0627\u062D\u0645\u062F": "ahmed",
1067
+ "\u0639\u0644\u06CC": "ali",
1068
+ "\u062E\u0627\u0646": "khan",
1069
+ "\u0632\u06CC\u062F": "zaid",
1070
+ "\u062D\u0633\u0646": "hasan",
1071
+ "\u062D\u0633\u06CC\u0646": "hussain",
1072
+ "\u0641\u0627\u0637\u0645\u06C1": "fatima",
1073
+ "\u0639\u0627\u0626\u0634\u06C1": "ayesha",
1074
+ "\u0639\u0645\u0631": "umar",
1075
+ "\u0628\u0644\u0627\u0644": "bilal",
1076
+ "\u0627\u0633\u0644\u0645": "aslam"
562
1077
  };
1078
+ var ROMAN_VARIANTS = {
1079
+ hay: "\u06C1\u06D2",
1080
+ he: "\u06C1\u06D2",
1081
+ hei: "\u06C1\u06D2",
1082
+ hein: "\u06C1\u06CC\u06BA",
1083
+ hun: "\u06C1\u0648\u06BA",
1084
+ ap: "\u0622\u067E",
1085
+ aapko: "\u0622\u067E\u06A9\u0648",
1086
+ kaise: "\u06A9\u06CC\u0633\u06D2",
1087
+ kese: "\u06A9\u06CC\u0633\u06D2",
1088
+ kaisey: "\u06A9\u06CC\u0633\u06D2",
1089
+ nam: "\u0646\u0627\u0645",
1090
+ mai: "\u0645\u06CC\u06BA",
1091
+ main: "\u0645\u06CC\u06BA",
1092
+ me: "\u0645\u06CC\u06BA",
1093
+ nahin: "\u0646\u06C1\u06CC\u06BA",
1094
+ nai: "\u0646\u06C1\u06CC\u06BA",
1095
+ kia: "\u06A9\u06CC\u0627",
1096
+ kiya: "\u06A9\u06CC\u0627",
1097
+ bahut: "\u0628\u06C1\u062A",
1098
+ bhot: "\u0628\u06C1\u062A",
1099
+ bohot: "\u0628\u06C1\u062A",
1100
+ achha: "\u0627\u0686\u06BE\u0627",
1101
+ achi: "\u0627\u0686\u06BE\u06CC",
1102
+ shukria: "\u0634\u06A9\u0631\u06CC\u06C1",
1103
+ salaam: "\u0633\u0644\u0627\u0645",
1104
+ mohabat: "\u0645\u062D\u0628\u062A",
1105
+ muhabbat: "\u0645\u062D\u0628\u062A",
1106
+ pyar: "\u067E\u06CC\u0627\u0631",
1107
+ zindagi: "\u0632\u0646\u062F\u06AF\u06CC",
1108
+ dost: "\u062F\u0648\u0633\u062A",
1109
+ khush: "\u062E\u0648\u0634",
1110
+ theak: "\u0679\u06BE\u06CC\u06A9",
1111
+ thik: "\u0679\u06BE\u06CC\u06A9",
1112
+ bhai: "\u0628\u06BE\u0627\u0626\u06CC",
1113
+ behen: "\u0628\u06C1\u0646",
1114
+ ammi: "\u0627\u0645\u06CC",
1115
+ abbu: "\u0627\u0628\u0648",
1116
+ paisay: "\u067E\u06CC\u0633\u06D2",
1117
+ kaam: "\u06A9\u0627\u0645",
1118
+ ghar: "\u06AF\u06BE\u0631",
1119
+ // aam is both آم (mango) and عام (common); the fruit is the likelier query.
1120
+ aam: "\u0622\u0645",
1121
+ hawa: "\u06C1\u0648\u0627",
1122
+ // sona is both سونا (to sleep) and سونا (gold) — same spelling, no conflict.
1123
+ ho: "\u06C1\u0648",
1124
+ hoga: "\u06C1\u0648\u06AF\u0627"
1125
+ };
1126
+
1127
+ // src/transliterate.ts
563
1128
  var DIGRAPHS = {
564
1129
  "\u0628\u06BE": "bh",
565
1130
  "\u067E\u06BE": "ph",
@@ -623,16 +1188,18 @@ var LETTERS = {
623
1188
  "\u0624": "o",
624
1189
  "\u06C2": "h"
625
1190
  };
1191
+ var VOWEL_LETTERS = /* @__PURE__ */ new Set(["\u0627", "\u0622", "\u0648", "\u06CC", "\u06D2", "\u0624", "\u0626", "\u06D3", "\u06C2", "\u0639"]);
626
1192
  function romanizeWord(word) {
627
1193
  const dictionary = WORD_DICTIONARY[word];
628
1194
  if (dictionary) return dictionary;
629
1195
  const chars = [...word];
630
- let out = "";
1196
+ const pieces = [];
631
1197
  for (let i = 0; i < chars.length; i++) {
1198
+ const last = i === chars.length - 1;
632
1199
  const pair = chars[i] + (chars[i + 1] ?? "");
633
1200
  const digraph = DIGRAPHS[pair];
634
1201
  if (digraph) {
635
- out += digraph;
1202
+ pieces.push({ text: digraph, vowel: false });
636
1203
  i++;
637
1204
  continue;
638
1205
  }
@@ -640,20 +1207,36 @@ function romanizeWord(word) {
640
1207
  if (i === 0 && ch === "\u0627") {
641
1208
  const next = chars[1];
642
1209
  if (next === "\u0648") {
643
- out += "o";
1210
+ pieces.push({ text: "o", vowel: true });
644
1211
  i++;
645
1212
  continue;
646
1213
  }
647
1214
  if (next === "\u06CC") {
648
- out += "i";
1215
+ pieces.push({ text: "i", vowel: true });
649
1216
  i++;
650
1217
  continue;
651
1218
  }
652
- out += "a";
1219
+ pieces.push({ text: "a", vowel: true });
1220
+ continue;
1221
+ }
1222
+ if (i === 0 && ch === "\u0648") {
1223
+ pieces.push({ text: "w", vowel: false });
1224
+ continue;
1225
+ }
1226
+ if (i === 0 && ch === "\u06CC") {
1227
+ pieces.push({ text: "y", vowel: false });
653
1228
  continue;
654
1229
  }
655
- out += LETTERS[ch] ?? ch;
1230
+ if (last && ch === "\u06C1" && pieces.length > 0) {
1231
+ pieces.push({ text: "a", vowel: true });
1232
+ continue;
1233
+ }
1234
+ pieces.push({ text: LETTERS[ch] ?? ch, vowel: VOWEL_LETTERS.has(ch) });
1235
+ }
1236
+ if (pieces.length > 2 && !pieces[0].vowel && !pieces[1].vowel) {
1237
+ pieces.splice(1, 0, { text: "a", vowel: true });
656
1238
  }
1239
+ const out = pieces.map((p) => p.text).join("");
657
1240
  return out;
658
1241
  }
659
1242
  function romanize(input, options = {}) {
@@ -667,29 +1250,7 @@ var ROMAN_DICTIONARY = {};
667
1250
  for (const [urduWord, roman] of Object.entries(WORD_DICTIONARY)) {
668
1251
  ROMAN_DICTIONARY[roman] = urduWord;
669
1252
  }
670
- Object.assign(ROMAN_DICTIONARY, {
671
- hai: "\u06C1\u06D2",
672
- hay: "\u06C1\u06D2",
673
- he: "\u06C1\u06D2",
674
- hein: "\u06C1\u06CC\u06BA",
675
- hoon: "\u06C1\u0648\u06BA",
676
- hun: "\u06C1\u0648\u06BA",
677
- ap: "\u0622\u067E",
678
- kaise: "\u06A9\u06CC\u0633\u06D2",
679
- kaisa: "\u06A9\u06CC\u0633\u0627",
680
- nam: "\u0646\u0627\u0645",
681
- naam: "\u0646\u0627\u0645",
682
- mai: "\u0645\u06CC\u06BA",
683
- main: "\u0645\u06CC\u06BA",
684
- nahin: "\u0646\u06C1\u06CC\u06BA",
685
- kia: "\u06A9\u06CC\u0627",
686
- bahut: "\u0628\u06C1\u062A",
687
- bhot: "\u0628\u06C1\u062A",
688
- acha: "\u0627\u0686\u06BE\u0627",
689
- achha: "\u0627\u0686\u06BE\u0627",
690
- shukriya: "\u0634\u06A9\u0631\u06CC\u06C1",
691
- salam: "\u0633\u0644\u0627\u0645"
692
- });
1253
+ Object.assign(ROMAN_DICTIONARY, ROMAN_VARIANTS);
693
1254
  var ROMAN_RULES = [
694
1255
  [/^kh/u, "\u06A9\u06BE"],
695
1256
  [/^gh/u, "\u06AF\u06BE"],