table/namegen.h
changeset 1425 d566470aa3ca
parent 1422 c3bc75035658
child 1427 dde1e3b304dd
equal deleted inserted replaced
1424:c6d120592e98 1425:d566470aa3ca
  1656 	"Vyskov",
  1656 	"Vyskov",
  1657 	"Zdár nad Sázavou",
  1657 	"Zdár nad Sázavou",
  1658 	"Zlín",
  1658 	"Zlín",
  1659 	"Znojmo"
  1659 	"Znojmo"
  1660 };
  1660 };
       
  1661 
       
  1662 
       
  1663 /* The advanced hyperintelligent Czech town names generator! */
       
  1664 
       
  1665 // Sing., pl.
       
  1666 enum CzechGender {
       
  1667 	CZG_SMASC,
       
  1668 	CZG_SFEM,
       
  1669 	CZG_SNEUT,
       
  1670 	CZG_PMASC,
       
  1671 	CZG_PFEM,
       
  1672 	CZG_PNEUT,
       
  1673 	// Special for substantive stems - the ending chooses the gender.
       
  1674 	CZG_FREE,
       
  1675 	// Like CZG_FREE, but disallow CZG_SNEUT.
       
  1676 	CZG_NFREE
       
  1677 };
       
  1678 enum CzechPattern {
       
  1679 	CZP_JARNI,
       
  1680 	CZP_MLADY,
       
  1681 	CZP_PRIVL
       
  1682 };
       
  1683 /* [CzechGender][CzechPattern] - replaces the last character of the adjective
       
  1684  * by this. */
       
  1685 // XXX: [CZG_SMASC][CZP_PRIVL] needs special handling: -ovX -> -uv.
       
  1686 static const char name_czech_patmod[6][3] = {
       
  1687 	/* CZG_SMASC */ { 'í', 'ý', 'X' },
       
  1688 	/* CZG_SFEM */  { 'í', 'á', 'a' },
       
  1689 	/* CZG_SNEUT */ { 'í', 'é', 'o' },
       
  1690 	/* CZG_PMASC */ { 'í', 'é', 'y' },
       
  1691 	/* CZG_PFEM */  { 'í', 'é', 'y' },
       
  1692 	/* CZG_PNEUT */ { 'í', 'á', 'a' }
       
  1693 };
       
  1694 
       
  1695 // This way the substantives can choose only some adjectives/endings:
       
  1696 // At least one of these flags must be satisfied:
       
  1697 enum CzechAllow {
       
  1698 	CZA_SHORT = 1,
       
  1699 	CZA_MIDDLE = 2,
       
  1700 	CZA_LONG = 4,
       
  1701 	CZA_ALL = ~0
       
  1702 };
       
  1703 // All these flags must be satisfied (in the stem->others direction):
       
  1704 enum CzechChoose {
       
  1705 	CZC_NORMAL = 1,
       
  1706 	CZC_COLOR = 2,
       
  1707 	CZC_POSTFIX = 4, // Matched if postfix was inserted.
       
  1708 	CZC_NOPOSTFIX = 8, // Matched if no postfix was inserted.
       
  1709 	CZC_ANY = ~0
       
  1710 };
       
  1711 
       
  1712 struct CzechNameSubst {
       
  1713 	enum CzechGender gender;
       
  1714 	enum CzechAllow allow;
       
  1715 	enum CzechChoose choose;
       
  1716 	const char *name;
       
  1717 };
       
  1718 
       
  1719 struct CzechNameAdj {
       
  1720 	enum CzechPattern pattern;
       
  1721 	enum CzechChoose choose;
       
  1722 	const char *name;
       
  1723 };
       
  1724 
       
  1725 // Some of items which should be common are doubled.
       
  1726 static const struct CzechNameAdj name_czech_adj[] = {
       
  1727 	{ CZP_JARNI, CZC_ANY, "Horní" },
       
  1728 	{ CZP_JARNI, CZC_ANY, "Horní" },
       
  1729 	{ CZP_JARNI, CZC_ANY, "Dolní" },
       
  1730 	{ CZP_JARNI, CZC_ANY, "Dolní" },
       
  1731 	{ CZP_JARNI, CZC_ANY, "Prední" },
       
  1732 	{ CZP_JARNI, CZC_ANY, "Zadní" },
       
  1733 	{ CZP_JARNI, CZC_ANY, "Kostelní" },
       
  1734 	{ CZP_JARNI, CZC_ANY, "Havraní" },
       
  1735 	{ CZP_JARNI, CZC_ANY, "Rícní" },
       
  1736 	{ CZP_MLADY, CZC_ANY, "Velký" },
       
  1737 	{ CZP_MLADY, CZC_ANY, "Velký" },
       
  1738 	{ CZP_MLADY, CZC_ANY, "Malý" },
       
  1739 	{ CZP_MLADY, CZC_ANY, "Malý" },
       
  1740 	{ CZP_MLADY, CZC_ANY, "Vysoký" },
       
  1741 	{ CZP_MLADY, CZC_ANY, "Ceský" },
       
  1742 	{ CZP_MLADY, CZC_ANY, "Moravský" },
       
  1743 	{ CZP_MLADY, CZC_ANY, "Slovácký" },
       
  1744 	{ CZP_MLADY, CZC_ANY, "Uherský" },
       
  1745 	{ CZP_MLADY, CZC_ANY, "Starý" },
       
  1746 	{ CZP_MLADY, CZC_ANY, "Starý" },
       
  1747 	{ CZP_MLADY, CZC_ANY, "Nový" },
       
  1748 	{ CZP_MLADY, CZC_ANY, "Nový" },
       
  1749 	{ CZP_MLADY, CZC_ANY, "Mladý" },
       
  1750 	{ CZP_MLADY, CZC_ANY, "Královský" },
       
  1751 	{ CZP_MLADY, CZC_ANY, "Kamenný" },
       
  1752 	{ CZP_MLADY, CZC_ANY, "Cihlový" },
       
  1753 	{ CZP_MLADY, CZC_ANY, "Divný" },
       
  1754 	{ CZP_MLADY, CZC_COLOR, "Cervená" },
       
  1755 	{ CZP_MLADY, CZC_COLOR, "Cervená" },
       
  1756 	{ CZP_MLADY, CZC_COLOR, "Zelená" },
       
  1757 	{ CZP_MLADY, CZC_COLOR, "Zlutá" },
       
  1758 	{ CZP_MLADY, CZC_COLOR, "Sivá" },
       
  1759 	{ CZP_MLADY, CZC_COLOR, "Sedá" },
       
  1760 	{ CZP_MLADY, CZC_COLOR, "Bílá" },
       
  1761 	{ CZP_MLADY, CZC_COLOR, "Modrá" },
       
  1762 	{ CZP_MLADY, CZC_COLOR, "Ruzová" },
       
  1763 	{ CZP_MLADY, CZC_COLOR, "Cerná" },
       
  1764 	{ CZP_PRIVL, CZC_ANY, "Králova" },
       
  1765 	{ CZP_PRIVL, CZC_ANY, "Janova" },
       
  1766 	{ CZP_PRIVL, CZC_ANY, "Karlova" },
       
  1767 	{ CZP_PRIVL, CZC_ANY, "Jiríkova" },
       
  1768 	{ CZP_PRIVL, CZC_ANY, "Petrova" },
       
  1769 	{ CZP_PRIVL, CZC_ANY, "Sudovo" },
       
  1770 };
       
  1771 
       
  1772 // Considered a stem for choose/allow matching purposes.
       
  1773 static const struct CzechNameSubst name_czech_subst_full[] = {
       
  1774 	{ CZG_SMASC, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Sedlec" },
       
  1775 	{ CZG_SMASC, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Brod" },
       
  1776 	{ CZG_SMASC, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Brod" },
       
  1777 	{ CZG_SMASC, CZA_ALL, CZC_NORMAL, "Úval" },
       
  1778 	{ CZG_SFEM,  CZA_ALL, CZC_NORMAL | CZC_COLOR, "Hora" },
       
  1779 	{ CZG_SFEM,  CZA_ALL, CZC_NORMAL | CZC_COLOR, "Lhota" },
       
  1780 	{ CZG_SFEM,  CZA_ALL, CZC_NORMAL | CZC_COLOR, "Lhota" },
       
  1781 	{ CZG_SFEM,  CZA_ALL, CZC_NORMAL | CZC_COLOR, "Hlava" },
       
  1782 	{ CZG_SNEUT, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Pole" },
       
  1783 	{ CZG_SNEUT, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Zdár" },
       
  1784 	{ CZG_PMASC, CZA_ALL, CZC_NORMAL, "Úvaly" },
       
  1785 	{ CZG_PFEM,  CZA_ALL, CZC_NORMAL | CZC_COLOR, "Luka" },
       
  1786 	{ CZG_PNEUT, CZA_ALL, CZC_NORMAL | CZC_COLOR, "Pole" },
       
  1787 };
       
  1788 
       
  1789 // TODO: More stems needed. --pasky
       
  1790 static const struct CzechNameSubst name_czech_subst_stem[] = {
       
  1791 	{ CZG_SMASC,             CZA_MIDDLE,            CZC_NORMAL | CZC_COLOR, "Kostel" },
       
  1792 	{ CZG_SMASC,             CZA_MIDDLE,            CZC_NORMAL | CZC_COLOR, "Kláster" },
       
  1793 	{ CZG_SMASC, CZA_SHORT,                         CZC_NORMAL | CZC_COLOR, "Lhot" },
       
  1794 	{ CZG_SFEM,  CZA_SHORT,                         CZC_NORMAL | CZC_COLOR, "Lhot" },
       
  1795 	{ CZG_SFEM,  CZA_SHORT,                         CZC_NORMAL | CZC_COLOR, "Hur" },
       
  1796 	{ CZG_FREE,              CZA_MIDDLE | CZA_LONG, CZC_NORMAL, "Sedl" },
       
  1797 	{ CZG_FREE,  CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NORMAL | CZC_COLOR, "Hrad" },
       
  1798 	{ CZG_NFREE,             CZA_MIDDLE,            CZC_NORMAL, "Pras" },
       
  1799 	{ CZG_NFREE,             CZA_MIDDLE,            CZC_NORMAL, "Baz" },
       
  1800 	{ CZG_NFREE,             CZA_MIDDLE,            CZC_NORMAL, "Tes" },
       
  1801 	{ CZG_NFREE,             CZA_MIDDLE,            CZC_NORMAL, "Uz" },
       
  1802 	{ CZG_NFREE,             CZA_MIDDLE | CZA_LONG, CZC_NORMAL, "Br" },
       
  1803 	{ CZG_NFREE,             CZA_MIDDLE | CZA_LONG, CZC_NORMAL, "Vod" },
       
  1804 	{ CZG_NFREE,             CZA_MIDDLE | CZA_LONG, CZC_NORMAL, "Jan" },
       
  1805 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Prach" },
       
  1806 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Kunr" },
       
  1807 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Strak" },
       
  1808 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Vit" },
       
  1809 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Vys" },
       
  1810 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Zat" },
       
  1811 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Zer" },
       
  1812 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Stred" },
       
  1813 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Harv" },
       
  1814 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Pruh" },
       
  1815 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Tach" },
       
  1816 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Písn" },
       
  1817 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Jin" },
       
  1818 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Jes" },
       
  1819 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Jar" },
       
  1820 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Sok" },
       
  1821 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Hod" },
       
  1822 	{ CZG_NFREE,                          CZA_LONG, CZC_NORMAL, "Net" },
       
  1823 	{ CZG_FREE,                           CZA_LONG, CZC_NORMAL, "Praz" },
       
  1824 	{ CZG_FREE,                           CZA_LONG, CZC_NORMAL, "Nerat" },
       
  1825 	{ CZG_FREE,                           CZA_LONG, CZC_NORMAL, "Kral" },
       
  1826 	{ CZG_FREE,                           CZA_LONG, CZC_NORMAL | CZC_NOPOSTFIX, "Pan" },
       
  1827 	{ CZG_FREE,  CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NORMAL, "Odstred" },
       
  1828 	{ CZG_FREE,  CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NORMAL | CZC_COLOR, "Mrat" },
       
  1829 	{ CZG_FREE,                           CZA_LONG, CZC_NORMAL | CZC_COLOR, "Hlav" },
       
  1830 	{ CZG_FREE,  CZA_SHORT | CZA_MIDDLE,            CZC_NORMAL, "Mer" },
       
  1831 };
       
  1832 
       
  1833 // Optional postfix inserted between stem and ending.
       
  1834 static const char *name_czech_subst_postfix[] = {
       
  1835 	"av", "an", "at",
       
  1836 	"ov", "on", "ot",
       
  1837 	"ev", "en", "et",
       
  1838 };
       
  1839 
       
  1840 // This array must have the both neutral genders at the end!
       
  1841 static const struct CzechNameSubst name_czech_subst_ending[] = {
       
  1842 	{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE,            CZC_ANY, "ec" },
       
  1843 	{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE,            CZC_ANY, "ín" },
       
  1844 	{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ov" },
       
  1845 	{ CZG_SMASC, CZA_SHORT       |        CZA_LONG, CZC_ANY, "kov" },
       
  1846 	{ CZG_SMASC,                          CZA_LONG, CZC_POSTFIX, "ín" },
       
  1847 	{ CZG_SMASC,                          CZA_LONG, CZC_POSTFIX, "ník" },
       
  1848 	{ CZG_SFEM,  CZA_SHORT,                         CZC_ANY, "ka" },
       
  1849 	{ CZG_SFEM,              CZA_MIDDLE,            CZC_ANY, "inka" },
       
  1850 	{ CZG_SFEM,              CZA_MIDDLE,            CZC_NOPOSTFIX, "na" },
       
  1851 	{ CZG_SFEM,              CZA_MIDDLE,            CZC_ANY, "ná" },
       
  1852 	{ CZG_SFEM,                           CZA_LONG, CZC_ANY, "ava" },
       
  1853 	{ CZG_PMASC,                          CZA_LONG, CZC_ANY, "íky" },
       
  1854 	{ CZG_PMASC,                          CZA_LONG, CZC_ANY, "upy" },
       
  1855 	{ CZG_PFEM,                           CZA_LONG, CZC_ANY, "avy" },
       
  1856 	{ CZG_PFEM,  CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ice" },
       
  1857 	{ CZG_PNEUT, CZA_SHORT | CZA_MIDDLE,            CZC_ANY, "na" },
       
  1858 	{ CZG_SNEUT, CZA_SHORT | CZA_MIDDLE,            CZC_ANY, "no" },
       
  1859 	{ CZG_SNEUT,                          CZA_LONG, CZC_ANY, "iste" },
       
  1860 };
       
  1861 
       
  1862 static const char *name_czech_suffix[] = {
       
  1863 	"nad Cydlinou",
       
  1864 	"nad Dyjí",
       
  1865 	"nad Jihlavou",
       
  1866 	"nad Labem",
       
  1867 	"nad Lesy",
       
  1868 	"nad Moravou",
       
  1869 	"nad Nisou",
       
  1870 	"nad Odrou",
       
  1871 	"nad Ostravicí",
       
  1872 	"nad Sázavou",
       
  1873 	"nad Vltavou",
       
  1874 	"pod Pradedem",
       
  1875 	"pod Radhostem",
       
  1876 	"pod Rípem",
       
  1877 	"pod Snezkou",
       
  1878 	"pod Spicákem",
       
  1879 	"pod Sedlem",
       
  1880 };
       
  1881 
       
  1882 
  1661 
  1883 
  1662 static const char *name_romanian_real[]= {
  1884 static const char *name_romanian_real[]= {
  1663 	"Adjud",
  1885 	"Adjud",
  1664 	"Alba Iulia",
  1886 	"Alba Iulia",
  1665 	"Alexandria",
  1887 	"Alexandria",