GNU-style CLI flags, embedded data, and a literal format grammar #3
@@ -1,3 +1,4 @@
|
|||||||
.claude
|
.claude
|
||||||
*.out
|
*.out
|
||||||
|
__pycache__/
|
||||||
todo.md
|
todo.md
|
||||||
@@ -219,10 +219,11 @@ within a choice:
|
|||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
Only template (object) nodes carry `weight` — a bare string or nested array in a
|
A bare string or nested array in a choice counts as `1`; to weight a string,
|
||||||
choice always counts as `1`. Weights are checked when you create the generator: a
|
write it as `{ "format": "AB", "weight": 3 }`. A repeated item is a load error
|
||||||
negative, non-numeric, or all-zero set is rejected at `New`, so a typo fails
|
naming that spelling, and so is a `weight` of `1`. Weights are checked when you
|
||||||
fast instead of silently skewing output.
|
create the generator: a negative, non-numeric, or all-zero set is rejected at
|
||||||
|
`New`, so a typo fails fast instead of silently skewing output.
|
||||||
|
|
||||||
**Repeat.** A template node may carry a `repeat` (default `1`) to render its
|
**Repeat.** A template node may carry a `repeat` (default `1`) to render its
|
||||||
`format` that many times — each render an independent pick — joined by
|
`format` that many times — each render an independent pick — joined by
|
||||||
@@ -232,14 +233,16 @@ fast instead of silently skewing output.
|
|||||||
{ "format": "{word}", "repeat": 3, "separator": " ", "word": ["foo", "bar", "baz"] }
|
{ "format": "{word}", "repeat": 3, "separator": " ", "word": ["foo", "bar", "baz"] }
|
||||||
```
|
```
|
||||||
|
|
||||||
This yields e.g. `bar foo baz`. `repeat` must be a positive integer and
|
This yields e.g. `bar foo baz`. `repeat` must be an integer above `1` and
|
||||||
`separator` a string, both checked at `New`.
|
`separator` a string, both checked at `New`.
|
||||||
|
|
||||||
`format`, `weight`, `repeat` and `separator` are the only options; **any other key
|
`format`, `weight`, `repeat` and `separator` are the only options; **any other key
|
||||||
is a field**. So write `seperator` and you get a field by that name while the
|
is a field**. So write `seperator` and you get a field by that name while the
|
||||||
option stays unset. `New` rejects an option that cannot take effect — a
|
option stays unset. `New` rejects an option that cannot take effect — a
|
||||||
`separator` without a `repeat` above 1, a `weight` outside a choice — and a name
|
`separator` without a `repeat`, a `weight` outside a choice, a `weight` or
|
||||||
using a character the grammars reserve: `.` separates the segments of a path, `|`
|
`repeat` of `1` — an object holding only a `format` (that is a string; write it),
|
||||||
|
a one-item choice (that is its item; write it), and a name using a character the
|
||||||
|
grammars reserve: `.` separates the segments of a path, `|`
|
||||||
the arms of a token, `(` opens a function call and `{` `}` delimit the token, so a
|
the arms of a token, `(` opens a function call and `{` `}` delimit the token, so a
|
||||||
name carrying one is a name no format could ever spell. An empty name goes the same
|
name carrying one is a name no format could ever spell. An empty name goes the same
|
||||||
way — it is no path segment at all, so `List` never offers it. That holds for a
|
way — it is no path segment at all, so `List` never offers it. That holds for a
|
||||||
@@ -337,7 +340,7 @@ data dirs:
|
|||||||
```
|
```
|
||||||
|
|
||||||
renders e.g. `Hej, Pat Smith!`. References are bound when you create the generator, so
|
renders e.g. `Hej, Pat Smith!`. References are bound when you create the generator, so
|
||||||
a path that is unknown, names a folder, or steps through a multi-variant choice
|
a path that is unknown, names a folder, or steps through a choice
|
||||||
fails at `New`. A reference that leads back to its own value (directly, mutually,
|
fails at `New`. A reference that leads back to its own value (directly, mutually,
|
||||||
or through a chain) is a cycle that would never finish rendering, so it too is
|
or through a chain) is a cycle that would never finish rendering, so it too is
|
||||||
rejected at `New`.
|
rejected at `New`.
|
||||||
@@ -401,7 +404,7 @@ The binding lasts for one expansion, so each `repeat` iteration draws again and
|
|||||||
nested template keeps its own. A field no dotted token addresses is unaffected:
|
nested template keeps its own. A field no dotted token addresses is unaffected:
|
||||||
`{word} {word}` still draws twice.
|
`{word} {word}` still draws twice.
|
||||||
|
|
||||||
`New` checks a path the way `Fake` resolves one: every variant of a multi-variant
|
`New` checks a path the way `Fake` resolves one: every variant of a
|
||||||
choice must carry the whole path, so a row missing a field is named at load:
|
choice must carry the whole path, so a row missing a field is named at load:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
@@ -435,7 +438,6 @@ A lone `}` is a load error naming `}}`.
|
|||||||
**Putting it together** (`person.json`):
|
**Putting it together** (`person.json`):
|
||||||
|
|
||||||
```json
|
```json
|
||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{prefix}{femalefirst|malefirst} {last}",
|
"format": "{prefix}{femalefirst|malefirst} {last}",
|
||||||
"femalefirst": ["Anna", "Astrid", "Elin"],
|
"femalefirst": ["Anna", "Astrid", "Elin"],
|
||||||
@@ -449,7 +451,6 @@ A lone `}` is a load error naming `}}`.
|
|||||||
{ "format": "{string} ", "string": ["dr", "prof"], "weight": 0.05 }
|
{ "format": "{string} ", "string": ["dr", "prof"], "weight": 0.05 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This yields e.g. `Anna Eriksson`, `Erik Berg`, or rarely `dr Astrid von Flemming`.
|
This yields e.g. `Anna Eriksson`, `Erik Berg`, or rarely `dr Astrid von Flemming`.
|
||||||
|
|||||||
+4
-11
@@ -1,24 +1,17 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{street-number} {street}\n{locality}, {region} {postal-code}",
|
"format": "{street-number} {street}\n{locality}, {region} {postal-code}",
|
||||||
"street": [
|
"street": {
|
||||||
{
|
|
||||||
"format": "{name} {suffix}",
|
"format": "{name} {suffix}",
|
||||||
"name": ["Adams", "Ashby", "Aspen", "Bay", "Birch", "Bridge", "Cedar", "Chestnut", "Church", "Clark", "Cypress", "Dogwood", "Elm", "Forest", "Franklin", "Garden", "Grove", "Hawthorn", "Hickory", "Highland", "Jackson", "Jefferson", "Juniper", "Lake", "Laurel", "Liberty", "Lincoln", "Madison", "Magnolia", "Maple", "Market", "Meadow", "Mill", "Oak", "Park", "Pine", "Poplar", "Prospect", "Ridge", "River", "Spruce", "Sunset", "Sycamore", "Union", "Walnut", "Washington", "Willow", "Wilson"],
|
"name": ["Adams", "Ashby", "Aspen", "Bay", "Birch", "Bridge", "Cedar", "Chestnut", "Church", "Clark", "Cypress", "Dogwood", "Elm", "Forest", "Franklin", "Garden", "Grove", "Hawthorn", "Hickory", "Highland", "Jackson", "Jefferson", "Juniper", "Lake", "Laurel", "Liberty", "Lincoln", "Madison", "Magnolia", "Maple", "Market", "Meadow", "Mill", "Oak", "Park", "Pine", "Poplar", "Prospect", "Ridge", "River", "Spruce", "Sunset", "Sycamore", "Union", "Walnut", "Washington", "Willow", "Wilson"],
|
||||||
"suffix": ["Avenue", "Boulevard", "Circle", "Court", "Drive", "Lane", "Place", "Road", "Street", "Terrace", "Trail", "Way"]
|
"suffix": ["Avenue", "Boulevard", "Circle", "Court", "Drive", "Lane", "Place", "Road", "Street", "Terrace", "Trail", "Way"]
|
||||||
}
|
},
|
||||||
],
|
|
||||||
"street-number": [
|
"street-number": [
|
||||||
{ "format": "{int(10,99)}" },
|
"{int(10,99)}",
|
||||||
{ "format": "{int(100,999)}", "weight": 2 },
|
{ "format": "{int(100,999)}", "weight": 2 },
|
||||||
{ "format": "{int(1000,9999)}", "weight": 0.5 },
|
{ "format": "{int(1000,9999)}", "weight": 0.5 },
|
||||||
{ "format": "{int(10,99)}{int(100,999)}", "weight": 0.3 }
|
{ "format": "{int(10,99)}{int(100,999)}", "weight": 0.3 }
|
||||||
],
|
],
|
||||||
"locality": ["Albany", "Atlanta", "Austin", "Baltimore", "Boston", "Charlotte", "Chicago", "Cincinnati", "Cleveland", "Columbus", "Dallas", "Denver", "Detroit", "El Paso", "Fort Worth", "Fresno", "Houston", "Indianapolis", "Jacksonville", "Kansas City", "Las Vegas", "Long Beach", "Los Angeles", "Memphis", "Mesa", "Miami", "Milwaukee", "Minneapolis", "Nashville", "New Orleans", "Oakland", "Oklahoma City", "Omaha", "Orlando", "Philadelphia", "Phoenix", "Pittsburgh", "Portland", "Raleigh", "Sacramento", "San Antonio", "San Diego", "San Jose", "Seattle", "St. Louis", "Tampa", "Tucson", "Tulsa"],
|
"locality": ["Albany", "Atlanta", "Austin", "Baltimore", "Boston", "Charlotte", "Chicago", "Cincinnati", "Cleveland", "Columbus", "Dallas", "Denver", "Detroit", "El Paso", "Fort Worth", "Fresno", "Houston", "Indianapolis", "Jacksonville", "Kansas City", "Las Vegas", "Long Beach", "Los Angeles", "Memphis", "Mesa", "Miami", "Milwaukee", "Minneapolis", "Nashville", "New Orleans", "Oakland", "Oklahoma City", "Omaha", "Orlando", "Philadelphia", "Phoenix", "Pittsburgh", "Portland", "Raleigh", "Sacramento", "San Antonio", "San Diego", "San Jose", "Seattle", "St. Louis", "Tampa", "Tucson", "Tulsa"],
|
||||||
"region": ["AL", "AZ", "CA", "CO", "CT", "FL", "GA", "IL", "IN", "KY", "LA", "MA", "MD", "MI", "MN", "MO", "NC", "NJ", "NV", "NY", "OH", "OK", "OR", "PA", "TN", "TX", "VA", "WA", "WI"],
|
"region": ["AL", "AZ", "CA", "CO", "CT", "FL", "GA", "IL", "IN", "KY", "LA", "MA", "MD", "MI", "MN", "MO", "NC", "NJ", "NV", "NY", "OH", "OK", "OR", "PA", "TN", "TX", "VA", "WA", "WI"],
|
||||||
"postal-code": [
|
"postal-code": ["{int(10000,99999)}", { "format": "{int(10000,99999)}-{digits(4)}", "weight": 0.3 }]
|
||||||
{ "format": "{int(10000,99999)}" },
|
|
||||||
{ "format": "{int(10000,99999)}-{digits(4)}", "weight": 0.3 }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{base} {suffix}",
|
"format": "{base} {suffix}",
|
||||||
"base": [
|
"base": [
|
||||||
@@ -9,6 +8,5 @@
|
|||||||
},
|
},
|
||||||
["Atlas Industries", "Beacon Labs", "Cedar & Vine", "Compass Group", "Evergreen Trading", "Harbor Logistics", "Hudson Partners", "Liberty Holdings", "Meridian Capital", "Northgate Studios", "Pinnacle Systems", "Riverside", "Sequoia Foods", "Smith & Sons", "Stonebridge Ventures", "Sunrise Bakery", "Wexford Holdings"]
|
["Atlas Industries", "Beacon Labs", "Cedar & Vine", "Compass Group", "Evergreen Trading", "Harbor Logistics", "Hudson Partners", "Liberty Holdings", "Meridian Capital", "Northgate Studios", "Pinnacle Systems", "Riverside", "Sequoia Foods", "Smith & Sons", "Stonebridge Ventures", "Sunrise Bakery", "Wexford Holdings"]
|
||||||
],
|
],
|
||||||
"suffix": ["Co.", "Corp.", "Group", "Inc.", "Inc.", "LLC", "LLC", "Ltd."]
|
"suffix": ["Co.", "Corp.", "Group", { "format": "Inc.", "weight": 2 }, { "format": "LLC", "weight": 2 }, "Ltd."]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{month}/{day}/{year}",
|
"format": "{month}/{day}/{year}",
|
||||||
"month": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
|
"month": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
|
||||||
"day": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"],
|
"day": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"],
|
||||||
"year": [
|
"year": [
|
||||||
{ "format": "197{digits(1)}" },
|
"197{digits(1)}",
|
||||||
{ "format": "198{digits(1)}" },
|
"198{digits(1)}",
|
||||||
{ "format": "199{digits(1)}", "weight": 2 },
|
{ "format": "199{digits(1)}", "weight": 2 },
|
||||||
{ "format": "200{digits(1)}", "weight": 3 },
|
{ "format": "200{digits(1)}", "weight": 3 },
|
||||||
{ "format": "201{digits(1)}", "weight": 3 },
|
{ "format": "201{digits(1)}", "weight": 3 },
|
||||||
{ "format": "202{digits(1)}", "weight": 2 }
|
{ "format": "202{digits(1)}", "weight": 2 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{local}@{domain}",
|
"format": "{local}@{domain}",
|
||||||
"local": [
|
"local": [
|
||||||
@@ -7,23 +6,21 @@
|
|||||||
"weight": 3,
|
"weight": 3,
|
||||||
"first": ["alex", "amelia", "andrew", "anna", "ava", "benjamin", "carter", "charlotte", "chloe", "chris", "daniel", "david", "dylan", "elijah", "ella", "emily", "emma", "ethan", "evelyn", "gabriel", "grace", "hannah", "harper", "henry", "isaac", "isabella", "jack", "jacob", "james", "john", "joseph", "julia", "leah", "liam", "linda", "lily", "logan", "lucas", "luke", "mary", "mason", "matthew", "maya", "mia", "michael", "natalie", "noah", "nora", "oliver", "olivia", "owen", "patricia", "robert", "ryan", "samuel", "sarah", "sofia", "sophia", "thomas", "victoria", "william", "zoe"],
|
"first": ["alex", "amelia", "andrew", "anna", "ava", "benjamin", "carter", "charlotte", "chloe", "chris", "daniel", "david", "dylan", "elijah", "ella", "emily", "emma", "ethan", "evelyn", "gabriel", "grace", "hannah", "harper", "henry", "isaac", "isabella", "jack", "jacob", "james", "john", "joseph", "julia", "leah", "liam", "linda", "lily", "logan", "lucas", "luke", "mary", "mason", "matthew", "maya", "mia", "michael", "natalie", "noah", "nora", "oliver", "olivia", "owen", "patricia", "robert", "ryan", "samuel", "sarah", "sofia", "sophia", "thomas", "victoria", "william", "zoe"],
|
||||||
"last": ["adams", "allen", "anderson", "bailey", "baker", "bennett", "brooks", "brown", "campbell", "carter", "clark", "collins", "cook", "cooper", "davis", "edwards", "evans", "fisher", "flores", "foster", "garcia", "gonzalez", "gray", "green", "hall", "harris", "hayes", "hernandez", "hill", "howard", "hughes", "jackson", "jenkins", "johnson", "jones", "kelly", "king", "lee", "lewis", "long", "lopez", "martin", "martinez", "miller", "mitchell", "moore", "morgan", "morris", "murphy", "nelson", "parker", "perez", "perry", "phillips", "powell", "price", "reed", "reyes", "rivera", "roberts", "robinson", "rodriguez", "rogers", "ross", "russell", "sanchez", "sanders", "scott", "smith", "stewart", "sullivan", "taylor", "thomas", "thompson", "torres", "turner", "walker", "ward", "watson", "white", "williams", "wilson", "wood", "wright", "young"],
|
"last": ["adams", "allen", "anderson", "bailey", "baker", "bennett", "brooks", "brown", "campbell", "carter", "clark", "collins", "cook", "cooper", "davis", "edwards", "evans", "fisher", "flores", "foster", "garcia", "gonzalez", "gray", "green", "hall", "harris", "hayes", "hernandez", "hill", "howard", "hughes", "jackson", "jenkins", "johnson", "jones", "kelly", "king", "lee", "lewis", "long", "lopez", "martin", "martinez", "miller", "mitchell", "moore", "morgan", "morris", "murphy", "nelson", "parker", "perez", "perry", "phillips", "powell", "price", "reed", "reyes", "rivera", "roberts", "robinson", "rodriguez", "rogers", "ross", "russell", "sanchez", "sanders", "scott", "smith", "stewart", "sullivan", "taylor", "thomas", "thompson", "torres", "turner", "walker", "ward", "watson", "white", "williams", "wilson", "wood", "wright", "young"],
|
||||||
"sep": [".", ".", "_", "-", ""],
|
"sep": [{ "format": ".", "weight": 2 }, "_", "-", ""],
|
||||||
"n": ["", "", "", "1", "7", "21", "42", "88", "99", "2024"]
|
"n": [{ "format": "", "weight": 3 }, "1", "7", "21", "42", "88", "99", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{adj}{noun}{n}",
|
"format": "{adj}{noun}{n}",
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"adj": ["blue", "cool", "dark", "epic", "fast", "fluffy", "frosty", "funky", "fuzzy", "golden", "grumpy", "happy", "hyper", "jazzy", "lazy", "lucky", "mega", "mighty", "neon", "ninja", "quiet", "rad", "rusty", "salty", "shiny", "silent", "sleepy", "snappy", "sneaky", "spicy", "super", "swift", "turbo", "wild", "witty", "zany"],
|
"adj": ["blue", "cool", "dark", "epic", "fast", "fluffy", "frosty", "funky", "fuzzy", "golden", "grumpy", "happy", "hyper", "jazzy", "lazy", "lucky", "mega", "mighty", "neon", "ninja", "quiet", "rad", "rusty", "salty", "shiny", "silent", "sleepy", "snappy", "sneaky", "spicy", "super", "swift", "turbo", "wild", "witty", "zany"],
|
||||||
"noun": ["badger", "banana", "comet", "dragon", "falcon", "ferret", "goblin", "hamster", "koala", "llama", "mango", "muffin", "narwhal", "ninja", "noodle", "otter", "panda", "penguin", "pickle", "pirate", "pixel", "potato", "pretzel", "raccoon", "raptor", "robot", "taco", "toast", "trunk", "turtle", "unicorn", "viking", "waffle", "walrus", "wizard", "yeti"],
|
"noun": ["badger", "banana", "comet", "dragon", "falcon", "ferret", "goblin", "hamster", "koala", "llama", "mango", "muffin", "narwhal", "ninja", "noodle", "otter", "panda", "penguin", "pickle", "pirate", "pixel", "potato", "pretzel", "raccoon", "raptor", "robot", "taco", "toast", "trunk", "turtle", "unicorn", "viking", "waffle", "walrus", "wizard", "yeti"],
|
||||||
"n": ["", "", "7", "13", "14", "42", "77", "99", "123", "420", "2024"]
|
"n": [{ "format": "", "weight": 2 }, "7", "13", "14", "42", "77", "99", "123", "420", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{w}{n}",
|
"format": "{w}{n}",
|
||||||
"weight": 1,
|
|
||||||
"w": ["blooper", "blupp", "boop", "byteme", "coolcat", "derpina", "doomguy", "epicgamer", "fizzbuzz", "glitchlord", "glorptron", "gronkzilla", "kapowski", "lazerwolf", "megashark", "mooncat", "narfle", "nightowl", "noodlemaster", "oofster", "pixelfox", "pixelpusher", "plonkers", "retrowave", "snork", "splatmaster", "stardust", "superdog", "voidwalker", "vroom", "wahoo", "waooooh", "wootwoot", "yeetus", "zapper", "zoomzoom"],
|
"w": ["blooper", "blupp", "boop", "byteme", "coolcat", "derpina", "doomguy", "epicgamer", "fizzbuzz", "glitchlord", "glorptron", "gronkzilla", "kapowski", "lazerwolf", "megashark", "mooncat", "narfle", "nightowl", "noodlemaster", "oofster", "pixelfox", "pixelpusher", "plonkers", "retrowave", "snork", "splatmaster", "stardust", "superdog", "voidwalker", "vroom", "wahoo", "waooooh", "wootwoot", "yeetus", "zapper", "zoomzoom"],
|
||||||
"n": ["", "", "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
"n": [{ "format": "", "weight": 2 }, "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"domain": ["example.com", "example.org", "example.net", "example.io", "example.co", "example.dev", "example.app", "mail.example.com", "mail.example.org", "webmail.example.net", "inbox.example.com", "post.example.org", "demo.example.net", "test.example.org", "dev.example.io"]
|
"domain": ["example.com", "example.org", "example.net", "example.io", "example.co", "example.dev", "example.app", "mail.example.com", "mail.example.org", "webmail.example.net", "inbox.example.com", "post.example.org", "demo.example.net", "test.example.org", "dev.example.io"]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+7
-5
@@ -2,9 +2,11 @@
|
|||||||
{
|
{
|
||||||
"format": "{o}.{o}.{o}.{o}",
|
"format": "{o}.{o}.{o}.{o}",
|
||||||
"weight": 8,
|
"weight": 8,
|
||||||
"o": [{ "format": "{digits(1)}", "weight": 3 }, { "format": "{int(10,99)}", "weight": 4 }, { "format": "1{digits(2)}", "weight": 2 }]
|
"o": [
|
||||||
},
|
{ "format": "{digits(1)}", "weight": 3 },
|
||||||
{
|
{ "format": "{int(10,99)}", "weight": 4 },
|
||||||
"format": "{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}"
|
{ "format": "1{digits(2)}", "weight": 2 }
|
||||||
}
|
]
|
||||||
|
},
|
||||||
|
"{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}"
|
||||||
]
|
]
|
||||||
|
|||||||
+1
-10
@@ -1,16 +1,7 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{prefix}{femalefirst|malefirst} {last}",
|
"format": "{prefix}{femalefirst|malefirst} {last}",
|
||||||
"femalefirst": ["Abigail", "Addison", "Amelia", "Aria", "Aubrey", "Audrey", "Aurora", "Ava", "Bella", "Brooklyn", "Camila", "Caroline", "Charlotte", "Chloe", "Claire", "Eleanor", "Elizabeth", "Ella", "Ellie", "Emily", "Emma", "Evelyn", "Gianna", "Grace", "Hannah", "Harper", "Hazel", "Isabella", "Layla", "Leah", "Lillian", "Lily", "Lucy", "Luna", "Madison", "Maya", "Mia", "Mila", "Naomi", "Natalie", "Nora", "Olivia", "Paisley", "Penelope", "Riley", "Savannah", "Scarlett", "Sofia", "Sophia", "Stella", "Victoria", "Violet", "Zoe"],
|
"femalefirst": ["Abigail", "Addison", "Amelia", "Aria", "Aubrey", "Audrey", "Aurora", "Ava", "Bella", "Brooklyn", "Camila", "Caroline", "Charlotte", "Chloe", "Claire", "Eleanor", "Elizabeth", "Ella", "Ellie", "Emily", "Emma", "Evelyn", "Gianna", "Grace", "Hannah", "Harper", "Hazel", "Isabella", "Layla", "Leah", "Lillian", "Lily", "Lucy", "Luna", "Madison", "Maya", "Mia", "Mila", "Naomi", "Natalie", "Nora", "Olivia", "Paisley", "Penelope", "Riley", "Savannah", "Scarlett", "Sofia", "Sophia", "Stella", "Victoria", "Violet", "Zoe"],
|
||||||
"malefirst": ["Aiden", "Alexander", "Andrew", "Anthony", "Asher", "Benjamin", "Caleb", "Carter", "Charles", "Christopher", "Daniel", "David", "Dylan", "Elijah", "Ethan", "Ezra", "Gabriel", "Grayson", "Henry", "Isaac", "Jack", "Jackson", "Jacob", "James", "Jayden", "John", "Joseph", "Joshua", "Julian", "Levi", "Liam", "Lincoln", "Logan", "Lucas", "Luke", "Mason", "Mateo", "Matthew", "Michael", "Nathan", "Noah", "Oliver", "Owen", "Samuel", "Sebastian", "Theodore", "Thomas", "William", "Wyatt"],
|
"malefirst": ["Aiden", "Alexander", "Andrew", "Anthony", "Asher", "Benjamin", "Caleb", "Carter", "Charles", "Christopher", "Daniel", "David", "Dylan", "Elijah", "Ethan", "Ezra", "Gabriel", "Grayson", "Henry", "Isaac", "Jack", "Jackson", "Jacob", "James", "Jayden", "John", "Joseph", "Joshua", "Julian", "Levi", "Liam", "Lincoln", "Logan", "Lucas", "Luke", "Mason", "Mateo", "Matthew", "Michael", "Nathan", "Noah", "Oliver", "Owen", "Samuel", "Sebastian", "Theodore", "Thomas", "William", "Wyatt"],
|
||||||
"last": ["Adams", "Allen", "Anderson", "Bailey", "Baker", "Bell", "Bennett", "Brooks", "Brown", "Campbell", "Carter", "Clark", "Collins", "Cook", "Cooper", "Cox", "Davis", "Edwards", "Evans", "Flores", "Foster", "Garcia", "Gonzalez", "Gray", "Green", "Hall", "Harris", "Hayes", "Hernandez", "Hill", "Howard", "Hughes", "Jackson", "James", "Jenkins", "Johnson", "Jones", "Kelly", "King", "Lee", "Lewis", "Long", "Lopez", "Martin", "Martinez", "Miller", "Mitchell", "Moore", "Morgan", "Morris", "Murphy", "Nelson", "Parker", "Perez", "Perry", "Peterson", "Phillips", "Powell", "Price", "Ramirez", "Reed", "Richardson", "Rivera", "Roberts", "Robinson", "Rodriguez", "Rogers", "Ross", "Russell", "Sanchez", "Sanders", "Scott", "Smith", "Stewart", "Sullivan", "Taylor", "Thomas", "Thompson", "Torres", "Turner", "Walker", "Ward", "Watson", "White", "Williams", "Wilson", "Wood", "Wright", "Young"],
|
"last": ["Adams", "Allen", "Anderson", "Bailey", "Baker", "Bell", "Bennett", "Brooks", "Brown", "Campbell", "Carter", "Clark", "Collins", "Cook", "Cooper", "Cox", "Davis", "Edwards", "Evans", "Flores", "Foster", "Garcia", "Gonzalez", "Gray", "Green", "Hall", "Harris", "Hayes", "Hernandez", "Hill", "Howard", "Hughes", "Jackson", "James", "Jenkins", "Johnson", "Jones", "Kelly", "King", "Lee", "Lewis", "Long", "Lopez", "Martin", "Martinez", "Miller", "Mitchell", "Moore", "Morgan", "Morris", "Murphy", "Nelson", "Parker", "Perez", "Perry", "Peterson", "Phillips", "Powell", "Price", "Ramirez", "Reed", "Richardson", "Rivera", "Roberts", "Robinson", "Rodriguez", "Rogers", "Ross", "Russell", "Sanchez", "Sanders", "Scott", "Smith", "Stewart", "Sullivan", "Taylor", "Thomas", "Thompson", "Torres", "Turner", "Walker", "Ward", "Watson", "White", "Williams", "Wilson", "Wood", "Wright", "Young"],
|
||||||
"prefix": [
|
"prefix": ["", { "format": "{title} ", "title": ["Dr", "Miss", "Mr", "Mrs", "Ms", "Mx", "Prof"], "weight": 0.1 }]
|
||||||
"",
|
|
||||||
{
|
|
||||||
"format": "{title} ",
|
|
||||||
"title": ["Dr", "Miss", "Mr", "Mrs", "Ms", "Mx", "Prof"],
|
|
||||||
"weight": 0.1
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
"format": "({area}) {exch}-{line}",
|
"format": "({area}) {exch}-{line}",
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"area": ["202", "212", "213", "305", "312", "404", "415", "469", "503", "512", "602", "617", "646", "702", "718", "720", "737", "773", "786", "808", "917"],
|
"area": ["202", "212", "213", "305", "312", "404", "415", "469", "503", "512", "602", "617", "646", "702", "718", "720", "737", "773", "786", "808", "917"],
|
||||||
"exch": [{ "format": "{int(100,999)}" }],
|
"exch": "{int(100,999)}",
|
||||||
"line": [{ "format": "{digits(4)}" }]
|
"line": "{digits(4)}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{area}-{exch}-{line}",
|
"format": "{area}-{exch}-{line}",
|
||||||
"area": ["202", "212", "213", "305", "312", "404", "415", "469", "503", "512", "602", "617", "646", "702", "718", "720", "737", "773", "786", "808", "917"],
|
"area": ["202", "212", "213", "305", "312", "404", "415", "469", "503", "512", "602", "617", "646", "702", "718", "720", "737", "773", "786", "808", "917"],
|
||||||
"exch": [{ "format": "{int(100,999)}" }],
|
"exch": "{int(100,999)}",
|
||||||
"line": [{ "format": "{digits(4)}" }]
|
"line": "{digits(4)}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,19 +1,12 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "${amt}.{cents}",
|
"format": "${amt}.{cents}",
|
||||||
"amt": [
|
"amt": [
|
||||||
{ "format": "{int(1,9)}", "weight": 2 },
|
{ "format": "{int(1,9)}", "weight": 2 },
|
||||||
{ "format": "{int(10,99)}", "weight": 4 },
|
{ "format": "{int(10,99)}", "weight": 4 },
|
||||||
{ "format": "{int(100,999)}", "weight": 3 },
|
{ "format": "{int(100,999)}", "weight": 3 },
|
||||||
{ "format": "{int(1,9)},{digits(3)}", "weight": 1 },
|
"{int(1,9)},{digits(3)}",
|
||||||
{ "format": "{int(10,99)},{digits(3)}", "weight": 0.4 },
|
{ "format": "{int(10,99)},{digits(3)}", "weight": 0.4 },
|
||||||
{ "format": "{int(100,999)},{digits(3)}", "weight": 0.1 }
|
{ "format": "{int(100,999)},{digits(3)}", "weight": 0.1 }
|
||||||
],
|
],
|
||||||
"cents": [
|
"cents": [{ "format": "{digits(2)}", "weight": 3 }, "49", "95", "99"]
|
||||||
{ "format": "{digits(2)}", "weight": 3 },
|
|
||||||
"49",
|
|
||||||
"95",
|
|
||||||
"99"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"noun": ["anchor", "archer", "beacon", "bridge", "captain", "cavern", "cottage", "ember", "engine", "falcon", "ferry", "forest", "fox", "garden", "glacier", "harbor", "hermit", "hollow", "island", "lantern", "lighthouse", "mariner", "meadow", "mountain", "orchard", "otter", "pilgrim", "prairie", "quarry", "raven", "ridge", "river", "sailor", "scholar", "signal", "sparrow", "stranger", "summit", "thicket", "tower", "traveler", "valley", "voyager", "wanderer", "willow", "woodland"],
|
"noun": ["anchor", "archer", "beacon", "bridge", "captain", "cavern", "cottage", "ember", "engine", "falcon", "ferry", "forest", "fox", "garden", "glacier", "harbor", "hermit", "hollow", "island", "lantern", "lighthouse", "mariner", "meadow", "mountain", "orchard", "otter", "pilgrim", "prairie", "quarry", "raven", "ridge", "river", "sailor", "scholar", "signal", "sparrow", "stranger", "summit", "thicket", "tower", "traveler", "valley", "voyager", "wanderer", "willow", "woodland"],
|
||||||
"verb": ["abandons", "anchors", "awakens", "befriends", "builds", "calms", "carries", "chases", "conceals", "crosses", "embraces", "follows", "gathers", "greets", "guards", "guides", "haunts", "heralds", "honors", "kindles", "leads", "mends", "mirrors", "outlasts", "ponders", "reveals", "salutes", "shapes", "shelters", "shields", "summons", "tends", "traces", "weathers"],
|
"verb": ["abandons", "anchors", "awakens", "befriends", "builds", "calms", "carries", "chases", "conceals", "crosses", "embraces", "follows", "gathers", "greets", "guards", "guides", "haunts", "heralds", "honors", "kindles", "leads", "mends", "mirrors", "outlasts", "ponders", "reveals", "salutes", "shapes", "shelters", "shields", "summons", "tends", "traces", "weathers"],
|
||||||
"prep": ["above", "across", "against", "alongside", "amid", "around", "beneath", "beside", "between", "beyond", "near", "over", "past", "through", "toward", "under", "within"],
|
"prep": ["above", "across", "against", "alongside", "amid", "around", "beneath", "beside", "between", "beyond", "near", "over", "past", "through", "toward", "under", "within"],
|
||||||
"end": [".", ".", ".", ".", "!"]
|
"end": [{ "format": ".", "weight": 4 }, "!"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{lead} {noun} {adv} {verb} {prep} {adj} {noun}{end}",
|
"format": "{lead} {noun} {adv} {verb} {prep} {adj} {noun}{end}",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"verb": ["builds", "carries", "chases", "crosses", "follows", "gathers", "guards", "guides", "leads", "mirrors", "outlasts", "reveals", "shapes", "shelters", "summons", "tends", "traces", "weathers"],
|
"verb": ["builds", "carries", "chases", "crosses", "follows", "gathers", "guards", "guides", "leads", "mirrors", "outlasts", "reveals", "shapes", "shelters", "summons", "tends", "traces", "weathers"],
|
||||||
"adj": ["ancient", "bright", "distant", "fierce", "fragile", "gentle", "golden", "hidden", "lonely", "quiet", "restless", "rugged", "silent", "stormy", "weary", "wild"],
|
"adj": ["ancient", "bright", "distant", "fierce", "fragile", "gentle", "golden", "hidden", "lonely", "quiet", "restless", "rugged", "silent", "stormy", "weary", "wild"],
|
||||||
"prep": ["across", "against", "alongside", "amid", "beneath", "between", "beyond", "near", "over", "past", "through", "toward", "within"],
|
"prep": ["across", "against", "alongside", "amid", "beneath", "between", "beyond", "near", "over", "past", "through", "toward", "within"],
|
||||||
"end": [".", ".", ".", "!"]
|
"end": [{ "format": ".", "weight": 3 }, "!"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{q} {adj} {noun} {verb} {prep} {adj} {noun}?",
|
"format": "{q} {adj} {noun} {verb} {prep} {adj} {noun}?",
|
||||||
|
|||||||
+1
-3
@@ -1,3 +1 @@
|
|||||||
[
|
"{int(100,999)}-{digits(2)}-{digits(4)}"
|
||||||
{ "format": "{int(100,999)}-{digits(2)}-{digits(4)}" }
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{hour}:{minute} {ampm}",
|
"format": "{hour}:{minute} {ampm}",
|
||||||
"hour": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
"hour": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
|
||||||
"minute": [{ "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] }],
|
"minute": { "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] },
|
||||||
"ampm": ["AM", "PM"]
|
"ampm": ["AM", "PM"]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+11
-6
@@ -1,12 +1,17 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "https://{host}{path}",
|
"format": "https://{host}{path}",
|
||||||
"host": ["example.com", "www.example.com", "example.org", "www.example.org", "example.net", "example.io", "example.co", "blog.example.com", "blog.example.net", "shop.example.com", "store.example.org", "app.example.io", "api.example.com", "docs.example.org", "news.example.net", "mail.example.com"],
|
"host": ["example.com", "www.example.com", "example.org", "www.example.org", "example.net", "example.io", "example.co", "blog.example.com", "blog.example.net", "shop.example.com", "store.example.org", "app.example.io", "api.example.com", "docs.example.org", "news.example.net", "mail.example.com"],
|
||||||
"path": [
|
"path": [
|
||||||
"",
|
{ "format": "", "weight": 2 },
|
||||||
"",
|
{
|
||||||
{ "format": "/{seg}", "seg": ["about", "account", "blog", "careers", "cart", "categories", "checkout", "contact", "dashboard", "downloads", "events", "faq", "features", "help", "home", "items", "login", "news", "order", "pricing", "privacy", "products", "profile", "register", "search", "settings", "signup", "support", "terms", "welcome"] },
|
"format": "/{seg}",
|
||||||
{ "format": "/{seg}/{sub}", "weight": 0.5, "seg": ["blog", "docs", "help", "products", "category", "user"], "sub": ["getting-started", "overview", "guide", "2024", "latest", "popular", "archive", "details"] }
|
"seg": ["about", "account", "blog", "careers", "cart", "categories", "checkout", "contact", "dashboard", "downloads", "events", "faq", "features", "help", "home", "items", "login", "news", "order", "pricing", "privacy", "products", "profile", "register", "search", "settings", "signup", "support", "terms", "welcome"]
|
||||||
]
|
},
|
||||||
|
{
|
||||||
|
"format": "/{seg}/{sub}",
|
||||||
|
"weight": 0.5,
|
||||||
|
"seg": ["blog", "docs", "help", "products", "category", "user"],
|
||||||
|
"sub": ["getting-started", "overview", "guide", "2024", "latest", "popular", "archive", "details"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,21 +4,20 @@
|
|||||||
"weight": 2,
|
"weight": 2,
|
||||||
"first": ["alex", "ash", "avery", "bailey", "blake", "cameron", "casey", "charlie", "chris", "dakota", "drew", "elliot", "emerson", "finley", "frankie", "harley", "hayden", "jamie", "jordan", "kai", "kendall", "lane", "logan", "morgan", "parker", "quinn", "reese", "riley", "rowan", "sam", "sawyer", "skyler", "spencer", "taylor"],
|
"first": ["alex", "ash", "avery", "bailey", "blake", "cameron", "casey", "charlie", "chris", "dakota", "drew", "elliot", "emerson", "finley", "frankie", "harley", "hayden", "jamie", "jordan", "kai", "kendall", "lane", "logan", "morgan", "parker", "quinn", "reese", "riley", "rowan", "sam", "sawyer", "skyler", "spencer", "taylor"],
|
||||||
"last": ["adams", "brooks", "carter", "cole", "evans", "fisher", "fox", "grant", "gray", "hayes", "hunt", "lane", "lowe", "marsh", "mason", "morris", "north", "page", "quinn", "reed", "rhodes", "shaw", "stone", "vale", "wells", "west", "wolfe"],
|
"last": ["adams", "brooks", "carter", "cole", "evans", "fisher", "fox", "grant", "gray", "hayes", "hunt", "lane", "lowe", "marsh", "mason", "morris", "north", "page", "quinn", "reed", "rhodes", "shaw", "stone", "vale", "wells", "west", "wolfe"],
|
||||||
"sep": ["", "", "", ".", "_"],
|
"sep": [{ "format": "", "weight": 3 }, ".", "_"],
|
||||||
"n": ["", "", "", "", "1", "7", "12", "23", "42", "77", "99", "2024"]
|
"n": [{ "format": "", "weight": 4 }, "1", "7", "12", "23", "42", "77", "99", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{adj}{sep}{noun}{n}",
|
"format": "{adj}{sep}{noun}{n}",
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"adj": ["bluish", "brave", "chill", "cosmic", "cool", "dizzy", "electric", "epic", "fluffy", "frosty", "funky", "fuzzy", "golden", "groovy", "grumpy", "happy", "hyper", "jazzy", "lucky", "mega", "mighty", "neon", "nimble", "quirky", "rad", "rusty", "salty", "shiny", "silent", "sleepy", "snappy", "sneaky", "sparkly", "spicy", "sunny", "super", "swift", "turbo", "wild", "witty", "zany"],
|
"adj": ["bluish", "brave", "chill", "cosmic", "cool", "dizzy", "electric", "epic", "fluffy", "frosty", "funky", "fuzzy", "golden", "groovy", "grumpy", "happy", "hyper", "jazzy", "lucky", "mega", "mighty", "neon", "nimble", "quirky", "rad", "rusty", "salty", "shiny", "silent", "sleepy", "snappy", "sneaky", "sparkly", "spicy", "sunny", "super", "swift", "turbo", "wild", "witty", "zany"],
|
||||||
"noun": ["badger", "biscuit", "cactus", "comet", "donut", "dragon", "falcon", "ferret", "gizmo", "goblin", "hamster", "koala", "llama", "mango", "muffin", "narwhal", "noodle", "otter", "panda", "penguin", "pickle", "pirate", "pixel", "potato", "pretzel", "raccoon", "raptor", "robot", "taco", "toast", "trunk", "turtle", "unicorn", "viking", "waffle", "walrus", "wizard", "yeti"],
|
"noun": ["badger", "biscuit", "cactus", "comet", "donut", "dragon", "falcon", "ferret", "gizmo", "goblin", "hamster", "koala", "llama", "mango", "muffin", "narwhal", "noodle", "otter", "panda", "penguin", "pickle", "pirate", "pixel", "potato", "pretzel", "raccoon", "raptor", "robot", "taco", "toast", "trunk", "turtle", "unicorn", "viking", "waffle", "walrus", "wizard", "yeti"],
|
||||||
"sep": ["", "", "", ".", "_"],
|
"sep": [{ "format": "", "weight": 3 }, ".", "_"],
|
||||||
"n": ["", "", "7", "13", "42", "77", "99", "123", "420", "2024"]
|
"n": [{ "format": "", "weight": 2 }, "7", "13", "42", "77", "99", "123", "420", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{w}{n}",
|
"format": "{w}{n}",
|
||||||
"weight": 1,
|
|
||||||
"w": ["blooper", "blupp", "boop", "byteme", "coolcat", "derpina", "doomguy", "epicgamer", "fizzbuzz", "glitchlord", "glorptron", "gronkzilla", "kapowski", "lazerwolf", "megashark", "mooncat", "narfle", "nightowl", "noodlemaster", "oofster", "pixelfox", "pixelpusher", "plonkers", "retrowave", "snork", "splatmaster", "stardust", "superdog", "voidwalker", "vroom", "wahoo", "waooooh", "wootwoot", "yeetus", "zapper", "zoomzoom"],
|
"w": ["blooper", "blupp", "boop", "byteme", "coolcat", "derpina", "doomguy", "epicgamer", "fizzbuzz", "glitchlord", "glorptron", "gronkzilla", "kapowski", "lazerwolf", "megashark", "mooncat", "narfle", "nightowl", "noodlemaster", "oofster", "pixelfox", "pixelpusher", "plonkers", "retrowave", "snork", "splatmaster", "stardust", "superdog", "voidwalker", "vroom", "wahoo", "waooooh", "wootwoot", "yeetus", "zapper", "zoomzoom"],
|
||||||
"n": ["", "", "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
"n": [{ "format": "", "weight": 2 }, "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{pre}{n}.{n}.{n}{suffix}",
|
"format": "{pre}{n}.{n}.{n}{suffix}",
|
||||||
"n": [{ "format": "{digits(1)}", "weight": 3 }, { "format": "{int(10,99)}" }],
|
"n": [{ "format": "{digits(1)}", "weight": 3 }, "{int(10,99)}"],
|
||||||
"pre": ["", { "format": "v", "weight": 0.4 }],
|
"pre": ["", { "format": "v", "weight": 0.4 }],
|
||||||
"suffix": ["", { "format": "-{tag}.{m}", "tag": ["alpha", "beta", "rc"], "m": ["1", "2", "3"], "weight": 0.3 }]
|
"suffix": ["", { "format": "-{tag}.{m}", "tag": ["alpha", "beta", "rc"], "m": ["1", "2", "3"], "weight": 0.3 }]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+8
-8
@@ -1,10 +1,10 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{maker} {model}", "maker": ["BMW"], "model": ["3 Series", "5 Series", "X3", "X5"] },
|
{ "format": "{maker} {model}", "maker": "BMW", "model": ["3 Series", "5 Series", "X3", "X5"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Ford"], "model": ["Fiesta", "Focus", "Mustang", "Explorer"] },
|
{ "format": "{maker} {model}", "maker": "Ford", "model": ["Fiesta", "Focus", "Mustang", "Explorer"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Honda"], "model": ["Civic", "Accord", "CR-V", "Jazz"] },
|
{ "format": "{maker} {model}", "maker": "Honda", "model": ["Civic", "Accord", "CR-V", "Jazz"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Mercedes-Benz"], "model": ["A-Class", "C-Class", "E-Class", "GLC"] },
|
{ "format": "{maker} {model}", "maker": "Mercedes-Benz", "model": ["A-Class", "C-Class", "E-Class", "GLC"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Tesla"], "model": ["Model 3", "Model S", "Model X", "Model Y"] },
|
{ "format": "{maker} {model}", "maker": "Tesla", "model": ["Model 3", "Model S", "Model X", "Model Y"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Toyota"], "model": ["Corolla", "Camry", "RAV4", "Yaris"] },
|
{ "format": "{maker} {model}", "maker": "Toyota", "model": ["Corolla", "Camry", "RAV4", "Yaris"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Volkswagen"], "model": ["Golf", "Passat", "Polo", "Tiguan"] },
|
{ "format": "{maker} {model}", "maker": "Volkswagen", "model": ["Golf", "Passat", "Polo", "Tiguan"] },
|
||||||
{ "format": "{maker} {model}", "maker": ["Volvo"], "model": ["XC40", "XC60", "XC90", "V60"] }
|
{ "format": "{maker} {model}", "maker": "Volvo", "model": ["XC40", "XC60", "XC90", "V60"] }
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1 @@
|
|||||||
[
|
{ "format": "{lat}, {lon}", "lat": "{float(-90,90,6)}", "lon": "{float(-180,180,6)}" }
|
||||||
{
|
|
||||||
"format": "{lat}, {lon}",
|
|
||||||
"lat": { "format": "{float(-90,90,6)}" },
|
|
||||||
"lon": { "format": "{float(-180,180,6)}" }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
+20
-20
@@ -1,22 +1,22 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{name}", "name": ["Australia"], "alpha2": ["AU"], "alpha3": ["AUS"] },
|
{ "format": "{name}", "name": "Australia", "alpha2": "AU", "alpha3": "AUS" },
|
||||||
{ "format": "{name}", "name": ["Brazil"], "alpha2": ["BR"], "alpha3": ["BRA"] },
|
{ "format": "{name}", "name": "Brazil", "alpha2": "BR", "alpha3": "BRA" },
|
||||||
{ "format": "{name}", "name": ["Canada"], "alpha2": ["CA"], "alpha3": ["CAN"] },
|
{ "format": "{name}", "name": "Canada", "alpha2": "CA", "alpha3": "CAN" },
|
||||||
{ "format": "{name}", "name": ["China"], "alpha2": ["CN"], "alpha3": ["CHN"] },
|
{ "format": "{name}", "name": "China", "alpha2": "CN", "alpha3": "CHN" },
|
||||||
{ "format": "{name}", "name": ["Denmark"], "alpha2": ["DK"], "alpha3": ["DNK"] },
|
{ "format": "{name}", "name": "Denmark", "alpha2": "DK", "alpha3": "DNK" },
|
||||||
{ "format": "{name}", "name": ["Finland"], "alpha2": ["FI"], "alpha3": ["FIN"] },
|
{ "format": "{name}", "name": "Finland", "alpha2": "FI", "alpha3": "FIN" },
|
||||||
{ "format": "{name}", "name": ["France"], "alpha2": ["FR"], "alpha3": ["FRA"] },
|
{ "format": "{name}", "name": "France", "alpha2": "FR", "alpha3": "FRA" },
|
||||||
{ "format": "{name}", "name": ["Germany"], "alpha2": ["DE"], "alpha3": ["DEU"] },
|
{ "format": "{name}", "name": "Germany", "alpha2": "DE", "alpha3": "DEU" },
|
||||||
{ "format": "{name}", "name": ["India"], "alpha2": ["IN"], "alpha3": ["IND"] },
|
{ "format": "{name}", "name": "India", "alpha2": "IN", "alpha3": "IND" },
|
||||||
{ "format": "{name}", "name": ["Italy"], "alpha2": ["IT"], "alpha3": ["ITA"] },
|
{ "format": "{name}", "name": "Italy", "alpha2": "IT", "alpha3": "ITA" },
|
||||||
{ "format": "{name}", "name": ["Japan"], "alpha2": ["JP"], "alpha3": ["JPN"] },
|
{ "format": "{name}", "name": "Japan", "alpha2": "JP", "alpha3": "JPN" },
|
||||||
{ "format": "{name}", "name": ["Mexico"], "alpha2": ["MX"], "alpha3": ["MEX"] },
|
{ "format": "{name}", "name": "Mexico", "alpha2": "MX", "alpha3": "MEX" },
|
||||||
{ "format": "{name}", "name": ["Netherlands"], "alpha2": ["NL"], "alpha3": ["NLD"] },
|
{ "format": "{name}", "name": "Netherlands", "alpha2": "NL", "alpha3": "NLD" },
|
||||||
{ "format": "{name}", "name": ["Norway"], "alpha2": ["NO"], "alpha3": ["NOR"] },
|
{ "format": "{name}", "name": "Norway", "alpha2": "NO", "alpha3": "NOR" },
|
||||||
{ "format": "{name}", "name": ["Poland"], "alpha2": ["PL"], "alpha3": ["POL"] },
|
{ "format": "{name}", "name": "Poland", "alpha2": "PL", "alpha3": "POL" },
|
||||||
{ "format": "{name}", "name": ["Spain"], "alpha2": ["ES"], "alpha3": ["ESP"] },
|
{ "format": "{name}", "name": "Spain", "alpha2": "ES", "alpha3": "ESP" },
|
||||||
{ "format": "{name}", "name": ["Sweden"], "alpha2": ["SE"], "alpha3": ["SWE"] },
|
{ "format": "{name}", "name": "Sweden", "alpha2": "SE", "alpha3": "SWE" },
|
||||||
{ "format": "{name}", "name": ["Switzerland"], "alpha2": ["CH"], "alpha3": ["CHE"] },
|
{ "format": "{name}", "name": "Switzerland", "alpha2": "CH", "alpha3": "CHE" },
|
||||||
{ "format": "{name}", "name": ["United Kingdom"], "alpha2": ["GB"], "alpha3": ["GBR"] },
|
{ "format": "{name}", "name": "United Kingdom", "alpha2": "GB", "alpha3": "GBR" },
|
||||||
{ "format": "{name}", "name": ["United States"], "alpha2": ["US"], "alpha3": ["USA"] }
|
{ "format": "{name}", "name": "United States", "alpha2": "US", "alpha3": "USA" }
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,5 +1,18 @@
|
|||||||
[
|
[
|
||||||
{ "format": "4{d}{luhn()}", "d": { "format": "{digits(1)}", "repeat": 14 }, "weight": 4 },
|
{
|
||||||
{ "format": "5{m}{d}{luhn()}", "m": ["1", "2", "3", "4", "5"], "d": { "format": "{digits(1)}", "repeat": 13 }, "weight": 3 },
|
"format": "4{d}{luhn()}",
|
||||||
{ "format": "3{m}{d}{luhn()}", "m": ["4", "7"], "d": { "format": "{digits(1)}", "repeat": 12 }, "weight": 1 }
|
"d": { "format": "{digits(1)}", "repeat": 14 },
|
||||||
|
"weight": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "5{m}{d}{luhn()}",
|
||||||
|
"m": ["1", "2", "3", "4", "5"],
|
||||||
|
"d": { "format": "{digits(1)}", "repeat": 13 },
|
||||||
|
"weight": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "3{m}{d}{luhn()}",
|
||||||
|
"m": ["4", "7"],
|
||||||
|
"d": { "format": "{digits(1)}", "repeat": 12 }
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
+16
-16
@@ -1,18 +1,18 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{code}", "code": ["AUD"], "name": ["Australian Dollar"], "symbol": ["$"] },
|
{ "format": "{code}", "code": "AUD", "name": "Australian Dollar", "symbol": "$" },
|
||||||
{ "format": "{code}", "code": ["BRL"], "name": ["Brazilian Real"], "symbol": ["R$"] },
|
{ "format": "{code}", "code": "BRL", "name": "Brazilian Real", "symbol": "R$" },
|
||||||
{ "format": "{code}", "code": ["CAD"], "name": ["Canadian Dollar"], "symbol": ["$"] },
|
{ "format": "{code}", "code": "CAD", "name": "Canadian Dollar", "symbol": "$" },
|
||||||
{ "format": "{code}", "code": ["CHF"], "name": ["Swiss Franc"], "symbol": ["CHF"] },
|
{ "format": "{code}", "code": "CHF", "name": "Swiss Franc", "symbol": "CHF" },
|
||||||
{ "format": "{code}", "code": ["CNY"], "name": ["Chinese Yuan"], "symbol": ["¥"] },
|
{ "format": "{code}", "code": "CNY", "name": "Chinese Yuan", "symbol": "¥" },
|
||||||
{ "format": "{code}", "code": ["DKK"], "name": ["Danish Krone"], "symbol": ["kr"] },
|
{ "format": "{code}", "code": "DKK", "name": "Danish Krone", "symbol": "kr" },
|
||||||
{ "format": "{code}", "code": ["EUR"], "name": ["Euro"], "symbol": ["€"] },
|
{ "format": "{code}", "code": "EUR", "name": "Euro", "symbol": "€" },
|
||||||
{ "format": "{code}", "code": ["GBP"], "name": ["Pound Sterling"], "symbol": ["£"] },
|
{ "format": "{code}", "code": "GBP", "name": "Pound Sterling", "symbol": "£" },
|
||||||
{ "format": "{code}", "code": ["INR"], "name": ["Indian Rupee"], "symbol": ["₹"] },
|
{ "format": "{code}", "code": "INR", "name": "Indian Rupee", "symbol": "₹" },
|
||||||
{ "format": "{code}", "code": ["JPY"], "name": ["Japanese Yen"], "symbol": ["¥"] },
|
{ "format": "{code}", "code": "JPY", "name": "Japanese Yen", "symbol": "¥" },
|
||||||
{ "format": "{code}", "code": ["MXN"], "name": ["Mexican Peso"], "symbol": ["$"] },
|
{ "format": "{code}", "code": "MXN", "name": "Mexican Peso", "symbol": "$" },
|
||||||
{ "format": "{code}", "code": ["NOK"], "name": ["Norwegian Krone"], "symbol": ["kr"] },
|
{ "format": "{code}", "code": "NOK", "name": "Norwegian Krone", "symbol": "kr" },
|
||||||
{ "format": "{code}", "code": ["PLN"], "name": ["Polish Zloty"], "symbol": ["zł"] },
|
{ "format": "{code}", "code": "PLN", "name": "Polish Zloty", "symbol": "zł" },
|
||||||
{ "format": "{code}", "code": ["SEK"], "name": ["Swedish Krona"], "symbol": ["kr"] },
|
{ "format": "{code}", "code": "SEK", "name": "Swedish Krona", "symbol": "kr" },
|
||||||
{ "format": "{code}", "code": ["USD"], "name": ["US Dollar"], "symbol": ["$"] },
|
{ "format": "{code}", "code": "USD", "name": "US Dollar", "symbol": "$" },
|
||||||
{ "format": "{code}", "code": ["ZAR"], "name": ["South African Rand"], "symbol": ["R"] }
|
{ "format": "{code}", "code": "ZAR", "name": "South African Rand", "symbol": "R" }
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1 @@
|
|||||||
[
|
["😀", "😂", "😍", "🤔", "😎", "😭", "😡", "👍", "👎", "🙏", "👏", "🙌", "💪", "🔥", "✨", "🎉", "❤️", "💔", "💯", "👀", "🚀", "⭐", "🌈", "☀️", "🌙", "⚡", "❄️", "🍕", "🍔", "🍺", "☕", "🎂", "🐶", "🐱", "🦊", "🐢", "🦄", "🌸", "🌍", "💡"]
|
||||||
"😀", "😂", "😍", "🤔", "😎", "😭", "😡", "👍", "👎", "🙏",
|
|
||||||
"👏", "🙌", "💪", "🔥", "✨", "🎉", "❤️", "💔", "💯", "👀",
|
|
||||||
"🚀", "⭐", "🌈", "☀️", "🌙", "⚡", "❄️", "🍕", "🍔", "🍺",
|
|
||||||
"☕", "🎂", "🐶", "🐱", "🦊", "🐢", "🦄", "🌸", "🌍", "💡"
|
|
||||||
]
|
|
||||||
|
|||||||
+16
-16
@@ -1,18 +1,18 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{code} {reason}", "code": ["200"], "reason": ["OK"] },
|
{ "format": "{code} {reason}", "code": "200", "reason": "OK" },
|
||||||
{ "format": "{code} {reason}", "code": ["201"], "reason": ["Created"] },
|
{ "format": "{code} {reason}", "code": "201", "reason": "Created" },
|
||||||
{ "format": "{code} {reason}", "code": ["204"], "reason": ["No Content"] },
|
{ "format": "{code} {reason}", "code": "204", "reason": "No Content" },
|
||||||
{ "format": "{code} {reason}", "code": ["301"], "reason": ["Moved Permanently"] },
|
{ "format": "{code} {reason}", "code": "301", "reason": "Moved Permanently" },
|
||||||
{ "format": "{code} {reason}", "code": ["302"], "reason": ["Found"] },
|
{ "format": "{code} {reason}", "code": "302", "reason": "Found" },
|
||||||
{ "format": "{code} {reason}", "code": ["304"], "reason": ["Not Modified"] },
|
{ "format": "{code} {reason}", "code": "304", "reason": "Not Modified" },
|
||||||
{ "format": "{code} {reason}", "code": ["400"], "reason": ["Bad Request"] },
|
{ "format": "{code} {reason}", "code": "400", "reason": "Bad Request" },
|
||||||
{ "format": "{code} {reason}", "code": ["401"], "reason": ["Unauthorized"] },
|
{ "format": "{code} {reason}", "code": "401", "reason": "Unauthorized" },
|
||||||
{ "format": "{code} {reason}", "code": ["403"], "reason": ["Forbidden"] },
|
{ "format": "{code} {reason}", "code": "403", "reason": "Forbidden" },
|
||||||
{ "format": "{code} {reason}", "code": ["404"], "reason": ["Not Found"] },
|
{ "format": "{code} {reason}", "code": "404", "reason": "Not Found" },
|
||||||
{ "format": "{code} {reason}", "code": ["409"], "reason": ["Conflict"] },
|
{ "format": "{code} {reason}", "code": "409", "reason": "Conflict" },
|
||||||
{ "format": "{code} {reason}", "code": ["422"], "reason": ["Unprocessable Entity"] },
|
{ "format": "{code} {reason}", "code": "422", "reason": "Unprocessable Entity" },
|
||||||
{ "format": "{code} {reason}", "code": ["429"], "reason": ["Too Many Requests"] },
|
{ "format": "{code} {reason}", "code": "429", "reason": "Too Many Requests" },
|
||||||
{ "format": "{code} {reason}", "code": ["500"], "reason": ["Internal Server Error"] },
|
{ "format": "{code} {reason}", "code": "500", "reason": "Internal Server Error" },
|
||||||
{ "format": "{code} {reason}", "code": ["502"], "reason": ["Bad Gateway"] },
|
{ "format": "{code} {reason}", "code": "502", "reason": "Bad Gateway" },
|
||||||
{ "format": "{code} {reason}", "code": ["503"], "reason": ["Service Unavailable"] }
|
{ "format": "{code} {reason}", "code": "503", "reason": "Service Unavailable" }
|
||||||
]
|
]
|
||||||
|
|||||||
+16
-16
@@ -1,18 +1,18 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{name}", "name": ["Arabic"], "code": ["ar"] },
|
{ "format": "{name}", "name": "Arabic", "code": "ar" },
|
||||||
{ "format": "{name}", "name": ["Chinese"], "code": ["zh"] },
|
{ "format": "{name}", "name": "Chinese", "code": "zh" },
|
||||||
{ "format": "{name}", "name": ["Danish"], "code": ["da"] },
|
{ "format": "{name}", "name": "Danish", "code": "da" },
|
||||||
{ "format": "{name}", "name": ["Dutch"], "code": ["nl"] },
|
{ "format": "{name}", "name": "Dutch", "code": "nl" },
|
||||||
{ "format": "{name}", "name": ["English"], "code": ["en"] },
|
{ "format": "{name}", "name": "English", "code": "en" },
|
||||||
{ "format": "{name}", "name": ["Finnish"], "code": ["fi"] },
|
{ "format": "{name}", "name": "Finnish", "code": "fi" },
|
||||||
{ "format": "{name}", "name": ["French"], "code": ["fr"] },
|
{ "format": "{name}", "name": "French", "code": "fr" },
|
||||||
{ "format": "{name}", "name": ["German"], "code": ["de"] },
|
{ "format": "{name}", "name": "German", "code": "de" },
|
||||||
{ "format": "{name}", "name": ["Italian"], "code": ["it"] },
|
{ "format": "{name}", "name": "Italian", "code": "it" },
|
||||||
{ "format": "{name}", "name": ["Japanese"], "code": ["ja"] },
|
{ "format": "{name}", "name": "Japanese", "code": "ja" },
|
||||||
{ "format": "{name}", "name": ["Norwegian"], "code": ["no"] },
|
{ "format": "{name}", "name": "Norwegian", "code": "no" },
|
||||||
{ "format": "{name}", "name": ["Polish"], "code": ["pl"] },
|
{ "format": "{name}", "name": "Polish", "code": "pl" },
|
||||||
{ "format": "{name}", "name": ["Portuguese"], "code": ["pt"] },
|
{ "format": "{name}", "name": "Portuguese", "code": "pt" },
|
||||||
{ "format": "{name}", "name": ["Russian"], "code": ["ru"] },
|
{ "format": "{name}", "name": "Russian", "code": "ru" },
|
||||||
{ "format": "{name}", "name": ["Spanish"], "code": ["es"] },
|
{ "format": "{name}", "name": "Spanish", "code": "es" },
|
||||||
{ "format": "{name}", "name": ["Swedish"], "code": ["sv"] }
|
{ "format": "{name}", "name": "Swedish", "code": "sv" }
|
||||||
]
|
]
|
||||||
|
|||||||
+1
-3
@@ -1,3 +1 @@
|
|||||||
[
|
"{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}"
|
||||||
{ "format": "{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}:{hex(2)}" }
|
|
||||||
]
|
|
||||||
|
|||||||
+15
-15
@@ -1,17 +1,17 @@
|
|||||||
[
|
[
|
||||||
{ "format": "{type}", "type": ["application/gzip"], "ext": [".gz"] },
|
{ "format": "{type}", "type": "application/gzip", "ext": ".gz" },
|
||||||
{ "format": "{type}", "type": ["application/json"], "ext": [".json"] },
|
{ "format": "{type}", "type": "application/json", "ext": ".json" },
|
||||||
{ "format": "{type}", "type": ["application/pdf"], "ext": [".pdf"] },
|
{ "format": "{type}", "type": "application/pdf", "ext": ".pdf" },
|
||||||
{ "format": "{type}", "type": ["application/xml"], "ext": [".xml"] },
|
{ "format": "{type}", "type": "application/xml", "ext": ".xml" },
|
||||||
{ "format": "{type}", "type": ["application/zip"], "ext": [".zip"] },
|
{ "format": "{type}", "type": "application/zip", "ext": ".zip" },
|
||||||
{ "format": "{type}", "type": ["audio/mpeg"], "ext": [".mp3"] },
|
{ "format": "{type}", "type": "audio/mpeg", "ext": ".mp3" },
|
||||||
{ "format": "{type}", "type": ["image/gif"], "ext": [".gif"] },
|
{ "format": "{type}", "type": "image/gif", "ext": ".gif" },
|
||||||
{ "format": "{type}", "type": ["image/jpeg"], "ext": [".jpg"] },
|
{ "format": "{type}", "type": "image/jpeg", "ext": ".jpg" },
|
||||||
{ "format": "{type}", "type": ["image/png"], "ext": [".png"] },
|
{ "format": "{type}", "type": "image/png", "ext": ".png" },
|
||||||
{ "format": "{type}", "type": ["image/svg+xml"], "ext": [".svg"] },
|
{ "format": "{type}", "type": "image/svg+xml", "ext": ".svg" },
|
||||||
{ "format": "{type}", "type": ["image/webp"], "ext": [".webp"] },
|
{ "format": "{type}", "type": "image/webp", "ext": ".webp" },
|
||||||
{ "format": "{type}", "type": ["text/csv"], "ext": [".csv"] },
|
{ "format": "{type}", "type": "text/csv", "ext": ".csv" },
|
||||||
{ "format": "{type}", "type": ["text/html"], "ext": [".html"] },
|
{ "format": "{type}", "type": "text/html", "ext": ".html" },
|
||||||
{ "format": "{type}", "type": ["text/plain"], "ext": [".txt"] },
|
{ "format": "{type}", "type": "text/plain", "ext": ".txt" },
|
||||||
{ "format": "{type}", "type": ["video/mp4"], "ext": [".mp4"] }
|
{ "format": "{type}", "type": "video/mp4", "ext": ".mp4" }
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,3 +1 @@
|
|||||||
[
|
"{hex(24)}"
|
||||||
{ "format": "{hex(24)}" }
|
|
||||||
]
|
|
||||||
|
|||||||
+1
-29
@@ -1,29 +1 @@
|
|||||||
[
|
["UTC", "Africa/Cairo", "Africa/Johannesburg", "America/Chicago", "America/Denver", "America/Los_Angeles", "America/Mexico_City", "America/New_York", "America/Sao_Paulo", "America/Toronto", "Asia/Dubai", "Asia/Hong_Kong", "Asia/Kolkata", "Asia/Shanghai", "Asia/Singapore", "Asia/Tokyo", "Australia/Sydney", "Europe/Amsterdam", "Europe/Berlin", "Europe/London", "Europe/Madrid", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Stockholm", "Europe/Warsaw", "Pacific/Auckland"]
|
||||||
"UTC",
|
|
||||||
"Africa/Cairo",
|
|
||||||
"Africa/Johannesburg",
|
|
||||||
"America/Chicago",
|
|
||||||
"America/Denver",
|
|
||||||
"America/Los_Angeles",
|
|
||||||
"America/Mexico_City",
|
|
||||||
"America/New_York",
|
|
||||||
"America/Sao_Paulo",
|
|
||||||
"America/Toronto",
|
|
||||||
"Asia/Dubai",
|
|
||||||
"Asia/Hong_Kong",
|
|
||||||
"Asia/Kolkata",
|
|
||||||
"Asia/Shanghai",
|
|
||||||
"Asia/Singapore",
|
|
||||||
"Asia/Tokyo",
|
|
||||||
"Australia/Sydney",
|
|
||||||
"Europe/Amsterdam",
|
|
||||||
"Europe/Berlin",
|
|
||||||
"Europe/London",
|
|
||||||
"Europe/Madrid",
|
|
||||||
"Europe/Moscow",
|
|
||||||
"Europe/Oslo",
|
|
||||||
"Europe/Paris",
|
|
||||||
"Europe/Stockholm",
|
|
||||||
"Europe/Warsaw",
|
|
||||||
"Pacific/Auckland"
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,10 +1 @@
|
|||||||
[
|
["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15", "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"]
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
|
||||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
|
|
||||||
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0",
|
|
||||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0",
|
|
||||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
|
|
||||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1",
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
|
|
||||||
]
|
|
||||||
|
|||||||
+1
-6
@@ -1,6 +1 @@
|
|||||||
[
|
{ "format": "{hex(8)}-{hex(4)}-4{hex(3)}-{variant}{hex(3)}-{hex(12)}", "variant": ["8", "9", "a", "b"] }
|
||||||
{
|
|
||||||
"format": "{hex(8)}-{hex(4)}-4{hex(3)}-{variant}{hex(3)}-{hex(12)}",
|
|
||||||
"variant": ["8", "9", "a", "b"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{street} {street-number}\n{postal-code} {locality}",
|
"format": "{street} {street-number}\n{postal-code} {locality}",
|
||||||
"street": [
|
"street": [
|
||||||
@@ -10,16 +9,13 @@
|
|||||||
["Avenyn", "Birger Jarlsgatan", "Promenaden", "Staby", "Sveavägen", "Vintjärn"]
|
["Avenyn", "Birger Jarlsgatan", "Promenaden", "Staby", "Sveavägen", "Vintjärn"]
|
||||||
],
|
],
|
||||||
"street-number": [
|
"street-number": [
|
||||||
{ "format": "{int(1,9)}" },
|
"{int(1,9)}",
|
||||||
{ "format": "{int(10,99)}" },
|
"{int(10,99)}",
|
||||||
{ "format": "{int(100,999)}", "weight": 0.2 },
|
{ "format": "{int(100,999)}", "weight": 0.2 },
|
||||||
{ "format": "{int(1,9)}{upper(1)}", "weight": 0.2 },
|
{ "format": "{int(1,9)}{upper(1)}", "weight": 0.2 },
|
||||||
{ "format": "{int(10,99)}{upper(1)}", "weight": 0.1 },
|
{ "format": "{int(10,99)}{upper(1)}", "weight": 0.1 },
|
||||||
{ "format": "{int(100,999)}{upper(1)}", "weight": 0.05 }
|
{ "format": "{int(100,999)}{upper(1)}", "weight": 0.05 }
|
||||||
],
|
],
|
||||||
"postal-code": [
|
"postal-code": "{int(100,999)} {int(10,99)}",
|
||||||
{ "format": "{int(100,999)} {int(10,99)}" }
|
|
||||||
],
|
|
||||||
"locality": ["Alingsås", "Alvesta", "Ängelholm", "Arboga", "Arvika", "Avesta", "Boden", "Bollnäs", "Borås", "Borlänge", "Enköping", "Eskilstuna", "Eslöv", "Fagersta", "Falkenberg", "Falköping", "Falun", "Finspång", "Gällivare", "Gävle", "Göteborg", "Halmstad", "Haparanda", "Härnösand", "Hässleholm", "Helsingborg", "Huddinge", "Hudiksvall", "Jönköping", "Kalmar", "Karlshamn", "Karlskoga", "Karlskrona", "Karlstad", "Katrineholm", "Kiruna", "Köping", "Kramfors", "Kristianstad", "Kristinehamn", "Landskrona", "Lidingö", "Lidköping", "Lindesberg", "Linköping", "Ljungby", "Ludvika", "Luleå", "Lund", "Lycksele", "Malmö", "Mariestad", "Mjölby", "Mölndal", "Mora", "Motala", "Nacka", "Nässjö", "Norrköping", "Norrtälje", "Nyköping", "Nynäshamn", "Örebro", "Örnsköldsvik", "Oskarshamn", "Östersund", "Piteå", "Rabbalshede", "Ronneby", "Säffle", "Sandviken", "Sävsjö", "Sigtuna", "Skara", "Skellefteå", "Skövde", "Söderhamn", "Södertälje", "Sollentuna", "Solna", "Sölvesborg", "Stockholm", "Strängnäs", "Sundbyberg", "Sundsvall", "Täby", "Tierp", "Tranås", "Trelleborg", "Trollhättan", "Uddevalla", "Ulricehamn", "Umeå", "Upplands Väsby", "Uppsala", "Vänersborg", "Varberg", "Värnamo", "Västerås", "Västervik", "Växjö", "Vetlanda", "Vimmerby", "Visby", "Ystad"]
|
"locality": ["Alingsås", "Alvesta", "Ängelholm", "Arboga", "Arvika", "Avesta", "Boden", "Bollnäs", "Borås", "Borlänge", "Enköping", "Eskilstuna", "Eslöv", "Fagersta", "Falkenberg", "Falköping", "Falun", "Finspång", "Gällivare", "Gävle", "Göteborg", "Halmstad", "Haparanda", "Härnösand", "Hässleholm", "Helsingborg", "Huddinge", "Hudiksvall", "Jönköping", "Kalmar", "Karlshamn", "Karlskoga", "Karlskrona", "Karlstad", "Katrineholm", "Kiruna", "Köping", "Kramfors", "Kristianstad", "Kristinehamn", "Landskrona", "Lidingö", "Lidköping", "Lindesberg", "Linköping", "Ljungby", "Ludvika", "Luleå", "Lund", "Lycksele", "Malmö", "Mariestad", "Mjölby", "Mölndal", "Mora", "Motala", "Nacka", "Nässjö", "Norrköping", "Norrtälje", "Nyköping", "Nynäshamn", "Örebro", "Örnsköldsvik", "Oskarshamn", "Östersund", "Piteå", "Rabbalshede", "Ronneby", "Säffle", "Sandviken", "Sävsjö", "Sigtuna", "Skara", "Skellefteå", "Skövde", "Söderhamn", "Södertälje", "Sollentuna", "Solna", "Sölvesborg", "Stockholm", "Strängnäs", "Sundbyberg", "Sundsvall", "Täby", "Tierp", "Tranås", "Trelleborg", "Trollhättan", "Uddevalla", "Ulricehamn", "Umeå", "Upplands Väsby", "Uppsala", "Vänersborg", "Varberg", "Värnamo", "Västerås", "Västervik", "Växjö", "Vetlanda", "Vimmerby", "Visby", "Ystad"]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{base} {suffix}",
|
"format": "{base} {suffix}",
|
||||||
"base": [
|
"base": [
|
||||||
@@ -9,6 +8,5 @@
|
|||||||
},
|
},
|
||||||
["Aktiebolaget Vega", "Bröderna Lund", "Ekonomihuset", "Hantverkargruppen", "Lindberg", "Mälardalens Bygg", "Nordström", "Skandinaviska Handelshuset", "Sundbergs Verkstad", "Svensson & Co", "Vasa Logistik"]
|
["Aktiebolaget Vega", "Bröderna Lund", "Ekonomihuset", "Hantverkargruppen", "Lindberg", "Mälardalens Bygg", "Nordström", "Skandinaviska Handelshuset", "Sundbergs Verkstad", "Svensson & Co", "Vasa Logistik"]
|
||||||
],
|
],
|
||||||
"suffix": ["AB", "AB", "AB", "AB", "HB", "KB"]
|
"suffix": [{ "format": "AB", "weight": 4 }, "HB", "KB"]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{year}-{month}-{day}",
|
"format": "{year}-{month}-{day}",
|
||||||
"month": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
|
"month": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
|
||||||
"day": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"],
|
"day": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"],
|
||||||
"year": [
|
"year": [
|
||||||
{ "format": "197{digits(1)}" },
|
"197{digits(1)}",
|
||||||
{ "format": "198{digits(1)}" },
|
"198{digits(1)}",
|
||||||
{ "format": "199{digits(1)}", "weight": 2 },
|
{ "format": "199{digits(1)}", "weight": 2 },
|
||||||
{ "format": "200{digits(1)}", "weight": 3 },
|
{ "format": "200{digits(1)}", "weight": 3 },
|
||||||
{ "format": "201{digits(1)}", "weight": 3 },
|
{ "format": "201{digits(1)}", "weight": 3 },
|
||||||
{ "format": "202{digits(1)}", "weight": 2 }
|
{ "format": "202{digits(1)}", "weight": 2 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{local}@{domain}",
|
"format": "{local}@{domain}",
|
||||||
"local": [
|
"local": [
|
||||||
@@ -7,23 +6,21 @@
|
|||||||
"weight": 3,
|
"weight": 3,
|
||||||
"first": ["agnes", "alice", "anders", "anna", "anton", "asa", "axel", "bjorn", "david", "ebba", "elin", "elsa", "emil", "emma", "erik", "ester", "frida", "fredrik", "gustav", "hampus", "hanna", "henrik", "hugo", "ida", "ingrid", "isak", "johan", "jonas", "julia", "karin", "kjell", "klara", "lars", "lena", "linus", "magnus", "maja", "mats", "mattias", "mikael", "moa", "nils", "olle", "oskar", "par", "patrik", "per", "pontus", "rasmus", "samuel", "sara", "sofia", "soren", "stina", "sven", "tobias", "tuva", "viktor", "wilma", "ylva"],
|
"first": ["agnes", "alice", "anders", "anna", "anton", "asa", "axel", "bjorn", "david", "ebba", "elin", "elsa", "emil", "emma", "erik", "ester", "frida", "fredrik", "gustav", "hampus", "hanna", "henrik", "hugo", "ida", "ingrid", "isak", "johan", "jonas", "julia", "karin", "kjell", "klara", "lars", "lena", "linus", "magnus", "maja", "mats", "mattias", "mikael", "moa", "nils", "olle", "oskar", "par", "patrik", "per", "pontus", "rasmus", "samuel", "sara", "sofia", "soren", "stina", "sven", "tobias", "tuva", "viktor", "wilma", "ylva"],
|
||||||
"last": ["ahlberg", "andersson", "berg", "berglund", "bergstrom", "blom", "dahlberg", "eklund", "ekstrom", "engstrom", "eriksson", "falk", "forsberg", "fredriksson", "gustafsson", "hellstrom", "holm", "holmberg", "jakobsson", "johansson", "jonsson", "karlsson", "larsson", "lind", "lindberg", "lindgren", "lindqvist", "lundberg", "lundgren", "lundqvist", "magnusson", "nilsson", "norberg", "nystrom", "olsson", "persson", "petersson", "samuelsson", "sandberg", "sjoberg", "sjogren", "strand", "strom", "sundberg", "svensson", "soderberg", "wallin", "aberg", "oberg"],
|
"last": ["ahlberg", "andersson", "berg", "berglund", "bergstrom", "blom", "dahlberg", "eklund", "ekstrom", "engstrom", "eriksson", "falk", "forsberg", "fredriksson", "gustafsson", "hellstrom", "holm", "holmberg", "jakobsson", "johansson", "jonsson", "karlsson", "larsson", "lind", "lindberg", "lindgren", "lindqvist", "lundberg", "lundgren", "lundqvist", "magnusson", "nilsson", "norberg", "nystrom", "olsson", "persson", "petersson", "samuelsson", "sandberg", "sjoberg", "sjogren", "strand", "strom", "sundberg", "svensson", "soderberg", "wallin", "aberg", "oberg"],
|
||||||
"sep": [".", ".", "_", "-", ""],
|
"sep": [{ "format": ".", "weight": 2 }, "_", "-", ""],
|
||||||
"n": ["", "", "", "1", "7", "42", "88", "99"]
|
"n": [{ "format": "", "weight": 3 }, "1", "7", "42", "88", "99"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{adj}{noun}{n}",
|
"format": "{adj}{noun}{n}",
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"adj": ["blixt", "busig", "cool", "frisk", "galen", "glad", "kaxig", "kvick", "listig", "lugn", "mega", "modig", "mysig", "pigg", "rolig", "smart", "snabb", "stark", "super", "trygg", "turbo", "varm", "vild"],
|
"adj": ["blixt", "busig", "cool", "frisk", "galen", "glad", "kaxig", "kvick", "listig", "lugn", "mega", "modig", "mysig", "pigg", "rolig", "smart", "snabb", "stark", "super", "trygg", "turbo", "varm", "vild"],
|
||||||
"noun": ["abborren", "bamsen", "bjorn", "drake", "ekorre", "falken", "grodan", "hund", "igelkott", "kaninen", "katt", "korpen", "krabban", "musen", "nallen", "ninja", "orn", "panda", "pirat", "raven", "robot", "sillen", "sparven", "uggla", "varg", "vargen"],
|
"noun": ["abborren", "bamsen", "bjorn", "drake", "ekorre", "falken", "grodan", "hund", "igelkott", "kaninen", "katt", "korpen", "krabban", "musen", "nallen", "ninja", "orn", "panda", "pirat", "raven", "robot", "sillen", "sparven", "uggla", "varg", "vargen"],
|
||||||
"n": ["", "", "7", "13", "14", "42", "77", "99", "123", "420", "2024"]
|
"n": [{ "format": "", "weight": 2 }, "7", "13", "14", "42", "77", "99", "123", "420", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{w}{n}",
|
"format": "{w}{n}",
|
||||||
"weight": 1,
|
|
||||||
"w": ["blip", "blupp", "boop", "busigekorre", "coolkatten", "doot", "fizz", "floof", "galnaalgen", "gladgrodan", "glorp", "kapow", "kazoo", "kvickharen", "listigaraven", "megaraven", "mysmoln", "nattugglan", "pew", "pigghund", "pixelfox", "plonk", "rolighund", "snabbkatten", "snork", "splat", "superhunden", "turbohund", "vildvargen", "vroom", "wahoo", "waooooh", "woot", "yeet", "zap", "zoom"],
|
"w": ["blip", "blupp", "boop", "busigekorre", "coolkatten", "doot", "fizz", "floof", "galnaalgen", "gladgrodan", "glorp", "kapow", "kazoo", "kvickharen", "listigaraven", "megaraven", "mysmoln", "nattugglan", "pew", "pigghund", "pixelfox", "plonk", "rolighund", "snabbkatten", "snork", "splat", "superhunden", "turbohund", "vildvargen", "vroom", "wahoo", "waooooh", "woot", "yeet", "zap", "zoom"],
|
||||||
"n": ["", "", "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
"n": [{ "format": "", "weight": 2 }, "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"domain": ["example.com", "example.org", "example.net", "example.se", "example.nu", "example.io", "mail.example.se", "webmail.example.se", "inkorg.example.se", "post.example.se", "demo.example.se", "test.example.org", "dev.example.se"]
|
"domain": ["example.com", "example.org", "example.net", "example.se", "example.nu", "example.io", "mail.example.se", "webmail.example.se", "inkorg.example.se", "post.example.se", "demo.example.se", "test.example.org", "dev.example.se"]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+7
-5
@@ -2,9 +2,11 @@
|
|||||||
{
|
{
|
||||||
"format": "{o}.{o}.{o}.{o}",
|
"format": "{o}.{o}.{o}.{o}",
|
||||||
"weight": 8,
|
"weight": 8,
|
||||||
"o": [{ "format": "{digits(1)}", "weight": 3 }, { "format": "{int(10,99)}", "weight": 4 }, { "format": "1{digits(2)}", "weight": 2 }]
|
"o": [
|
||||||
},
|
{ "format": "{digits(1)}", "weight": 3 },
|
||||||
{
|
{ "format": "{int(10,99)}", "weight": 4 },
|
||||||
"format": "{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}"
|
{ "format": "1{digits(2)}", "weight": 2 }
|
||||||
}
|
]
|
||||||
|
},
|
||||||
|
"{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}:{hex(4)}"
|
||||||
]
|
]
|
||||||
|
|||||||
+2
-11
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{prefix}{femalefirst|malefirst} {last}",
|
"format": "{prefix}{femalefirst|malefirst} {last}",
|
||||||
"femalefirst": ["Agnes", "Alice", "Alicia", "Alma", "Amanda", "Anna", "Astrid", "Cornelia", "Ebba", "Elin", "Ella", "Ellen", "Elsa", "Emilia", "Emma", "Ester", "Eva", "Frida", "Hanna", "Hedda", "Ida", "Ingrid", "Isabelle", "Julia", "Karin", "Klara", "Kristina", "Lena", "Linnéa", "Lova", "Maja", "Maria", "Moa", "Molly", "Märta", "Nellie", "Nora", "Olivia", "Saga", "Sara", "Selma", "Signe", "Siri", "Sofia", "Stina", "Tilde", "Tuva", "Wilma", "Ylva", "Åsa"],
|
"femalefirst": ["Agnes", "Alice", "Alicia", "Alma", "Amanda", "Anna", "Astrid", "Cornelia", "Ebba", "Elin", "Ella", "Ellen", "Elsa", "Emilia", "Emma", "Ester", "Eva", "Frida", "Hanna", "Hedda", "Ida", "Ingrid", "Isabelle", "Julia", "Karin", "Klara", "Kristina", "Lena", "Linnéa", "Lova", "Maja", "Maria", "Moa", "Molly", "Märta", "Nellie", "Nora", "Olivia", "Saga", "Sara", "Selma", "Signe", "Siri", "Sofia", "Stina", "Tilde", "Tuva", "Wilma", "Ylva", "Åsa"],
|
||||||
@@ -24,18 +23,10 @@
|
|||||||
{
|
{
|
||||||
"format": "{first}{last}",
|
"format": "{first}{last}",
|
||||||
"weight": 0.133,
|
"weight": 0.133,
|
||||||
"first": ["Norr"],
|
"first": "Norr",
|
||||||
"last": ["berg", "blad", "crona", "dahl", "ed", "fors", "gren", "holm", "in", "kvist", "löf", "lund", "man", "mark", "qvist", "stedt", "sten", "strand", "ström", "vall"]
|
"last": ["berg", "blad", "crona", "dahl", "ed", "fors", "gren", "holm", "in", "kvist", "löf", "lund", "man", "mark", "qvist", "stedt", "sten", "strand", "ström", "vall"]
|
||||||
},
|
},
|
||||||
["Berg", "Blom", "Eismar", "Falk", "Holm", "Lind", "Norberg", "Strand", "Ström", "von Flemming", "Åberg", "Öberg"]
|
["Berg", "Blom", "Eismar", "Falk", "Holm", "Lind", "Norberg", "Strand", "Ström", "von Flemming", "Åberg", "Öberg"]
|
||||||
],
|
],
|
||||||
"prefix": [
|
"prefix": ["", { "format": "{string} ", "string": ["dr", "prof"], "weight": 0.05 }]
|
||||||
"",
|
|
||||||
{
|
|
||||||
"format": "{string} ",
|
|
||||||
"string": ["dr", "prof"],
|
|
||||||
"weight": 0.05
|
|
||||||
}
|
}
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -3,15 +3,15 @@
|
|||||||
"format": "{prefix}-{a} {b} {c}",
|
"format": "{prefix}-{a} {b} {c}",
|
||||||
"weight": 10,
|
"weight": 10,
|
||||||
"prefix": ["070", "072", "073", "076", "079"],
|
"prefix": ["070", "072", "073", "076", "079"],
|
||||||
"a": [{ "format": "{digits(3)}" }],
|
"a": "{digits(3)}",
|
||||||
"b": [{ "format": "{digits(2)}" }],
|
"b": "{digits(2)}",
|
||||||
"c": [{ "format": "{digits(2)}" }]
|
"c": "{digits(2)}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{prefix}-{a} {b} {c}",
|
"format": "{prefix}-{a} {b} {c}",
|
||||||
"prefix": ["08", "011", "013", "018", "019", "021", "023", "026", "031", "033", "035", "036", "040", "042", "044", "046", "054", "060", "063", "090"],
|
"prefix": ["08", "011", "013", "018", "019", "021", "023", "026", "031", "033", "035", "036", "040", "042", "044", "046", "054", "060", "063", "090"],
|
||||||
"a": [{ "format": "{digits(3)}" }],
|
"a": "{digits(3)}",
|
||||||
"b": [{ "format": "{digits(2)}" }],
|
"b": "{digits(2)}",
|
||||||
"c": [{ "format": "{digits(2)}" }]
|
"c": "{digits(2)}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{amt}{ore} kr",
|
"format": "{amt}{ore} kr",
|
||||||
"amt": [
|
"amt": [
|
||||||
{ "format": "{int(1,9)}", "weight": 2 },
|
{ "format": "{int(1,9)}", "weight": 2 },
|
||||||
{ "format": "{int(10,99)}", "weight": 4 },
|
{ "format": "{int(10,99)}", "weight": 4 },
|
||||||
{ "format": "{int(100,999)}", "weight": 3 },
|
{ "format": "{int(100,999)}", "weight": 3 },
|
||||||
{ "format": "{int(1,9)} {digits(3)}", "weight": 1 },
|
"{int(1,9)} {digits(3)}",
|
||||||
{ "format": "{int(10,99)} {digits(3)}", "weight": 0.3 }
|
{ "format": "{int(10,99)} {digits(3)}", "weight": 0.3 }
|
||||||
],
|
],
|
||||||
"ore": ["", { "format": ",{c}", "c": [{ "format": "{digits(2)}" }], "weight": 0.4 }]
|
"ore": ["", { "format": ",{c}", "c": "{digits(2)}", "weight": 0.4 }]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"noun": ["arkivet", "berget", "bäcken", "dalen", "eken", "fjället", "floden", "fyren", "fågeln", "gården", "glaciären", "hamnen", "holmen", "klippan", "kusten", "lampan", "lyktan", "motorn", "måsen", "ravinen", "räven", "seglaren", "signalen", "sjön", "skogen", "slätten", "stigen", "stjärnan", "stranden", "tornet", "trädgården", "vandraren", "vinden", "vågen", "ängen"],
|
"noun": ["arkivet", "berget", "bäcken", "dalen", "eken", "fjället", "floden", "fyren", "fågeln", "gården", "glaciären", "hamnen", "holmen", "klippan", "kusten", "lampan", "lyktan", "motorn", "måsen", "ravinen", "räven", "seglaren", "signalen", "sjön", "skogen", "slätten", "stigen", "stjärnan", "stranden", "tornet", "trädgården", "vandraren", "vinden", "vågen", "ängen"],
|
||||||
"verb": ["anar", "bevakar", "bygger", "bär", "döljer", "famnar", "följer", "formar", "gömmer", "hälsar", "korsar", "leder", "lockar", "lyser", "minns", "möter", "når", "skyddar", "speglar", "söker", "tänder", "vaktar", "väcker", "värnar", "återvänder"],
|
"verb": ["anar", "bevakar", "bygger", "bär", "döljer", "famnar", "följer", "formar", "gömmer", "hälsar", "korsar", "leder", "lockar", "lyser", "minns", "möter", "når", "skyddar", "speglar", "söker", "tänder", "vaktar", "väcker", "värnar", "återvänder"],
|
||||||
"prep": ["bakom", "bland", "bortom", "framför", "genom", "intill", "kring", "längs", "mot", "nära", "ovanför", "runt", "under", "vid", "över"],
|
"prep": ["bakom", "bland", "bortom", "framför", "genom", "intill", "kring", "längs", "mot", "nära", "ovanför", "runt", "under", "vid", "över"],
|
||||||
"end": [".", ".", ".", "!"]
|
"end": [{ "format": ".", "weight": 3 }, "!"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{q} {adj} {noun} {verb} {prep} {noun}?",
|
"format": "{q} {adj} {noun} {verb} {prep} {noun}?",
|
||||||
|
|||||||
+1
-4
@@ -1,4 +1,3 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{digits(2)}{mmdd}-{digits(3)}{luhn()}",
|
"format": "{digits(2)}{mmdd}-{digits(3)}{luhn()}",
|
||||||
"mmdd": [
|
"mmdd": [
|
||||||
@@ -16,10 +15,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{m}{d}",
|
"format": "{m}{d}",
|
||||||
"weight": 1,
|
"m": "02",
|
||||||
"m": ["02"],
|
|
||||||
"d": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"]
|
"d": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+13
-4
@@ -1,8 +1,17 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{hour}:{minute}{sec}",
|
"format": "{hour}:{minute}{sec}",
|
||||||
"hour": [{ "format": "0{digits(1)}", "weight": 4 }, { "format": "1{digits(1)}", "weight": 4 }, { "format": "2{t}", "t": ["0", "1", "2", "3"], "weight": 2 }],
|
"hour": [
|
||||||
"minute": [{ "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] }],
|
{ "format": "0{digits(1)}", "weight": 4 },
|
||||||
"sec": ["", { "format": ":{s}", "s": [{ "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] }], "weight": 0.4 }]
|
{ "format": "1{digits(1)}", "weight": 4 },
|
||||||
|
{ "format": "2{t}", "t": ["0", "1", "2", "3"], "weight": 2 }
|
||||||
|
],
|
||||||
|
"minute": { "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] },
|
||||||
|
"sec": [
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"format": ":{s}",
|
||||||
|
"s": { "format": "{t}{digits(1)}", "t": ["0", "1", "2", "3", "4", "5"] },
|
||||||
|
"weight": 0.4
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
|||||||
+11
-6
@@ -1,12 +1,17 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "https://{host}{path}",
|
"format": "https://{host}{path}",
|
||||||
"host": ["example.com", "www.example.com", "example.org", "example.se", "www.example.se", "blogg.example.net", "butik.example.com", "shop.example.se", "api.example.se", "dokument.example.org", "nyheter.example.net", "mail.example.se"],
|
"host": ["example.com", "www.example.com", "example.org", "example.se", "www.example.se", "blogg.example.net", "butik.example.com", "shop.example.se", "api.example.se", "dokument.example.org", "nyheter.example.net", "mail.example.se"],
|
||||||
"path": [
|
"path": [
|
||||||
"",
|
{ "format": "", "weight": 2 },
|
||||||
"",
|
{
|
||||||
{ "format": "/{seg}", "seg": ["om", "om-oss", "produkter", "blogg", "kontakt", "hjalp", "artiklar", "logga-in", "nyheter", "start", "sok", "kundvagn", "kassa", "villkor", "integritet", "priser", "tjanster", "foretag", "karriar", "support", "konto", "installningar", "registrera"] },
|
"format": "/{seg}",
|
||||||
{ "format": "/{seg}/{sub}", "weight": 0.5, "seg": ["blogg", "produkter", "hjalp", "dokument", "kategori"], "sub": ["oversikt", "kom-igang", "guide", "2024", "senaste", "arkiv", "detaljer"] }
|
"seg": ["om", "om-oss", "produkter", "blogg", "kontakt", "hjalp", "artiklar", "logga-in", "nyheter", "start", "sok", "kundvagn", "kassa", "villkor", "integritet", "priser", "tjanster", "foretag", "karriar", "support", "konto", "installningar", "registrera"]
|
||||||
]
|
},
|
||||||
|
{
|
||||||
|
"format": "/{seg}/{sub}",
|
||||||
|
"weight": 0.5,
|
||||||
|
"seg": ["blogg", "produkter", "hjalp", "dokument", "kategori"],
|
||||||
|
"sub": ["oversikt", "kom-igang", "guide", "2024", "senaste", "arkiv", "detaljer"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,21 +4,20 @@
|
|||||||
"weight": 2,
|
"weight": 2,
|
||||||
"first": ["agnes", "alice", "anders", "anna", "asa", "axel", "bjorn", "ebba", "elin", "emil", "emma", "erik", "frida", "gustav", "hanna", "hugo", "ida", "johan", "jonas", "julia", "karin", "klara", "lars", "lena", "magnus", "maja", "moa", "nils", "oskar", "per", "sara", "sofia", "viktor", "ylva"],
|
"first": ["agnes", "alice", "anders", "anna", "asa", "axel", "bjorn", "ebba", "elin", "emil", "emma", "erik", "frida", "gustav", "hanna", "hugo", "ida", "johan", "jonas", "julia", "karin", "klara", "lars", "lena", "magnus", "maja", "moa", "nils", "oskar", "per", "sara", "sofia", "viktor", "ylva"],
|
||||||
"last": ["ahl", "alm", "berg", "bjork", "dahl", "ek", "falk", "gran", "hag", "hed", "holm", "lind", "lund", "mark", "nor", "ohman", "ros", "sand", "sjo", "skog", "sten", "strom", "vik"],
|
"last": ["ahl", "alm", "berg", "bjork", "dahl", "ek", "falk", "gran", "hag", "hed", "holm", "lind", "lund", "mark", "nor", "ohman", "ros", "sand", "sjo", "skog", "sten", "strom", "vik"],
|
||||||
"sep": ["", "", ".", "_"],
|
"sep": [{ "format": "", "weight": 2 }, ".", "_"],
|
||||||
"n": ["", "", "", "1", "7", "23", "99", "2024"]
|
"n": [{ "format": "", "weight": 3 }, "1", "7", "23", "99", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{adj}{sep}{noun}{n}",
|
"format": "{adj}{sep}{noun}{n}",
|
||||||
"weight": 2,
|
"weight": 2,
|
||||||
"adj": ["blixt", "busig", "cool", "frisk", "galen", "glad", "kaxig", "kvick", "listig", "lugn", "mega", "modig", "mysig", "pigg", "rolig", "smart", "snabb", "stark", "super", "trygg", "turbo", "varm", "vild"],
|
"adj": ["blixt", "busig", "cool", "frisk", "galen", "glad", "kaxig", "kvick", "listig", "lugn", "mega", "modig", "mysig", "pigg", "rolig", "smart", "snabb", "stark", "super", "trygg", "turbo", "varm", "vild"],
|
||||||
"noun": ["abborre", "bamse", "bjorn", "drake", "ekorre", "falk", "groda", "hund", "igelkott", "kanin", "katt", "korp", "krabba", "mus", "nalle", "ninja", "orn", "panda", "pirat", "rav", "robot", "sill", "sparv", "uggla", "varg"],
|
"noun": ["abborre", "bamse", "bjorn", "drake", "ekorre", "falk", "groda", "hund", "igelkott", "kanin", "katt", "korp", "krabba", "mus", "nalle", "ninja", "orn", "panda", "pirat", "rav", "robot", "sill", "sparv", "uggla", "varg"],
|
||||||
"sep": ["", "", ".", "_"],
|
"sep": [{ "format": "", "weight": 2 }, ".", "_"],
|
||||||
"n": ["", "", "7", "13", "42", "77", "99", "123", "420", "2024"]
|
"n": [{ "format": "", "weight": 2 }, "7", "13", "42", "77", "99", "123", "420", "2024"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "{w}{n}",
|
"format": "{w}{n}",
|
||||||
"weight": 1,
|
|
||||||
"w": ["blip", "blupp", "boop", "busigekorre", "coolkatten", "fizz", "floof", "galnaalgen", "gladgrodan", "glorp", "kapow", "kazoo", "kvickharen", "listigaraven", "megaraven", "mysmoln", "nattugglan", "pigghund", "pixelfox", "plonk", "rolighund", "snabbkatten", "snork", "splat", "superhunden", "turbohund", "vildvargen", "vroom", "wahoo", "waooooh", "woot", "yeet", "zap", "zoom"],
|
"w": ["blip", "blupp", "boop", "busigekorre", "coolkatten", "fizz", "floof", "galnaalgen", "gladgrodan", "glorp", "kapow", "kazoo", "kvickharen", "listigaraven", "megaraven", "mysmoln", "nattugglan", "pigghund", "pixelfox", "plonk", "rolighund", "snabbkatten", "snork", "splat", "superhunden", "turbohund", "vildvargen", "vroom", "wahoo", "waooooh", "woot", "yeet", "zap", "zoom"],
|
||||||
"n": ["", "", "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
"n": [{ "format": "", "weight": 2 }, "7", "14", "42", "69", "99", "123", "420", "1337", "2000", "9000"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
[
|
|
||||||
{
|
{
|
||||||
"format": "{pre}{n}.{n}.{n}{suffix}",
|
"format": "{pre}{n}.{n}.{n}{suffix}",
|
||||||
"n": [{ "format": "{digits(1)}", "weight": 3 }, { "format": "{int(10,99)}" }],
|
"n": [{ "format": "{digits(1)}", "weight": 3 }, "{int(10,99)}"],
|
||||||
"pre": ["", { "format": "v", "weight": 0.4 }],
|
"pre": ["", { "format": "v", "weight": 0.4 }],
|
||||||
"suffix": ["", { "format": "-{tag}.{m}", "tag": ["alpha", "beta", "rc"], "m": ["1", "2", "3"], "weight": 0.3 }]
|
"suffix": ["", { "format": "-{tag}.{m}", "tag": ["alpha", "beta", "rc"], "m": ["1", "2", "3"], "weight": 0.3 }]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
|||||||
+4
-8
@@ -109,10 +109,9 @@ func New(opts ...Option) (*Generator, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List returns the sorted dotted paths Fake can render: every category, the dotted
|
// List returns the sorted dotted paths Fake can render: every category, the dotted
|
||||||
// fields within a template, and folder segments — descending transparently through
|
// fields within a template, and folder segments. A choice consumes no segment, so a
|
||||||
// single-variant choices the way a reference does. A choice consumes no segment, so
|
// path continues through one only where every variant carries it, which is the
|
||||||
// a path continues through a multi-variant one only where every variant carries it,
|
// rule Fake applies too: List is the set of paths Fake accepts.
|
||||||
// which is the rule Fake applies too: List is the set of paths Fake accepts.
|
|
||||||
func (f *Generator) List() []string {
|
func (f *Generator) List() []string {
|
||||||
var out []string
|
var out []string
|
||||||
for _, name := range sortedNames(f.categories) {
|
for _, name := range sortedNames(f.categories) {
|
||||||
@@ -148,9 +147,6 @@ func paths(n node) []string {
|
|||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
case *choice:
|
case *choice:
|
||||||
if len(n.items) == 1 {
|
|
||||||
return paths(n.items[0])
|
|
||||||
}
|
|
||||||
out := []string{""}
|
out := []string{""}
|
||||||
for p := range n.shared {
|
for p := range n.shared {
|
||||||
out = append(out, p)
|
out = append(out, p)
|
||||||
@@ -161,7 +157,7 @@ func paths(n node) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// sharedPaths is the sub-paths every item carries — the only ones a path may step
|
// sharedPaths is the sub-paths every item carries — the only ones a path may step
|
||||||
// through a multi-variant choice to reach. It intersects, bailing as soon as the set
|
// through a choice to reach. It intersects, bailing as soon as the set
|
||||||
// is empty, which is immediate for a choice of plain strings.
|
// is empty, which is immediate for a choice of plain strings.
|
||||||
func sharedPaths(items []node) map[string]bool {
|
func sharedPaths(items []node) map[string]bool {
|
||||||
shared := subPaths(items[0])
|
shared := subPaths(items[0])
|
||||||
|
|||||||
Executable
+87
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Rewrite data files to the one spelling each shape has.
|
||||||
|
|
||||||
|
reshape.py data/sv_SE/person.json ...
|
||||||
|
|
||||||
|
A one-item choice becomes its item; an object holding only a format becomes that
|
||||||
|
string; weight 1 and repeat 1 are dropped; a repeated choice item becomes one
|
||||||
|
item with a weight.
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
OPTIONS = ("format", "weight", "repeat", "separator")
|
||||||
|
WIDTH = 110
|
||||||
|
|
||||||
|
|
||||||
|
def reshape(n):
|
||||||
|
if isinstance(n, list):
|
||||||
|
items = [reshape(x) for x in n]
|
||||||
|
if len(items) == 1:
|
||||||
|
return items[0]
|
||||||
|
out, at = [], {}
|
||||||
|
for x in items:
|
||||||
|
key = json.dumps(x, sort_keys=True)
|
||||||
|
if key in at:
|
||||||
|
i = at[key]
|
||||||
|
if isinstance(out[i], str):
|
||||||
|
out[i] = {"format": out[i], "weight": 2}
|
||||||
|
elif isinstance(out[i], dict):
|
||||||
|
out[i]["weight"] = out[i].get("weight", 1) + 1
|
||||||
|
else:
|
||||||
|
out.append(x)
|
||||||
|
continue
|
||||||
|
at[key] = len(out)
|
||||||
|
out.append(x)
|
||||||
|
return out
|
||||||
|
if isinstance(n, dict):
|
||||||
|
d = {k: (v if k in OPTIONS else reshape(v)) for k, v in n.items()}
|
||||||
|
if d.get("weight") == 1:
|
||||||
|
del d["weight"]
|
||||||
|
if d.get("repeat") == 1:
|
||||||
|
del d["repeat"]
|
||||||
|
if list(d) == ["format"]:
|
||||||
|
return d["format"]
|
||||||
|
return d
|
||||||
|
return n
|
||||||
|
|
||||||
|
|
||||||
|
def scalar(v):
|
||||||
|
return json.dumps(v, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
def one_line(n):
|
||||||
|
if isinstance(n, dict):
|
||||||
|
return "{ " + ", ".join(scalar(k) + ": " + one_line(v) for k, v in n.items()) + " }"
|
||||||
|
if isinstance(n, list):
|
||||||
|
return "[" + ", ".join(one_line(x) for x in n) + "]"
|
||||||
|
return scalar(n)
|
||||||
|
|
||||||
|
|
||||||
|
def dump(n, indent=0):
|
||||||
|
pad = " " * indent
|
||||||
|
if isinstance(n, dict):
|
||||||
|
line = one_line(n)
|
||||||
|
if len(pad) + len(line) <= WIDTH and not any(isinstance(v, dict) for v in n.values()):
|
||||||
|
return line
|
||||||
|
body = ",\n".join(pad + " " + scalar(k) + ": " + dump(v, indent + 1) for k, v in n.items())
|
||||||
|
return "{\n" + body + "\n" + pad + "}"
|
||||||
|
if isinstance(n, list):
|
||||||
|
if all(isinstance(x, str) for x in n):
|
||||||
|
return one_line(n)
|
||||||
|
line = one_line(n)
|
||||||
|
if len(pad) + len(line) <= WIDTH:
|
||||||
|
return line
|
||||||
|
body = ",\n".join(pad + " " + dump(x, indent + 1) for x in n)
|
||||||
|
return "[\n" + body + "\n" + pad + "]"
|
||||||
|
return scalar(n)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
for path in sys.argv[1:]:
|
||||||
|
with open(path) as fh:
|
||||||
|
before = json.load(fh)
|
||||||
|
after = dump(reshape(before)) + "\n"
|
||||||
|
with open(path, "w") as fh:
|
||||||
|
fh.write(after)
|
||||||
|
print("reshaped", path)
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package fejkdata
|
package fejkdata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"sort"
|
"sort"
|
||||||
@@ -107,6 +108,12 @@ func compileChoice(items []any) (node, error) {
|
|||||||
if len(items) == 0 {
|
if len(items) == 0 {
|
||||||
return nil, fmt.Errorf("empty choice")
|
return nil, fmt.Errorf("empty choice")
|
||||||
}
|
}
|
||||||
|
if len(items) == 1 {
|
||||||
|
return nil, fmt.Errorf("a one-item choice is its item; write the item")
|
||||||
|
}
|
||||||
|
if err := checkNoRepeatedItem(items); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
c := &choice{items: make([]node, len(items))}
|
c := &choice{items: make([]node, len(items))}
|
||||||
cum := make([]float64, len(items))
|
cum := make([]float64, len(items))
|
||||||
var total float64
|
var total float64
|
||||||
@@ -133,14 +140,33 @@ func compileChoice(items []any) (node, error) {
|
|||||||
}
|
}
|
||||||
c.cum = cum
|
c.cum = cum
|
||||||
}
|
}
|
||||||
if len(c.items) > 1 {
|
|
||||||
// Safe to precompute: a choice's items come from one file, so no group can
|
// Safe to precompute: a choice's items come from one file, so no group can
|
||||||
// appear inside one, and neither mergeChildren nor linkRefs can reach in.
|
// appear inside one, and neither mergeChildren nor linkRefs can reach in.
|
||||||
c.shared = sharedPaths(c.items)
|
c.shared = sharedPaths(c.items)
|
||||||
}
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkNoRepeatedItem rejects a choice that lists one item twice: a pick is even
|
||||||
|
// over the items, so a repeat is a second spelling of weight. The error names the
|
||||||
|
// spelling that does skew a pick.
|
||||||
|
func checkNoRepeatedItem(items []any) error {
|
||||||
|
seen := make(map[string]int, len(items))
|
||||||
|
for i, raw := range items {
|
||||||
|
key, err := json.Marshal(raw)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if j, dup := seen[string(key)]; dup {
|
||||||
|
if s, isString := raw.(string); isString {
|
||||||
|
return fmt.Errorf("choice item %q is repeated; skew the odds with a weight instead: { \"format\": %q, \"weight\": 2 }", s, s)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("choice item %d repeats item %d; skew the odds with a weight on one of them instead", i, j)
|
||||||
|
}
|
||||||
|
seen[string(key)] = i
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func compileTemplate(m map[string]any) (node, error) {
|
func compileTemplate(m map[string]any) (node, error) {
|
||||||
format, ok := m["format"].(string)
|
format, ok := m["format"].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -181,6 +207,9 @@ func compileTemplate(m map[string]any) (node, error) {
|
|||||||
}
|
}
|
||||||
t.fields[k] = n
|
t.fields[k] = n
|
||||||
}
|
}
|
||||||
|
if _, weighted := m["weight"]; len(t.fields) == 0 && repeat == 1 && !weighted {
|
||||||
|
return nil, fmt.Errorf("an object holding only a format is a string; write %q", format)
|
||||||
|
}
|
||||||
if err := checkTokens(format, t.fields); err != nil {
|
if err := checkTokens(format, t.fields); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -212,7 +241,6 @@ func checkPath(n node, tail []string, level string) error {
|
|||||||
}
|
}
|
||||||
return checkPath(child, tail[1:], level+"."+tail[0])
|
return checkPath(child, tail[1:], level+"."+tail[0])
|
||||||
case *choice:
|
case *choice:
|
||||||
if len(n.items) > 1 {
|
|
||||||
if want := strings.Join(tail, "."); !n.shared[want] {
|
if want := strings.Join(tail, "."); !n.shared[want] {
|
||||||
return unreachableInChoice(n, want)
|
return unreachableInChoice(n, want)
|
||||||
}
|
}
|
||||||
@@ -224,15 +252,13 @@ func checkPath(n node, tail []string, level string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
|
||||||
return checkPath(n.items[0], tail, level)
|
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("cannot descend into %T at %q", n, tail[0])
|
return fmt.Errorf("cannot descend into %T at %q", n, tail[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// repeatOf reads a template's "repeat" (default 1): how many times its format
|
// repeatOf reads a template's "repeat" (default 1): how many times its format
|
||||||
// is rendered and concatenated. A present one must be a positive integer.
|
// is rendered and concatenated. A present one must be an integer above 1.
|
||||||
func repeatOf(m map[string]any) (int, error) {
|
func repeatOf(m map[string]any) (int, error) {
|
||||||
rv, ok := m["repeat"]
|
rv, ok := m["repeat"]
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -245,6 +271,9 @@ func repeatOf(m map[string]any) (int, error) {
|
|||||||
if math.IsNaN(r) || math.IsInf(r, 0) || r < 1 || r != math.Trunc(r) {
|
if math.IsNaN(r) || math.IsInf(r, 0) || r < 1 || r != math.Trunc(r) {
|
||||||
return 0, fmt.Errorf("repeat must be a positive integer, got %v", rv)
|
return 0, fmt.Errorf("repeat must be a positive integer, got %v", rv)
|
||||||
}
|
}
|
||||||
|
if r == 1 {
|
||||||
|
return 0, fmt.Errorf("repeat 1 is the default, so it has no effect; drop it")
|
||||||
|
}
|
||||||
if r > maxLen { // cap so a fat-fingered repeat can't build a multi-GB string
|
if r > maxLen { // cap so a fat-fingered repeat can't build a multi-GB string
|
||||||
return 0, fmt.Errorf("repeat %v exceeds the maximum %d", rv, maxLen)
|
return 0, fmt.Errorf("repeat %v exceeds the maximum %d", rv, maxLen)
|
||||||
}
|
}
|
||||||
@@ -269,6 +298,9 @@ func weightOf(raw any) (float64, error) {
|
|||||||
if w < 0 || math.IsNaN(w) || math.IsInf(w, 0) {
|
if w < 0 || math.IsNaN(w) || math.IsInf(w, 0) {
|
||||||
return 0, fmt.Errorf("weight must be finite and non-negative, got %v", w)
|
return 0, fmt.Errorf("weight must be finite and non-negative, got %v", w)
|
||||||
}
|
}
|
||||||
|
if w == 1 {
|
||||||
|
return 0, fmt.Errorf("weight 1 is the default, so it has no effect; drop it")
|
||||||
|
}
|
||||||
return w, nil
|
return w, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-8
@@ -9,8 +9,7 @@ import (
|
|||||||
// refPrefix marks a {..path} token: a reference to a node elsewhere in the data
|
// refPrefix marks a {..path} token: a reference to a node elsewhere in the data
|
||||||
// root rather than a sibling field. The path is resolved across every loaded
|
// root rather than a sibling field. The path is resolved across every loaded
|
||||||
// directory (see linkRefs), and is stricter than the one Fake takes: a reference
|
// directory (see linkRefs), and is stricter than the one Fake takes: a reference
|
||||||
// binds one node, so it cannot step through a multi-variant choice even where Fake
|
// binds one node, so it cannot step through a choice even where Fake and List can.
|
||||||
// and List can.
|
|
||||||
const refPrefix = ".."
|
const refPrefix = ".."
|
||||||
|
|
||||||
func isRef(name string) bool { return strings.HasPrefix(name, refPrefix) }
|
func isRef(name string) bool { return strings.HasPrefix(name, refPrefix) }
|
||||||
@@ -32,6 +31,9 @@ func linkRefs(root map[string]node) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("%s: reference {%s}: %w", path, name, err)
|
return fmt.Errorf("%s: reference {%s}: %w", path, name, err)
|
||||||
}
|
}
|
||||||
|
if t.fields == nil {
|
||||||
|
t.fields = map[string]node{}
|
||||||
|
}
|
||||||
t.fields[name] = target
|
t.fields[name] = target
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -231,9 +233,8 @@ func sortedNames(m map[string]node) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// lookup finds the single node a reference path names, walking groups and
|
// lookup finds the single node a reference path names, walking groups and
|
||||||
// template fields by segment and descending a single-variant choice as a
|
// template fields by segment. A missing segment, a folder target, or a step
|
||||||
// transparent wrapper. A missing segment, a folder target, or a step through a
|
// through a choice (which has no one value to bind) is an error.
|
||||||
// multi-variant choice (which has no one value to bind) is an error.
|
|
||||||
func lookup(root map[string]node, segments []string) (node, error) {
|
func lookup(root map[string]node, segments []string) (node, error) {
|
||||||
var n node = &group{children: root}
|
var n node = &group{children: root}
|
||||||
for i := 0; i < len(segments); i++ {
|
for i := 0; i < len(segments); i++ {
|
||||||
@@ -251,10 +252,7 @@ func lookup(root map[string]node, segments []string) (node, error) {
|
|||||||
}
|
}
|
||||||
n = child
|
n = child
|
||||||
case *choice:
|
case *choice:
|
||||||
if len(c.items) != 1 {
|
|
||||||
return nil, fmt.Errorf("%q steps through a %d-way choice", segments[i], len(c.items))
|
return nil, fmt.Errorf("%q steps through a %d-way choice", segments[i], len(c.items))
|
||||||
}
|
|
||||||
n, i = c.items[0], i-1 // a choice consumes no segment; reprocess it unwrapped
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("cannot descend into %T at %q", n, segments[i])
|
return nil, fmt.Errorf("cannot descend into %T at %q", n, segments[i])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,11 +53,9 @@ func descend(s *session, n node, segments []string) (node, error) {
|
|||||||
}
|
}
|
||||||
return descend(s, child, segments[1:])
|
return descend(s, child, segments[1:])
|
||||||
case *choice:
|
case *choice:
|
||||||
if len(n.items) > 1 {
|
|
||||||
if want := strings.Join(segments, "."); !n.shared[want] {
|
if want := strings.Join(segments, "."); !n.shared[want] {
|
||||||
return nil, unreachableInChoice(n, want)
|
return nil, unreachableInChoice(n, want)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return descend(s, pick(s, n), segments)
|
return descend(s, pick(s, n), segments)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("cannot descend into %T at %q", n, segments[0])
|
return nil, fmt.Errorf("cannot descend into %T at %q", n, segments[0])
|
||||||
|
|||||||
Reference in New Issue
Block a user