calyx 0.18.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +33 -0
- data/calyx.gemspec +2 -2
- data/examples/faker.json +1 -0
- data/examples/faker.rb +1 -1
- data/lib/calyx.rb +12 -8
- data/lib/calyx/format.rb +5 -0
- data/lib/calyx/grammar.rb +12 -0
- data/lib/calyx/mapping.rb +15 -0
- data/lib/calyx/modifiers.rb +8 -0
- data/lib/calyx/prefix_tree.rb +191 -0
- data/lib/calyx/production/affix_table.rb +53 -0
- data/lib/calyx/production/uniform_branch.rb +6 -0
- data/lib/calyx/production/weighted_branch.rb +6 -0
- data/lib/calyx/registry.rb +35 -17
- data/lib/calyx/rule.rb +25 -4
- data/lib/calyx/{production → syntax}/choices.rb +1 -1
- data/lib/calyx/{production → syntax}/concat.rb +18 -22
- data/lib/calyx/syntax/expression.rb +87 -0
- data/lib/calyx/{production → syntax}/memo.rb +1 -1
- data/lib/calyx/{production → syntax}/non_terminal.rb +1 -1
- data/lib/calyx/syntax/paired_mapping.rb +53 -0
- data/lib/calyx/{production → syntax}/terminal.rb +1 -1
- data/lib/calyx/syntax/token.rb +9 -0
- data/lib/calyx/{production → syntax}/unique.rb +1 -1
- data/lib/calyx/{production → syntax}/weighted_choices.rb +9 -2
- data/lib/calyx/version.rb +1 -1
- metadata +27 -86
- data/.travis.yml +0 -9
- data/docs/404.html +0 -7
- data/docs/CNAME +0 -1
- data/docs/_config.yml +0 -27
- data/docs/_data/breadcrumbs.yml +0 -9
- data/docs/_data/docs.yml +0 -35
- data/docs/_data/examples.yml +0 -9
- data/docs/_includes/breadcrumbs.html +0 -36
- data/docs/_includes/contents.html +0 -12
- data/docs/_includes/icon-github.html +0 -4
- data/docs/_includes/icon-rubygems.html +0 -9
- data/docs/_includes/navbar.html +0 -24
- data/docs/_includes/pagebar.html +0 -12
- data/docs/_layouts/default.html +0 -13
- data/docs/_layouts/docs.html +0 -14
- data/docs/_layouts/home.html +0 -13
- data/docs/_layouts/page.html +0 -20
- data/docs/_posts/2017-09-14-welcome-to-jekyll.markdown +0 -25
- data/docs/_posts/2017-09-21-0.17.0-released.md +0 -10
- data/docs/_styles/card.scss +0 -7
- data/docs/_styles/colors.scss +0 -18
- data/docs/_styles/content.scss +0 -57
- data/docs/_styles/cta.scss +0 -25
- data/docs/_styles/grid.scss +0 -22
- data/docs/_styles/media.scss +0 -50
- data/docs/_styles/menu.scss +0 -54
- data/docs/_styles/modifiers.scss +0 -3
- data/docs/_styles/navbar.scss +0 -161
- data/docs/_styles/pagebar.scss +0 -32
- data/docs/_styles/reset.scss +0 -92
- data/docs/_styles/scale.scss +0 -23
- data/docs/_styles/spread.scss +0 -55
- data/docs/_styles/styleguide.scss +0 -52
- data/docs/_styles/syntax.scss +0 -84
- data/docs/_styles/typography.scss +0 -49
- data/docs/_styles/yard.scss +0 -36
- data/docs/api.html +0 -9662
- data/docs/assets/calyx-docs.css +0 -792
- data/docs/assets/calyx-flower-outline.svg +0 -202
- data/docs/assets/calyx-flower-reverse.svg +0 -202
- data/docs/assets/calyx-flower.svg +0 -202
- data/docs/assets/logo-small.png +0 -0
- data/docs/assets/logos/calyx-flower-1.svg +0 -22
- data/docs/assets/logos/calyx-flower-2.svg +0 -21
- data/docs/content/documentation.html +0 -20
- data/docs/content/examples.html +0 -12
- data/docs/content/examples/any-gradient.md +0 -32
- data/docs/content/examples/faker.md +0 -16
- data/docs/content/examples/tiny-woodland-bot.md +0 -24
- data/docs/content/guides/context.md +0 -45
- data/docs/content/guides/expressions.md +0 -175
- data/docs/content/guides/features.md +0 -50
- data/docs/content/guides/formats.md +0 -37
- data/docs/content/guides/installation.md +0 -51
- data/docs/content/guides/random.md +0 -100
- data/docs/content/guides/results.md +0 -62
- data/docs/content/index.html +0 -44
- data/docs/content/introduction.md +0 -23
- data/docs/content/introduction/concepts.md +0 -82
- data/docs/content/introduction/contributing.md +0 -43
- data/docs/content/introduction/tutorial.md +0 -129
- data/docs/content/styleguide.html +0 -71
- data/docs/docs.scss +0 -94
- data/docs/index.html +0 -12
- data/docs/package-lock.json +0 -1536
- data/docs/package.json +0 -16
- data/examples/faker.yml +0 -42
- data/lib/calyx/production/expression.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8278055314ef40a029522a8237f5c1956e27b449b31bf4bb8d6d2d7e5b6ff904
|
4
|
+
data.tar.gz: ccc0ebfe719a5bfc88582dfb78225edb7562d6e3a7e23e672dcb2822d1c0b9a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 132390da1638e0b3c4bffc237c9dfe5b565b556269ea55da011aaaddaa7884a6ca6294190c4ceb76bbbd2977b0011601a885df090c2cdf468ad6bac7c657e8ee
|
7
|
+
data.tar.gz: e973005cbb1717949cdda94ea7c1c772301d8fcc1104b38f4a51fa5dd924b3025cf46a960909b7997748db1ee4373e86bd05e01f89eb9488058f703b49015f12
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
|
+
#uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
28
|
+
with:
|
29
|
+
ruby-version: 2.6
|
30
|
+
- name: Install dependencies
|
31
|
+
run: bundle install
|
32
|
+
- name: Run tests
|
33
|
+
run: bundle exec rspec
|
data/calyx.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '~>
|
22
|
-
spec.add_development_dependency 'rake', '~>
|
21
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
22
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
24
24
|
end
|
data/examples/faker.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"email":"{username}@{domain}","full_name":["{first_name} {last_name}","{first_name} {first_name.chars.first} {last_name}"],"username":["{first_name.downcase}","{first_name.downcase}{number}"],"first_name":["Aaliyah","Aaron","Abagail","Abbey","Abbie","Abbigail","Abby","Abdiel","Abdul","Abdullah","Abe","Abel","Abelardo","Abigail","Abigale","Abigayle","Abner","Abraham","Ada","Adah","Adalberto","Adaline","Adam","Adan","Addie","Addison","Adela","Adelbert","Adele","Adelia","Adeline","Adell","Adella","Adelle","Aditya","Adolf","Adolfo","Adolph","Adolphus","Adonis","Adrain","Adrian","Adriana","Adrianna","Adriel","Adrien","Adrienne","Afton","Aglae","Agnes","Agustin","Agustina","Ahmad","Ahmed","Aida","Aidan","Aiden","Aileen","Aimee","Aisha","Aiyana","Akeem","Al","Alaina","Alan","Alana","Alanis","Alanna","Alayna","Alba","Albert","Alberta","Albertha","Alberto","Albin","Albina","Alda","Alden","Alec","Aleen","Alejandra","Alejandrin","Alek","Alena","Alene","Alessandra","Alessandro","Alessia","Aletha","Alex","Alexa","Alexander","Alexandra","Alexandre","Alexandrea","Alexandria","Alexandrine","Alexandro","Alexane","Alexanne","Alexie","Alexis","Alexys","Alexzander","Alf","Alfonso","Alfonzo","Alford","Alfred","Alfreda","Alfredo","Ali","Alia","Alice","Alicia","Alisa","Alisha","Alison","Alivia","Aliya","Aliyah","Aliza","Alize","Allan","Allen","Allene","Allie","Allison","Ally","Alphonso","Alta","Althea","Alva","Alvah","Alvena","Alvera","Alverta","Alvina","Alvis","Alyce","Alycia","Alysa","Alysha","Alyson","Alysson","Amalia","Amanda","Amani","Amara","Amari","Amaya","Amber","Ambrose","Amelia","Amelie","Amely","America","Americo","Amie","Amina","Amir","Amira","Amiya","Amos","Amparo","Amy","Amya","Ana","Anabel","Anabelle","Anahi","Anais","Anastacio","Anastasia","Anderson","Andre","Andreane","Andreanne","Andres","Andrew","Andy","Angel","Angela","Angelica","Angelina","Angeline","Angelita","Angelo","Angie","Angus","Anibal","Anika","Anissa","Anita","Aniya","Aniyah","Anjali","Anna","Annabel","Annabell","Annabelle","Annalise","Annamae","Annamarie","Anne","Annetta","Annette","Annie","Ansel","Ansley","Anthony","Antoinette","Antone","Antonetta","Antonette","Antonia","Antonietta","Antonina","Antonio","Antwan","Antwon","Anya","April","Ara","Araceli","Aracely","Arch","Archibald","Ardella","Arden","Ardith","Arely","Ari","Ariane","Arianna","Aric","Ariel","Arielle","Arjun","Arlene","Arlie","Arlo","Armand","Armando","Armani","Arnaldo","Arne","Arno","Arnold","Arnoldo","Arnulfo","Aron","Art","Arthur","Arturo","Arvel","Arvid","Arvilla","Aryanna","Asa","Asha","Ashlee","Ashleigh","Ashley","Ashly","Ashlynn","Ashton","Ashtyn","Asia","Assunta","Astrid","Athena","Aubree","Aubrey","Audie","Audra","Audreanne","Audrey","August","Augusta","Augustine","Augustus","Aurelia","Aurelie","Aurelio","Aurore","Austen","Austin","Austyn","Autumn","Ava","Avery","Avis","Axel","Ayana","Ayden","Ayla","Aylin","Baby","Bailee","Bailey","Barbara","Barney","Baron","Barrett","Barry","Bart","Bartholome","Barton","Baylee","Beatrice","Beau","Beaulah","Bell","Bella","Belle","Ben","Benedict","Benjamin","Bennett","Bennie","Benny","Benton","Berenice","Bernadette","Bernadine","Bernard","Bernardo","Berneice","Bernhard","Bernice","Bernie","Berniece","Bernita","Berry","Bert","Berta","Bertha","Bertram","Bertrand","Beryl","Bessie","Beth","Bethany","Bethel","Betsy","Bette","Bettie","Betty","Bettye","Beulah","Beverly","Bianka","Bill","Billie","Billy","Birdie","Blair","Blaise","Blake","Blanca","Blanche","Blaze","Bo","Bobbie","Bobby","Bonita","Bonnie","Boris","Boyd","Brad","Braden","Bradford","Bradley","Bradly","Brady","Braeden","Brain","Brandi","Brando","Brandon","Brandt","Brandy","Brandyn","Brannon","Branson","Brant","Braulio","Braxton","Brayan","Breana","Breanna","Breanne","Brenda","Brendan","Brenden","Brendon","Brenna","Brennan","Brennon","Brent","Bret","Brett","Bria","Brian","Briana","Brianne","Brice","Bridget","Bridgette","Bridie","Brielle","Brigitte","Brionna","Brisa","Britney","Brittany","Brock","Broderick","Brody","Brook","Brooke","Brooklyn","Brooks","Brown","Bruce","Bryana","Bryce","Brycen","Bryon","Buck","Bud","Buddy","Buford","Bulah","Burdette","Burley","Burnice","Buster","Cade","Caden","Caesar","Caitlyn","Cale","Caleb","Caleigh","Cali","Calista","Callie","Camden","Cameron","Camila","Camilla","Camille","Camren","Camron","Camryn","Camylle","Candace","Candelario","Candice","Candida","Candido","Cara","Carey","Carissa","Carlee","Carleton","Carley","Carli","Carlie","Carlo","Carlos","Carlotta","Carmel","Carmela","Carmella","Carmelo","Carmen","Carmine","Carol","Carolanne","Carole","Carolina","Caroline","Carolyn","Carolyne","Carrie","Carroll","Carson","Carter","Cary","Casandra","Casey","Casimer","Casimir","Casper","Cassandra","Cassandre","Cassidy","Cassie","Catalina","Caterina","Catharine","Catherine","Cathrine","Cathryn","Cathy","Cayla","Ceasar","Cecelia","Cecil","Cecile","Cecilia","Cedrick","Celestine","Celestino","Celia","Celine","Cesar","Chad","Chadd","Chadrick","Chaim","Chance","Chandler","Chanel","Chanelle","Charity","Charlene","Charles","Charley","Charlie","Charlotte","Chase","Chasity","Chauncey","Chaya","Chaz","Chelsea","Chelsey","Chelsie","Chesley","Chester","Chet","Cheyanne","Cheyenne","Chloe","Chris","Christ","Christa","Christelle","Christian","Christiana","Christina","Christine","Christop","Christophe","Christopher","Christy","Chyna","Ciara","Cicero","Cielo","Cierra","Cindy","Citlalli","Clair","Claire","Clara","Clarabelle","Clare","Clarissa","Clark","Claud","Claude","Claudia","Claudie","Claudine","Clay","Clemens","Clement","Clementina","Clementine","Clemmie","Cleo","Cleora","Cleta","Cletus","Cleve","Cleveland","Clifford","Clifton","Clint","Clinton","Clotilde","Clovis","Cloyd","Clyde","Coby","Cody","Colby","Cole","Coleman","Colin","Colleen","Collin","Colt","Colten","Colton","Columbus","Concepcion","Conner","Connie","Connor","Conor","Conrad","Constance","Constantin","Consuelo","Cooper","Cora","Coralie","Corbin","Cordelia","Cordell","Cordia","Cordie","Corene","Corine","Cornelius","Cornell","Corrine","Cortez","Cortney","Cory","Coty","Courtney","Coy","Craig","Crawford","Creola","Cristal","Cristian","Cristina","Cristobal","Cristopher","Cruz","Crystal","Crystel","Cullen","Curt","Curtis","Cydney","Cynthia","Cyril","Cyrus","Dagmar","Dahlia","Daija","Daisha","Daisy","Dakota","Dale","Dallas","Dallin","Dalton","Damaris","Dameon","Damian","Damien","Damion","Damon","Dan","Dana","Dandre","Dane","D'angelo","Dangelo","Danial","Daniela","Daniella","Danielle","Danika","Dannie","Danny","Dante","Danyka","Daphne","Daphnee","Daphney","Darby","Daren","Darian","Dariana","Darien","Dario","Darion","Darius","Darlene","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darrion","Darron","Darryl","Darwin","Daryl","Dashawn","Dasia","Dave","David","Davin","Davion","Davon","Davonte","Dawn","Dawson","Dax","Dayana","Dayna","Dayne","Dayton","Dean","Deangelo","Deanna","Deborah","Declan","Dedric","Dedrick","Dee","Deion","Deja","Dejah","Dejon","Dejuan","Delaney","Delbert","Delfina","Delia","Delilah","Dell","Della","Delmer","Delores","Delpha","Delphia","Delphine","Delta","Demarco","Demarcus","Demario","Demetris","Demetrius","Demond","Dena","Denis","Dennis","Deon","Deondre","Deontae","Deonte","Dereck","Derek","Derick","Deron","Derrick","Deshaun","Deshawn","Desiree","Desmond","Dessie","Destany","Destin","Destinee","Destiney","Destini","Destiny","Devan","Devante","Deven","Devin","Devon","Devonte","Devyn","Dewayne","Dewitt","Dexter","Diamond","Diana","Dianna","Diego","Dillan","Dillon","Dimitri","Dina","Dino","Dion","Dixie","Dock","Dolly","Dolores","Domenic","Domenica","Domenick","Domenico","Domingo","Dominic","Dominique","Don","Donald","Donato","Donavon","Donna","Donnell","Donnie","Donny","Dora","Dorcas","Dorian","Doris","Dorothea","Dorothy","Dorris","Dortha","Dorthy","Doug","Douglas","Dovie","Doyle","Drake","Drew","Duane","Dudley","Dulce","Duncan","Durward","Dustin","Dusty","Dwight","Dylan","Earl","Earlene","Earline","Earnest","Earnestine","Easter","Easton","Ebba","Ebony","Ed","Eda","Edd","Eddie","Eden","Edgar","Edgardo","Edison","Edmond","Edmund","Edna","Eduardo","Edward","Edwardo","Edwin","Edwina","Edyth","Edythe","Effie","Efrain","Efren","Eileen","Einar","Eino","Eladio","Elaina","Elbert","Elda","Eldon","Eldora","Eldred","Eldridge","Eleanora","Eleanore","Eleazar","Electa","Elena","Elenor","Elenora","Eleonore","Elfrieda","Eli","Elian","Eliane","Elias","Eliezer","Elijah","Elinor","Elinore","Elisa","Elisabeth","Elise","Eliseo","Elisha","Elissa","Eliza","Elizabeth","Ella","Ellen","Ellie","Elliot","Elliott","Ellis","Ellsworth","Elmer","Elmira","Elmo","Elmore","Elna","Elnora","Elody","Eloisa","Eloise","Elouise","Eloy","Elroy","Elsa","Else","Elsie","Elta","Elton","Elva","Elvera","Elvie","Elvis","Elwin","Elwyn","Elyse","Elyssa","Elza","Emanuel","Emelia","Emelie","Emely","Emerald","Emerson","Emery","Emie","Emil","Emile","Emilia","Emiliano","Emilie","Emilio","Emily","Emma","Emmalee","Emmanuel","Emmanuelle","Emmet","Emmett","Emmie","Emmitt","Emmy","Emory","Ena","Enid","Enoch","Enola","Enos","Enrico","Enrique","Ephraim","Era","Eriberto","Eric","Erica","Erich","Erick","Ericka","Erik","Erika","Erin","Erling","Erna","Ernest","Ernestina","Ernestine","Ernesto","Ernie","Ervin","Erwin","Eryn","Esmeralda","Esperanza","Esta","Esteban","Estefania","Estel","Estell","Estella","Estelle","Estevan","Esther","Estrella","Etha","Ethan","Ethel","Ethelyn","Ethyl","Ettie","Eudora","Eugene","Eugenia","Eula","Eulah","Eulalia","Euna","Eunice","Eusebio","Eva","Evalyn","Evan","Evangeline","Evans","Eve","Eveline","Evelyn","Everardo","Everett","Everette","Evert","Evie","Ewald","Ewell","Ezekiel","Ezequiel","Ezra","Fabian","Fabiola","Fae","Fannie","Fanny","Fatima","Faustino","Fausto","Favian","Fay","Faye","Federico","Felicia","Felicita","Felicity","Felipa","Felipe","Felix","Felton","Fermin","Fern","Fernando","Ferne","Fidel","Filiberto","Filomena","Finn","Fiona","Flavie","Flavio","Fleta","Fletcher","Flo","Florence","Florencio","Florian","Florida","Florine","Flossie","Floy","Floyd","Ford","Forest","Forrest","Foster","Frances","Francesca","Francesco","Francis","Francisca","Francisco","Franco","Frank","Frankie","Franz","Fred","Freda","Freddie","Freddy","Frederic","Frederick","Frederik","Frederique","Fredrick","Fredy","Freeda","Freeman","Freida","Frida","Frieda","Friedrich","Fritz","Furman","Gabe","Gabriel","Gabriella","Gabrielle","Gaetano","Gage","Gail","Gardner","Garett","Garfield","Garland","Garnet","Garnett","Garret","Garrett","Garrick","Garrison","Garry","Garth","Gaston","Gavin","Gay","Gayle","Gaylord","Gene","General","Genesis","Genevieve","Gennaro","Genoveva","Geo","Geoffrey","George","Georgette","Georgiana","Georgianna","Geovanni","Geovanny","Geovany","Gerald","Geraldine","Gerard","Gerardo","Gerda","Gerhard","Germaine","German","Gerry","Gerson","Gertrude","Gia","Gianni","Gideon","Gilbert","Gilberto","Gilda","Giles","Gillian","Gina","Gino","Giovani","Giovanna","Giovanni","Giovanny","Gisselle","Giuseppe","Gladyce","Gladys","Glen","Glenda","Glenna","Glennie","Gloria","Godfrey","Golda","Golden","Gonzalo","Gordon","Grace","Gracie","Graciela","Grady","Graham","Grant","Granville","Grayce","Grayson","Green","Greg","Gregg","Gregoria","Gregorio","Gregory","Greta","Gretchen","Greyson","Griffin","Grover","Guadalupe","Gudrun","Guido","Guillermo","Guiseppe","Gunnar","Gunner","Gus","Gussie","Gust","Gustave","Guy","Gwen","Gwendolyn","Hadley","Hailee","Hailey","Hailie","Hal","Haleigh","Haley","Halie","Halle","Hallie","Hank","Hanna","Hannah","Hans","Hardy","Harley","Harmon","Harmony","Harold","Harrison","Harry","Harvey","Haskell","Hassan","Hassie","Hattie","Haven","Hayden","Haylee","Hayley","Haylie","Hazel","Hazle","Heath","Heather","Heaven","Heber","Hector","Heidi","Helen","Helena","Helene","Helga","Hellen","Helmer","Heloise","Henderson","Henri","Henriette","Henry","Herbert","Herman","Hermann","Hermina","Herminia","Herminio","Hershel","Herta","Hertha","Hester","Hettie","Hilario","Hilbert","Hilda","Hildegard","Hillard","Hillary","Hilma","Hilton","Hipolito","Hiram","Hobart","Holden","Hollie","Hollis","Holly","Hope","Horace","Horacio","Hortense","Hosea","Houston","Howard","Howell","Hoyt","Hubert","Hudson","Hugh","Hulda","Humberto","Hunter","Hyman","Ian","Ibrahim","Icie","Ida","Idell","Idella","Ignacio","Ignatius","Ike","Ila","Ilene","Iliana","Ima","Imani","Imelda","Immanuel","Imogene","Ines","Irma","Irving","Irwin","Isaac","Isabel","Isabell","Isabella","Isabelle","Isac","Isadore","Isai","Isaiah","Isaias","Isidro","Ismael","Isobel","Isom","Israel","Issac","Itzel","Iva","Ivah","Ivory","Ivy","Izabella","Izaiah","Jabari","Jace","Jacey","Jacinthe","Jacinto","Jack","Jackeline","Jackie","Jacklyn","Jackson","Jacky","Jaclyn","Jacquelyn","Jacques","Jacynthe","Jada","Jade","Jaden","Jadon","Jadyn","Jaeden","Jaida","Jaiden","Jailyn","Jaime","Jairo","Jakayla","Jake","Jakob","Jaleel","Jalen","Jalon","Jalyn","Jamaal","Jamal","Jamar","Jamarcus","Jamel","Jameson","Jamey","Jamie","Jamil","Jamir","Jamison","Jammie","Jan","Jana","Janae","Jane","Janelle","Janessa","Janet","Janice","Janick","Janie","Janis","Janiya","Jannie","Jany","Jaquan","Jaquelin","Jaqueline","Jared","Jaren","Jarod","Jaron","Jarred","Jarrell","Jarret","Jarrett","Jarrod","Jarvis","Jasen","Jasmin","Jason","Jasper","Jaunita","Javier","Javon","Javonte","Jay","Jayce","Jaycee","Jayda","Jayde","Jayden","Jaydon","Jaylan","Jaylen","Jaylin","Jaylon","Jayme","Jayne","Jayson","Jazlyn","Jazmin","Jazmyn","Jazmyne","Jean","Jeanette","Jeanie","Jeanne","Jed","Jedediah","Jedidiah","Jeff","Jefferey","Jeffery","Jeffrey","Jeffry","Jena","Jenifer","Jennie","Jennifer","Jennings","Jennyfer","Jensen","Jerad","Jerald","Jeramie","Jeramy","Jerel","Jeremie","Jeremy","Jermain","Jermaine","Jermey","Jerod","Jerome","Jeromy","Jerrell","Jerrod","Jerrold","Jerry","Jess","Jesse","Jessica","Jessie","Jessika","Jessy","Jessyca","Jesus","Jett","Jettie","Jevon","Jewel","Jewell","Jillian","Jimmie","Jimmy","Jo","Joan","Joana","Joanie","Joanne","Joannie","Joanny","Joany","Joaquin","Jocelyn","Jodie","Jody","Joe","Joel","Joelle","Joesph","Joey","Johan","Johann","Johanna","Johathan","John","Johnathan","Johnathon","Johnnie","Johnny","Johnpaul","Johnson","Jolie","Jon","Jonas","Jonatan","Jonathan","Jonathon","Jordan","Jordane","Jordi","Jordon","Jordy","Jordyn","Jorge","Jose","Josefa","Josefina","Joseph","Josephine","Josh","Joshua","Joshuah","Josiah","Josiane","Josianne","Josie","Josue","Jovan","Jovani","Jovanny","Jovany","Joy","Joyce","Juana","Juanita","Judah","Judd","Jude","Judge","Judson","Judy","Jules","Julia","Julian","Juliana","Julianne","Julie","Julien","Juliet","Julio","Julius","June","Junior","Junius","Justen","Justice","Justina","Justine","Juston","Justus","Justyn","Juvenal","Juwan","Kacey","Kaci","Kacie","Kade","Kaden","Kadin","Kaela","Kaelyn","Kaia","Kailee","Kailey","Kailyn","Kaitlin","Kaitlyn","Kale","Kaleb","Kaleigh","Kaley","Kali","Kallie","Kameron","Kamille","Kamren","Kamron","Kamryn","Kane","Kara","Kareem","Karelle","Karen","Kari","Kariane","Karianne","Karina","Karine","Karl","Karlee","Karley","Karli","Karlie","Karolann","Karson","Kasandra","Kasey","Kassandra","Katarina","Katelin","Katelyn","Katelynn","Katharina","Katherine","Katheryn","Kathleen","Kathlyn","Kathryn","Kathryne","Katlyn","Katlynn","Katrina","Katrine","Kattie","Kavon","Kay","Kaya","Kaycee","Kayden","Kayla","Kaylah","Kaylee","Kayleigh","Kayley","Kayli","Kaylie","Kaylin","Keagan","Keanu","Keara","Keaton","Keegan","Keeley","Keely","Keenan","Keira","Keith","Kellen","Kelley","Kelli","Kellie","Kelly","Kelsi","Kelsie","Kelton","Kelvin","Ken","Kendall","Kendra","Kendrick","Kenna","Kennedi","Kennedy","Kenneth","Kennith","Kenny","Kenton","Kenya","Kenyatta","Kenyon","Keon","Keshaun","Keshawn","Keven","Kevin","Kevon","Keyon","Keyshawn","Khalid","Khalil","Kian","Kiana","Kianna","Kiara","Kiarra","Kiel","Kiera","Kieran","Kiley","Kim","Kimberly","King","Kip","Kira","Kirk","Kirsten","Kirstin","Kitty","Kobe","Koby","Kody","Kolby","Kole","Korbin","Korey","Kory","Kraig","Kris","Krista","Kristian","Kristin","Kristina","Kristofer","Kristoffer","Kristopher","Kristy","Krystal","Krystel","Krystina","Kurt","Kurtis","Kyla","Kyle","Kylee","Kyleigh","Kyler","Kylie","Kyra","Lacey","Lacy","Ladarius","Lafayette","Laila","Laisha","Lamar","Lambert","Lamont","Lance","Landen","Lane","Laney","Larissa","Laron","Larry","Larue","Laura","Laurel","Lauren","Laurence","Lauretta","Lauriane","Laurianne","Laurie","Laurine","Laury","Lauryn","Lavada","Lavern","Laverna","Laverne","Lavina","Lavinia","Lavon","Lavonne","Lawrence","Lawson","Layla","Layne","Lazaro","Lea","Leann","Leanna","Leanne","Leatha","Leda","Lee","Leif","Leila","Leilani","Lela","Lelah","Leland","Lelia","Lempi","Lemuel","Lenna","Lennie","Lenny","Lenora","Lenore","Leo","Leola","Leon","Leonard","Leonardo","Leone","Leonel","Leonie","Leonor","Leonora","Leopold","Leopoldo","Leora","Lera","Lesley","Leslie","Lesly","Lessie","Lester","Leta","Letha","Letitia","Levi","Lew","Lewis","Lexi","Lexie","Lexus","Lia","Liam","Liana","Libbie","Libby","Lila","Lilian","Liliana","Liliane","Lilla","Lillian","Lilliana","Lillie","Lilly","Lily","Lilyan","Lina","Lincoln","Linda","Lindsay","Lindsey","Linnea","Linnie","Linwood","Lionel","Lisa","Lisandro","Lisette","Litzy","Liza","Lizeth","Lizzie","Llewellyn","Lloyd","Logan","Lois","Lola","Lolita","Loma","Lon","London","Lonie","Lonnie","Lonny","Lonzo","Lora","Loraine","Loren","Lorena","Lorenz","Lorenza","Lorenzo","Lori","Lorine","Lorna","Lottie","Lou","Louie","Louisa","Lourdes","Louvenia","Lowell","Loy","Loyal","Loyce","Lucas","Luciano","Lucie","Lucienne","Lucile","Lucinda","Lucio","Lucious","Lucius","Lucy","Ludie","Ludwig","Lue","Luella","Luigi","Luis","Luisa","Lukas","Lula","Lulu","Luna","Lupe","Lura","Lurline","Luther","Luz","Lyda","Lydia","Lyla","Lynn","Lyric","Lysanne","Mabel","Mabelle","Mable","Mac","Macey","Maci","Macie","Mack","Mackenzie","Macy","Madaline","Madalyn","Maddison","Madeline","Madelyn","Madelynn","Madge","Madie","Madilyn","Madisen","Madison","Madisyn","Madonna","Madyson","Mae","Maegan","Maeve","Mafalda","Magali","Magdalen","Magdalena","Maggie","Magnolia","Magnus","Maia","Maida","Maiya","Major","Makayla","Makenna","Makenzie","Malachi","Malcolm","Malika","Malinda","Mallie","Mallory","Malvina","Mandy","Manley","Manuel","Manuela","Mara","Marc","Marcel","Marcelina","Marcelino","Marcella","Marcelle","Marcellus","Marcelo","Marcia","Marco","Marcos","Marcus","Margaret","Margarete","Margarett","Margaretta","Margarette","Margarita","Marge","Margie","Margot","Margret","Marguerite","Maria","Mariah","Mariam","Marian","Mariana","Mariane","Marianna","Marianne","Mariano","Maribel","Marie","Mariela","Marielle","Marietta","Marilie","Marilou","Marilyne","Marina","Mario","Marion","Marisa","Marisol","Maritza","Marjolaine","Marjorie","Marjory","Mark","Markus","Marlee","Marlen","Marlene","Marley","Marlin","Marlon","Marques","Marquis","Marquise","Marshall","Marta","Martin","Martina","Martine","Marty","Marvin","Mary","Maryam","Maryjane","Maryse","Mason","Mateo","Mathew","Mathias","Mathilde","Matilda","Matilde","Matt","Matteo","Mattie","Maud","Maude","Maudie","Maureen","Maurice","Mauricio","Maurine","Maverick","Mavis","Max","Maxie","Maxime","Maximilian","Maximillia","Maximillian","Maximo","Maximus","Maxine","Maxwell","May","Maya","Maybell","Maybelle","Maye","Maymie","Maynard","Mayra","Mazie","Mckayla","Mckenna","Mckenzie","Meagan","Meaghan","Meda","Megane","Meggie","Meghan","Mekhi","Melany","Melba","Melisa","Melissa","Mellie","Melody","Melvin","Melvina","Melyna","Melyssa","Mercedes","Meredith","Merl","Merle","Merlin","Merritt","Mertie","Mervin","Meta","Mia","Micaela","Micah","Michael","Michaela","Michale","Micheal","Michel","Michele","Michelle","Miguel","Mikayla","Mike","Mikel","Milan","Miles","Milford","Miller","Millie","Milo","Milton","Mina","Minerva","Minnie","Miracle","Mireille","Mireya","Misael","Missouri","Misty","Mitchel","Mitchell","Mittie","Modesta","Modesto","Mohamed","Mohammad","Mohammed","Moises","Mollie","Molly","Mona","Monica","Monique","Monroe","Monserrat","Monserrate","Montana","Monte","Monty","Morgan","Moriah","Morris","Mortimer","Morton","Mose","Moses","Moshe","Mossie","Mozell","Mozelle","Muhammad","Muriel","Murl","Murphy","Murray","Mustafa","Mya","Myah","Mylene","Myles","Myra","Myriam","Myrl","Myrna","Myron","Myrtice","Myrtie","Myrtis","Myrtle","Nadia","Nakia","Name","Nannie","Naomi","Naomie","Napoleon","Narciso","Nash","Nasir","Nat","Natalia","Natalie","Natasha","Nathan","Nathanael","Nathanial","Nathaniel","Nathen","Nayeli","Neal","Ned","Nedra","Neha","Neil","Nelda","Nella","Nelle","Nellie","Nels","Nelson","Neoma","Nestor","Nettie","Neva","Newell","Newton","Nia","Nicholas","Nicholaus","Nichole","Nick","Nicklaus","Nickolas","Nico","Nicola","Nicolas","Nicole","Nicolette","Nigel","Nikita","Nikki","Nikko","Niko","Nikolas","Nils","Nina","Noah","Noble","Noe","Noel","Noelia","Noemi","Noemie","Noemy","Nola","Nolan","Nona","Nora","Norbert","Norberto","Norene","Norma","Norris","Norval","Norwood","Nova","Novella","Nya","Nyah","Nyasia","Obie","Oceane","Ocie","Octavia","Oda","Odell","Odessa","Odie","Ofelia","Okey","Ola","Olaf","Ole","Olen","Oleta","Olga","Olin","Oliver","Ollie","Oma","Omari","Omer","Ona","Onie","Opal","Ophelia","Ora","Oral","Oran","Oren","Orie","Orin","Orion","Orland","Orlando","Orlo","Orpha","Orrin","Orval","Orville","Osbaldo","Osborne","Oscar","Osvaldo","Oswald","Oswaldo","Otha","Otho","Otilia","Otis","Ottilie","Ottis","Otto","Ova","Owen","Ozella","Ozzie","Pablo","Paige","Palma","Pamela","Pansy","Paolo","Paris","Parker","Pascale","Pasquale","Pat","Patience","Patricia","Patrick","Patsy","Pattie","Paul","Paula","Pauline","Paxton","Payton","Pearl","Pearlie","Pearline","Pedro","Peggie","Penelope","Percival","Percy","Perry","Pete","Peter","Petra","Peyton","Philip","Phoebe","Phyllis","Pierce","Pierre","Pietro","Pink","Pinkie","Piper","Polly","Porter","Precious","Presley","Preston","Price","Prince","Princess","Priscilla","Providenci","Prudence","Queen","Queenie","Quentin","Quincy","Quinn","Quinten","Quinton","Rachael","Rachel","Rachelle","Rae","Raegan","Rafael","Rafaela","Raheem","Rahsaan","Rahul","Raina","Raleigh","Ralph","Ramiro","Ramon","Ramona","Randal","Randall","Randi","Randy","Ransom","Raoul","Raphael","Raphaelle","Raquel","Rashad","Rashawn","Rasheed","Raul","Raven","Ray","Raymond","Raymundo","Reagan","Reanna","Reba","Rebeca","Rebecca","Rebeka","Rebekah","Reece","Reed","Reese","Regan","Reggie","Reginald","Reid","Reilly","Reina","Reinhold","Remington","Rene","Renee","Ressie","Reta","Retha","Retta","Reuben","Reva","Rex","Rey","Reyes","Reymundo","Reyna","Reynold","Rhea","Rhett","Rhianna","Rhiannon","Rhoda","Ricardo","Richard","Richie","Richmond","Rick","Rickey","Rickie","Ricky","Rico","Rigoberto","Riley","Rita","River","Robb","Robbie","Robert","Roberta","Roberto","Robin","Robyn","Rocio","Rocky","Rod","Roderick","Rodger","Rodolfo","Rodrick","Rodrigo","Roel","Rogelio","Roger","Rogers","Rolando","Rollin","Roma","Romaine","Roman","Ron","Ronaldo","Ronny","Roosevelt","Rory","Rosa","Rosalee","Rosalia","Rosalind","Rosalinda","Rosalyn","Rosamond","Rosanna","Rosario","Roscoe","Rose","Rosella","Roselyn","Rosemarie","Rosemary","Rosendo","Rosetta","Rosie","Rosina","Roslyn","Ross","Rossie","Rowan","Rowena","Rowland","Roxane","Roxanne","Roy","Royal","Royce","Rozella","Ruben","Rubie","Ruby","Rubye","Rudolph","Rudy","Rupert","Russ","Russel","Russell","Rusty","Ruth","Ruthe","Ruthie","Ryan","Ryann","Ryder","Rylan","Rylee","Ryleigh","Ryley","Sabina","Sabrina","Sabryna","Sadie","Sadye","Sage","Saige","Sallie","Sally","Salma","Salvador","Salvatore","Sam","Samanta","Samantha","Samara","Samir","Sammie","Sammy","Samson","Sandra","Sandrine","Sandy","Sanford","Santa","Santiago","Santina","Santino","Santos","Sarah","Sarai","Sarina","Sasha","Saul","Savanah","Savanna","Savannah","Savion","Scarlett","Schuyler","Scot","Scottie","Scotty","Seamus","Sean","Sebastian","Sedrick","Selena","Selina","Selmer","Serena","Serenity","Seth","Shad","Shaina","Shakira","Shana","Shane","Shanel","Shanelle","Shania","Shanie","Shaniya","Shanna","Shannon","Shanny","Shanon","Shany","Sharon","Shaun","Shawn","Shawna","Shaylee","Shayna","Shayne","Shea","Sheila","Sheldon","Shemar","Sheridan","Sherman","Sherwood","Shirley","Shyann","Shyanne","Sibyl","Sid","Sidney","Sienna","Sierra","Sigmund","Sigrid","Sigurd","Silas","Sim","Simeon","Simone","Sincere","Sister","Skye","Skyla","Skylar","Sofia","Soledad","Solon","Sonia","Sonny","Sonya","Sophia","Sophie","Spencer","Stacey","Stacy","Stan","Stanford","Stanley","Stanton","Stefan","Stefanie","Stella","Stephan","Stephania","Stephanie","Stephany","Stephen","Stephon","Sterling","Steve","Stevie","Stewart","Stone","Stuart","Summer","Sunny","Susan","Susana","Susanna","Susie","Suzanne","Sven","Syble","Sydnee","Sydney","Sydni","Sydnie","Sylvan","Sylvester","Sylvia","Tabitha","Tad","Talia","Talon","Tamara","Tamia","Tania","Tanner","Tanya","Tara","Taryn","Tate","Tatum","Tatyana","Taurean","Tavares","Taya","Taylor","Teagan","Ted","Telly","Terence","Teresa","Terrance","Terrell","Terrence","Terrill","Terry","Tess","Tessie","Tevin","Thad","Thaddeus","Thalia","Thea","Thelma","Theo","Theodora","Theodore","Theresa","Therese","Theresia","Theron","Thomas","Thora","Thurman","Tia","Tiana","Tianna","Tiara","Tierra","Tiffany","Tillman","Timmothy","Timmy","Timothy","Tina","Tito","Titus","Tobin","Toby","Tod","Tom","Tomas","Tomasa","Tommie","Toney","Toni","Tony","Torey","Torrance","Torrey","Toy","Trace","Tracey","Tracy","Travis","Travon","Tre","Tremaine","Tremayne","Trent","Trenton","Tressa","Tressie","Treva","Trever","Trevion","Trevor","Trey","Trinity","Trisha","Tristian","Tristin","Triston","Troy","Trudie","Trycia","Trystan","Turner","Twila","Tyler","Tyra","Tyree","Tyreek","Tyrel","Tyrell","Tyrese","Tyrique","Tyshawn","Tyson","Ubaldo","Ulices","Ulises","Una","Unique","Urban","Uriah","Uriel","Ursula","Vada","Valentin","Valentina","Valentine","Valerie","Vallie","Van","Vance","Vanessa","Vaughn","Veda","Velda","Vella","Velma","Velva","Vena","Verda","Verdie","Vergie","Verla","Verlie","Vern","Verna","Verner","Vernice","Vernie","Vernon","Verona","Veronica","Vesta","Vicenta","Vicente","Vickie","Vicky","Victor","Victoria","Vida","Vidal","Vilma","Vince","Vincent","Vincenza","Vincenzo","Vinnie","Viola","Violet","Violette","Virgie","Virgil","Virginia","Virginie","Vita","Vito","Viva","Vivian","Viviane","Vivianne","Vivien","Vivienne","Vladimir","Wade","Waino","Waldo","Walker","Wallace","Walter","Walton","Wanda","Ward","Warren","Watson","Wava","Waylon","Wayne","Webster","Weldon","Wellington","Wendell","Wendy","Werner","Westley","Weston","Whitney","Wilber","Wilbert","Wilburn","Wiley","Wilford","Wilfred","Wilfredo","Wilfrid","Wilhelm","Wilhelmine","Will","Willa","Willard","William","Willie","Willis","Willow","Willy","Wilma","Wilmer","Wilson","Wilton","Winfield","Winifred","Winnifred","Winona","Winston","Woodrow","Wyatt","Wyman","Xander","Xavier","Xzavier","Yadira","Yasmeen","Yasmin","Yasmine","Yazmin","Yesenia","Yessenia","Yolanda","Yoshiko","Yvette","Yvonne","Zachariah","Zachary","Zachery","Zack","Zackary","Zackery","Zakary","Zander","Zane","Zaria","Zechariah","Zelda","Zella","Zelma","Zena","Zetta","Zion","Zita","Zoe","Zoey","Zoie","Zoila","Zola","Zora","Zula"],"last_name":["Abbott","Abernathy","Abshire","Adams","Altenwerth","Anderson","Ankunding","Armstrong","Auer","Aufderhar","Bahringer","Bailey","Balistreri","Barrows","Bartell","Bartoletti","Barton","Bashirian","Batz","Bauch","Baumbach","Bayer","Beahan","Beatty","Bechtelar","Becker","Bednar","Beer","Beier","Berge","Bergnaum","Bergstrom","Bernhard","Bernier","Bins","Blanda","Blick","Block","Bode","Boehm","Bogan","Bogisich","Borer","Bosco","Botsford","Boyer","Boyle","Bradtke","Brakus","Braun","Breitenberg","Brekke","Brown","Bruen","Buckridge","Carroll","Carter","Cartwright","Casper","Cassin","Champlin","Christiansen","Cole","Collier","Collins","Conn","Connelly","Conroy","Considine","Corkery","Cormier","Corwin","Cremin","Crist","Crona","Cronin","Crooks","Cruickshank","Cummerata","Cummings","Dach","D'Amore","Daniel","Dare","Daugherty","Davis","Deckow","Denesik","Dibbert","Dickens","Dicki","Dickinson","Dietrich","Donnelly","Dooley","Douglas","Doyle","DuBuque","Durgan","Ebert","Effertz","Eichmann","Emard","Emmerich","Erdman","Ernser","Fadel","Fahey","Farrell","Fay","Feeney","Feest","Feil","Ferry","Fisher","Flatley","Frami","Franecki","Friesen","Fritsch","Funk","Gaylord","Gerhold","Gerlach","Gibson","Gislason","Gleason","Gleichner","Glover","Goldner","Goodwin","Gorczany","Gottlieb","Goyette","Grady","Graham","Grant","Green","Greenfelder","Greenholt","Grimes","Gulgowski","Gusikowski","Gutkowski","Gutmann","Haag","Hackett","Hagenes","Hahn","Haley","Halvorson","Hamill","Hammes","Hand","Hane","Hansen","Harber","Harris","Hartmann","Harvey","Hauck","Hayes","Heaney","Heathcote","Hegmann","Heidenreich","Heller","Herman","Hermann","Hermiston","Herzog","Hessel","Hettinger","Hickle","Hilll","Hills","Hilpert","Hintz","Hirthe","Hodkiewicz","Hoeger","Homenick","Hoppe","Howe","Howell","Hudson","Huel","Huels","Hyatt","Jacobi","Jacobs","Jacobson","Jakubowski","Jaskolski","Jast","Jenkins","Jerde","Johns","Johnson","Johnston","Jones","Kassulke","Kautzer","Keebler","Keeling","Kemmer","Kerluke","Kertzmann","Kessler","Kiehn","Kihn","Kilback","King","Kirlin","Klein","Kling","Klocko","Koch","Koelpin","Koepp","Kohler","Konopelski","Koss","Kovacek","Kozey","Krajcik","Kreiger","Kris","Kshlerin","Kub","Kuhic","Kuhlman","Kuhn","Kulas","Kunde","Kunze","Kuphal","Kutch","Kuvalis","Labadie","Lakin","Lang","Langosh","Langworth","Larkin","Larson","Leannon","Lebsack","Ledner","Leffler","Legros","Lehner","Lemke","Lesch","Leuschke","Lind","Lindgren","Littel","Little","Lockman","Lowe","Lubowitz","Lueilwitz","Luettgen","Lynch","Macejkovic","MacGyver","Maggio","Mann","Mante","Marks","Marquardt","Marvin","Mayer","Mayert","McClure","McCullough","McDermott","McGlynn","McKenzie","McLaughlin","Medhurst","Mertz","Metz","Miller","Mills","Mitchell","Moen","Mohr","Monahan","Moore","Morar","Morissette","Mosciski","Mraz","Mueller","Muller","Murazik","Murphy","Murray","Nader","Nicolas","Nienow","Nikolaus","Nitzsche","Nolan","Oberbrunner","O'Connell","O'Conner","O'Hara","O'Keefe","O'Kon","Okuneva","Olson","Ondricka","O'Reilly","Orn","Ortiz","Osinski","Pacocha","Padberg","Pagac","Parisian","Parker","Paucek","Pfannerstill","Pfeffer","Pollich","Pouros","Powlowski","Predovic","Price","Prohaska","Prosacco","Purdy","Quigley","Quitzon","Rath","Ratke","Rau","Raynor","Reichel","Reichert","Reilly","Reinger","Rempel","Renner","Reynolds","Rice","Rippin","Ritchie","Robel","Roberts","Rodriguez","Rogahn","Rohan","Rolfson","Romaguera","Roob","Rosenbaum","Rowe","Ruecker","Runolfsdottir","Runolfsson","Runte","Russel","Rutherford","Ryan","Sanford","Satterfield","Sauer","Sawayn","Schaden","Schaefer","Schamberger","Schiller","Schimmel","Schinner","Schmeler","Schmidt","Schmitt","Schneider","Schoen","Schowalter","Schroeder","Schulist","Schultz","Schumm","Schuppe","Schuster","Senger","Shanahan","Shields","Simonis","Sipes","Skiles","Smith","Smitham","Spencer","Spinka","Sporer","Stamm","Stanton","Stark","Stehr","Steuber","Stiedemann","Stokes","Stoltenberg","Stracke","Streich","Stroman","Strosin","Swaniawski","Swift","Terry","Thiel","Thompson","Tillman","Torp","Torphy","Towne","Toy","Trantow","Tremblay","Treutel","Tromp","Turcotte","Turner","Ullrich","Upton","Vandervort","Veum","Volkman","Von","VonRueden","Waelchi","Walker","Walsh","Walter","Ward","Waters","Watsica","Weber","Wehner","Weimann","Weissnat","Welch","West","White","Wiegand","Wilderman","Wilkinson","Will","Williamson","Willms","Windler","Wintheiser","Wisoky","Wisozk","Witting","Wiza","Wolf","Wolff","Wuckert","Wunsch","Wyman","Yost","Yundt","Zboncak","Zemlak","Ziemann","Zieme","Zulauf"],"number":["777","69","34","{number}4"],"domain":["{noun}{tld}","{noun}{noun}{tld}"],"noun":["abc","acorn","adze","aphx","bat","ball","beach","bell","cat","chalk","dog","dent","elp"],"tld":[".com",".com.au",".co",".co.nz",".org",".info",".co.uk",".tech",".io",".xyz"]}
|
data/examples/faker.rb
CHANGED
data/lib/calyx.rb
CHANGED
@@ -8,11 +8,15 @@ require 'calyx/errors'
|
|
8
8
|
require 'calyx/format'
|
9
9
|
require 'calyx/registry'
|
10
10
|
require 'calyx/modifiers'
|
11
|
-
require 'calyx/
|
12
|
-
require 'calyx/
|
13
|
-
require 'calyx/production/
|
14
|
-
require 'calyx/
|
15
|
-
require 'calyx/
|
16
|
-
require 'calyx/
|
17
|
-
require 'calyx/
|
18
|
-
require 'calyx/
|
11
|
+
require 'calyx/prefix_tree'
|
12
|
+
require 'calyx/mapping'
|
13
|
+
require 'calyx/production/affix_table'
|
14
|
+
require 'calyx/syntax/token'
|
15
|
+
require 'calyx/syntax/memo'
|
16
|
+
require 'calyx/syntax/unique'
|
17
|
+
require 'calyx/syntax/choices'
|
18
|
+
require 'calyx/syntax/concat'
|
19
|
+
require 'calyx/syntax/expression'
|
20
|
+
require 'calyx/syntax/non_terminal'
|
21
|
+
require 'calyx/syntax/terminal'
|
22
|
+
require 'calyx/syntax/weighted_choices'
|
data/lib/calyx/format.rb
CHANGED
@@ -45,6 +45,11 @@ module Calyx
|
|
45
45
|
|
46
46
|
class YAMLGrammar
|
47
47
|
def initialize(filename)
|
48
|
+
warn [
|
49
|
+
"NOTE: Loading grammars defined in YAML is deprecated. ",
|
50
|
+
"Use the JSON format instead: `Calyx::Format.load(\"hello.json\")`"
|
51
|
+
].join
|
52
|
+
|
48
53
|
require 'yaml'
|
49
54
|
@filename = filename
|
50
55
|
@contents = File.read(@filename)
|
data/lib/calyx/grammar.rb
CHANGED
@@ -33,6 +33,10 @@ module Calyx
|
|
33
33
|
#
|
34
34
|
# @param [Module] module_name
|
35
35
|
def modifier(module_name)
|
36
|
+
warn [
|
37
|
+
"NOTE: Loading modifiers via grammar class methods is deprecated.",
|
38
|
+
"Alternative API TBD. For now this method still works."
|
39
|
+
].join
|
36
40
|
registry.modifier(module_name)
|
37
41
|
end
|
38
42
|
|
@@ -41,6 +45,10 @@ module Calyx
|
|
41
45
|
# @param [Symbol] name
|
42
46
|
# @param [Hash<Regex,String>] pairs
|
43
47
|
def mapping(name, pairs)
|
48
|
+
warn [
|
49
|
+
"NOTE: The fixed `mapping` class method is deprecated.",
|
50
|
+
"This still works but will be replaced with a new mapping format."
|
51
|
+
].join
|
44
52
|
registry.mapping(name, pairs)
|
45
53
|
end
|
46
54
|
|
@@ -50,6 +58,10 @@ module Calyx
|
|
50
58
|
# @yieldparam [String] the input string to be processed by the filter
|
51
59
|
# @yieldreturn [String] the processed output string
|
52
60
|
def filter(name, &block)
|
61
|
+
warn [
|
62
|
+
"NOTE: The fixed `filter` class method is deprecated.",
|
63
|
+
"This will be removed in 0.22. Use the API for modifers instead."
|
64
|
+
].join
|
53
65
|
registry.filter(name, &block)
|
54
66
|
end
|
55
67
|
|
data/lib/calyx/modifiers.rb
CHANGED
@@ -0,0 +1,191 @@
|
|
1
|
+
module Calyx
|
2
|
+
PrefixNode = Struct.new(:children, :index)
|
3
|
+
PrefixEdge = Struct.new(:node, :label, :wildcard?)
|
4
|
+
PrefixMatch = Struct.new(:label, :index, :captured)
|
5
|
+
|
6
|
+
class PrefixTree
|
7
|
+
def initialize
|
8
|
+
@root = PrefixNode.new([], nil)
|
9
|
+
end
|
10
|
+
|
11
|
+
def insert(label, index)
|
12
|
+
if @root.children.empty?
|
13
|
+
@root.children << PrefixEdge.new(PrefixNode.new([], index), label, false)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_all(elements)
|
18
|
+
elements.each_with_index { |el, i| add(el, i) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def add(label, index)
|
22
|
+
parts = label.split(/(%)/).reject { |p| p.empty? }
|
23
|
+
parts_count = parts.count
|
24
|
+
|
25
|
+
# Can’t use more than one capture symbol which gives the following splits:
|
26
|
+
# - ["literal"]
|
27
|
+
# - ["%", "literal"]
|
28
|
+
# - ["literal", "%"]
|
29
|
+
# - ["literal", "%", "literal"]
|
30
|
+
if parts_count > 3
|
31
|
+
raise "Too many capture patterns: #{label}"
|
32
|
+
end
|
33
|
+
|
34
|
+
current_node = @root
|
35
|
+
|
36
|
+
parts.each_with_index do |part, i|
|
37
|
+
index_slot = (i == parts_count - 1) ? index : nil
|
38
|
+
is_wildcard = part == "%"
|
39
|
+
matched_prefix = false
|
40
|
+
|
41
|
+
current_node.children.each_with_index do |edge, j|
|
42
|
+
prefix = common_prefix(edge.label, part)
|
43
|
+
unless prefix.empty?
|
44
|
+
matched_prefix = true
|
45
|
+
|
46
|
+
if prefix == edge.label
|
47
|
+
# Current prefix matches the edge label so we can continue down the
|
48
|
+
# tree without mutating the current branch
|
49
|
+
next_node = PrefixNode.new([], index_slot)
|
50
|
+
current_node.children << PrefixEdge.new(next_node, label.delete_prefix(prefix), is_wildcard)
|
51
|
+
else
|
52
|
+
# We have a partial match on current edge so replace it with the new
|
53
|
+
# prefix then rejoin the remaining suffix to the existing branch
|
54
|
+
edge.label = edge.label.delete_prefix(prefix)
|
55
|
+
prefix_node = PrefixNode.new([edge], nil)
|
56
|
+
next_node = PrefixNode.new([], index_slot)
|
57
|
+
prefix_node.children << PrefixEdge.new(next_node, label.delete_prefix(prefix), is_wildcard)
|
58
|
+
current_node.children[j] = PrefixEdge.new(prefix_node, prefix, is_wildcard)
|
59
|
+
end
|
60
|
+
|
61
|
+
current_node = next_node
|
62
|
+
break
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# No existing edges have a common prefix so push a new branch onto the tree
|
67
|
+
# at the current level
|
68
|
+
unless matched_prefix
|
69
|
+
next_edge = PrefixEdge.new(PrefixNode.new([], index_slot), part, is_wildcard)
|
70
|
+
current_node.children << next_edge
|
71
|
+
current_node = next_edge.node
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# This was basically ported from the pseudocode found on Wikipedia to Ruby,
|
77
|
+
# with a lot of extra internal state tracking that is totally absent from
|
78
|
+
# most algorithmic descriptions. This ends up making a real mess of the
|
79
|
+
# expression of the algorithm, mostly due to choices and conflicts between
|
80
|
+
# whether to go with the standard iterative and procedural flow of statements
|
81
|
+
# or use a more functional style. A mangle that speaks to the questions
|
82
|
+
# around portability between different languages. Is this codebase a design
|
83
|
+
# prototype? Is it an evolving example that should guide implementations in
|
84
|
+
# other languages?
|
85
|
+
#
|
86
|
+
# The problem with code like this is that it’s a bit of a maintenance burden
|
87
|
+
# if not structured compactly and precisely enough to not matter and having
|
88
|
+
# enough tests passing that it lasts for a few years without becoming a
|
89
|
+
# nuisance or leading to too much nonsense.
|
90
|
+
#
|
91
|
+
# There are several ways to implement this, some of these may work better or
|
92
|
+
# worse, and this might be quite different across multiple languages so what
|
93
|
+
# goes well in one place could suck in other places. The only way to make a
|
94
|
+
# good decision around it is to learn via testing and experiments.
|
95
|
+
#
|
96
|
+
# Alternative possible implementations:
|
97
|
+
# - Regex compilation on registration, use existing legacy mapping code
|
98
|
+
# - Prefix tree, trie, radix tree/trie, compressed bitpatterns, etc
|
99
|
+
# - Split string flip, imperative list processing hacks
|
100
|
+
# (easier for more people to contribute?)
|
101
|
+
def lookup(label)
|
102
|
+
current_node = @root
|
103
|
+
chars_consumed = 0
|
104
|
+
chars_captured = nil
|
105
|
+
label_length = label.length
|
106
|
+
|
107
|
+
# Traverse the tree until reaching a leaf node or all input characters are consumed
|
108
|
+
while current_node != nil && !current_node.children.empty? && chars_consumed < label_length
|
109
|
+
# Candidate edge pointing to the next node to check
|
110
|
+
candidate_edge = nil
|
111
|
+
|
112
|
+
# Traverse from the current node down the tree looking for candidate edges
|
113
|
+
current_node.children.each do |edge|
|
114
|
+
# Generate a suffix based on the prefix already consumed
|
115
|
+
sub_label = label[chars_consumed, label_length]
|
116
|
+
|
117
|
+
# If this edge is a wildcard we check the next level of the tree
|
118
|
+
if edge.wildcard?
|
119
|
+
# Wildcard pattern is anchored to the end of the string so we can
|
120
|
+
# consume all remaining characters and pick this as an edge candidate
|
121
|
+
if edge.node.children.empty?
|
122
|
+
chars_captured = label[chars_consumed, sub_label.length]
|
123
|
+
chars_consumed += sub_label.length
|
124
|
+
candidate_edge = edge
|
125
|
+
break
|
126
|
+
end
|
127
|
+
|
128
|
+
# The wildcard is anchored to the start or embedded in the middle of
|
129
|
+
# the string so we traverse this edge and scan the next level of the
|
130
|
+
# tree with a greedy lookahead. This means we will always match as
|
131
|
+
# much of the wildcard string as possible when there is a trailing
|
132
|
+
# suffix that could be repeated several times within the characters
|
133
|
+
# consumed by the wildcard pattern.
|
134
|
+
#
|
135
|
+
# For example, we expect `"te%s"` to match on `"tests"` rather than
|
136
|
+
# bail out after matching the first three characters `"tes"`.
|
137
|
+
edge.node.children.each do |lookahead_edge|
|
138
|
+
prefix = sub_label.rindex(lookahead_edge.label)
|
139
|
+
if prefix
|
140
|
+
chars_captured = label[chars_consumed, prefix]
|
141
|
+
chars_consumed += prefix + lookahead_edge.label.length
|
142
|
+
candidate_edge = lookahead_edge
|
143
|
+
break
|
144
|
+
end
|
145
|
+
end
|
146
|
+
# We found a candidate so no need to continue checking edges
|
147
|
+
break if candidate_edge
|
148
|
+
else
|
149
|
+
# Look for a common prefix on this current edge label and the remaining suffix
|
150
|
+
if edge.label == common_prefix(edge.label, sub_label)
|
151
|
+
chars_consumed += edge.label.length
|
152
|
+
candidate_edge = edge
|
153
|
+
break
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
if candidate_edge
|
159
|
+
# Traverse to the node our edge candidate points to
|
160
|
+
current_node = candidate_edge.node
|
161
|
+
else
|
162
|
+
# We didn’t find a possible edge candidate so bail out of the loop
|
163
|
+
current_node = nil
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# In order to return a match, the following postconditions must be true:
|
168
|
+
# - We are pointing to a leaf node
|
169
|
+
# - We have consumed all the input characters
|
170
|
+
if current_node != nil and current_node.index != nil and chars_consumed == label_length
|
171
|
+
PrefixMatch.new(label, current_node.index, chars_captured)
|
172
|
+
else
|
173
|
+
nil
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def common_prefix(a, b)
|
178
|
+
selected_prefix = ""
|
179
|
+
min_index_length = a < b ? a.length : b.length
|
180
|
+
index = 0
|
181
|
+
|
182
|
+
until index == min_index_length
|
183
|
+
return selected_prefix if a[index] != b[index]
|
184
|
+
selected_prefix += a[index]
|
185
|
+
index += 1
|
186
|
+
end
|
187
|
+
|
188
|
+
selected_prefix
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Calyx
|
2
|
+
module Production
|
3
|
+
# A type of production rule representing a bidirectional dictionary of
|
4
|
+
# mapping pairs that can be used as a substitution table in template
|
5
|
+
# expressions.
|
6
|
+
class AffixTable
|
7
|
+
def self.parse(productions, registry)
|
8
|
+
# TODO: handle wildcard expressions
|
9
|
+
self.new(productions)
|
10
|
+
end
|
11
|
+
|
12
|
+
# %es
|
13
|
+
# prefix: nil, suffix: 'es'
|
14
|
+
# match: 'buses' -> ends_with(suffix)
|
15
|
+
|
16
|
+
# %y
|
17
|
+
# prefix: nil, suffix: 'ies'
|
18
|
+
|
19
|
+
def initialize(mapping)
|
20
|
+
@lhs_index = PrefixTree.new
|
21
|
+
@rhs_index = PrefixTree.new
|
22
|
+
|
23
|
+
@lhs_list = mapping.keys
|
24
|
+
@rhs_list = mapping.values
|
25
|
+
|
26
|
+
@lhs_index.add_all(@lhs_list)
|
27
|
+
@rhs_index.add_all(@rhs_list)
|
28
|
+
end
|
29
|
+
|
30
|
+
def value_for(key)
|
31
|
+
match = @lhs_index.lookup(key)
|
32
|
+
result = @rhs_list[match.index]
|
33
|
+
|
34
|
+
if match.captured
|
35
|
+
result.sub("%", match.captured)
|
36
|
+
else
|
37
|
+
result
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def key_for(value)
|
42
|
+
match = @rhs_index.lookup(value)
|
43
|
+
result = @lhs_list[match.index]
|
44
|
+
|
45
|
+
if match.captured
|
46
|
+
result.sub("%", match.captured)
|
47
|
+
else
|
48
|
+
result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/calyx/registry.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module Calyx
|
2
2
|
# Lookup table of all the available rules in the grammar.
|
3
3
|
class Registry
|
4
|
-
attr_reader :rules, :transforms, :modifiers
|
4
|
+
attr_reader :rules, :dicts, :transforms, :modifiers
|
5
5
|
|
6
6
|
# Construct an empty registry.
|
7
7
|
def initialize
|
8
8
|
@options = Options.new({})
|
9
9
|
@rules = {}
|
10
|
+
@dicts = {}
|
10
11
|
@transforms = {}
|
11
12
|
@modifiers = Modifiers.new
|
12
13
|
end
|
@@ -67,7 +68,17 @@ module Calyx
|
|
67
68
|
# @param [Symbol] name
|
68
69
|
# @param [Array] productions
|
69
70
|
def define_rule(name, trace, productions)
|
70
|
-
|
71
|
+
symbol = name.to_sym
|
72
|
+
|
73
|
+
# TODO: this could be tidied up by consolidating parsing in a single class
|
74
|
+
branch = Rule.build_ast(productions, self)
|
75
|
+
|
76
|
+
# If the static rule is a map of k=>v pairs then add it to the lookup dict
|
77
|
+
if branch.is_a?(Production::AffixTable)
|
78
|
+
dicts[symbol] = branch
|
79
|
+
else
|
80
|
+
rules[symbol] = Rule.new(symbol, branch, trace)
|
81
|
+
end
|
71
82
|
end
|
72
83
|
|
73
84
|
# Defines a rule in the temporary evaluation context.
|
@@ -76,7 +87,7 @@ module Calyx
|
|
76
87
|
# @param [Array] productions
|
77
88
|
def define_context_rule(name, trace, productions)
|
78
89
|
productions = [productions] unless productions.is_a?(Enumerable)
|
79
|
-
context[name.to_sym] = Rule.new(name.to_sym,
|
90
|
+
context[name.to_sym] = Rule.new(name.to_sym, Rule.build_ast(productions, self), trace)
|
80
91
|
end
|
81
92
|
|
82
93
|
# Expands the given symbol to its rule.
|
@@ -90,7 +101,7 @@ module Calyx
|
|
90
101
|
if @options.strict?
|
91
102
|
raise Errors::UndefinedRule.new(@last_expansion, symbol)
|
92
103
|
else
|
93
|
-
expansion =
|
104
|
+
expansion = Syntax::Terminal.new('')
|
94
105
|
end
|
95
106
|
end
|
96
107
|
|
@@ -98,12 +109,12 @@ module Calyx
|
|
98
109
|
expansion
|
99
110
|
end
|
100
111
|
|
101
|
-
# Applies the given modifier function to the given value to
|
112
|
+
# Applies the given modifier function to the given value to filter it.
|
102
113
|
#
|
103
114
|
# @param [Symbol] name
|
104
115
|
# @param [String] value
|
105
116
|
# @return [String]
|
106
|
-
def
|
117
|
+
def expand_filter(name, value)
|
107
118
|
if transforms.key?(name)
|
108
119
|
transforms[name].call(value)
|
109
120
|
else
|
@@ -111,6 +122,23 @@ module Calyx
|
|
111
122
|
end
|
112
123
|
end
|
113
124
|
|
125
|
+
# Applies a modifier to substitute the value with a bidirectional map
|
126
|
+
# lookup.
|
127
|
+
#
|
128
|
+
# @param [Symbol] name
|
129
|
+
# @param [String] value
|
130
|
+
# @param [Symbol] direction :left or :right
|
131
|
+
# @return [String]
|
132
|
+
def expand_map(name, value, direction)
|
133
|
+
map_lookup = dicts[name]
|
134
|
+
|
135
|
+
if direction == :left
|
136
|
+
map_lookup.key_for(value)
|
137
|
+
else
|
138
|
+
map_lookup.value_for(value)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
114
142
|
# Expands a memoized rule symbol by evaluating it and storing the result
|
115
143
|
# for later.
|
116
144
|
#
|
@@ -128,7 +156,7 @@ module Calyx
|
|
128
156
|
uniques[symbol] = [] if uniques[symbol].nil?
|
129
157
|
|
130
158
|
while pending
|
131
|
-
if uniques[symbol].size ==
|
159
|
+
if uniques[symbol].size == expand(symbol).size
|
132
160
|
uniques[symbol] = []
|
133
161
|
pending = false
|
134
162
|
end
|
@@ -197,15 +225,5 @@ module Calyx
|
|
197
225
|
end
|
198
226
|
}
|
199
227
|
end
|
200
|
-
|
201
|
-
def construct_rule(productions)
|
202
|
-
if productions.first.is_a?(Hash)
|
203
|
-
Production::WeightedChoices.parse(productions.first.to_a, self)
|
204
|
-
elsif productions.first.is_a?(Enumerable)
|
205
|
-
Production::WeightedChoices.parse(productions, self)
|
206
|
-
else
|
207
|
-
Production::Choices.parse(productions, self)
|
208
|
-
end
|
209
|
-
end
|
210
228
|
end
|
211
229
|
end
|