calyx 0.18.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +33 -0
  3. data/calyx.gemspec +2 -2
  4. data/examples/faker.json +1 -0
  5. data/examples/faker.rb +1 -1
  6. data/lib/calyx.rb +12 -8
  7. data/lib/calyx/format.rb +5 -0
  8. data/lib/calyx/grammar.rb +12 -0
  9. data/lib/calyx/mapping.rb +15 -0
  10. data/lib/calyx/modifiers.rb +8 -0
  11. data/lib/calyx/prefix_tree.rb +191 -0
  12. data/lib/calyx/production/affix_table.rb +53 -0
  13. data/lib/calyx/production/uniform_branch.rb +6 -0
  14. data/lib/calyx/production/weighted_branch.rb +6 -0
  15. data/lib/calyx/registry.rb +35 -17
  16. data/lib/calyx/rule.rb +25 -4
  17. data/lib/calyx/{production → syntax}/choices.rb +1 -1
  18. data/lib/calyx/{production → syntax}/concat.rb +18 -22
  19. data/lib/calyx/syntax/expression.rb +87 -0
  20. data/lib/calyx/{production → syntax}/memo.rb +1 -1
  21. data/lib/calyx/{production → syntax}/non_terminal.rb +1 -1
  22. data/lib/calyx/syntax/paired_mapping.rb +53 -0
  23. data/lib/calyx/{production → syntax}/terminal.rb +1 -1
  24. data/lib/calyx/syntax/token.rb +9 -0
  25. data/lib/calyx/{production → syntax}/unique.rb +1 -1
  26. data/lib/calyx/{production → syntax}/weighted_choices.rb +9 -2
  27. data/lib/calyx/version.rb +1 -1
  28. metadata +27 -86
  29. data/.travis.yml +0 -9
  30. data/docs/404.html +0 -7
  31. data/docs/CNAME +0 -1
  32. data/docs/_config.yml +0 -27
  33. data/docs/_data/breadcrumbs.yml +0 -9
  34. data/docs/_data/docs.yml +0 -35
  35. data/docs/_data/examples.yml +0 -9
  36. data/docs/_includes/breadcrumbs.html +0 -36
  37. data/docs/_includes/contents.html +0 -12
  38. data/docs/_includes/icon-github.html +0 -4
  39. data/docs/_includes/icon-rubygems.html +0 -9
  40. data/docs/_includes/navbar.html +0 -24
  41. data/docs/_includes/pagebar.html +0 -12
  42. data/docs/_layouts/default.html +0 -13
  43. data/docs/_layouts/docs.html +0 -14
  44. data/docs/_layouts/home.html +0 -13
  45. data/docs/_layouts/page.html +0 -20
  46. data/docs/_posts/2017-09-14-welcome-to-jekyll.markdown +0 -25
  47. data/docs/_posts/2017-09-21-0.17.0-released.md +0 -10
  48. data/docs/_styles/card.scss +0 -7
  49. data/docs/_styles/colors.scss +0 -18
  50. data/docs/_styles/content.scss +0 -57
  51. data/docs/_styles/cta.scss +0 -25
  52. data/docs/_styles/grid.scss +0 -22
  53. data/docs/_styles/media.scss +0 -50
  54. data/docs/_styles/menu.scss +0 -54
  55. data/docs/_styles/modifiers.scss +0 -3
  56. data/docs/_styles/navbar.scss +0 -161
  57. data/docs/_styles/pagebar.scss +0 -32
  58. data/docs/_styles/reset.scss +0 -92
  59. data/docs/_styles/scale.scss +0 -23
  60. data/docs/_styles/spread.scss +0 -55
  61. data/docs/_styles/styleguide.scss +0 -52
  62. data/docs/_styles/syntax.scss +0 -84
  63. data/docs/_styles/typography.scss +0 -49
  64. data/docs/_styles/yard.scss +0 -36
  65. data/docs/api.html +0 -9662
  66. data/docs/assets/calyx-docs.css +0 -792
  67. data/docs/assets/calyx-flower-outline.svg +0 -202
  68. data/docs/assets/calyx-flower-reverse.svg +0 -202
  69. data/docs/assets/calyx-flower.svg +0 -202
  70. data/docs/assets/logo-small.png +0 -0
  71. data/docs/assets/logos/calyx-flower-1.svg +0 -22
  72. data/docs/assets/logos/calyx-flower-2.svg +0 -21
  73. data/docs/content/documentation.html +0 -20
  74. data/docs/content/examples.html +0 -12
  75. data/docs/content/examples/any-gradient.md +0 -32
  76. data/docs/content/examples/faker.md +0 -16
  77. data/docs/content/examples/tiny-woodland-bot.md +0 -24
  78. data/docs/content/guides/context.md +0 -45
  79. data/docs/content/guides/expressions.md +0 -175
  80. data/docs/content/guides/features.md +0 -50
  81. data/docs/content/guides/formats.md +0 -37
  82. data/docs/content/guides/installation.md +0 -51
  83. data/docs/content/guides/random.md +0 -100
  84. data/docs/content/guides/results.md +0 -62
  85. data/docs/content/index.html +0 -44
  86. data/docs/content/introduction.md +0 -23
  87. data/docs/content/introduction/concepts.md +0 -82
  88. data/docs/content/introduction/contributing.md +0 -43
  89. data/docs/content/introduction/tutorial.md +0 -129
  90. data/docs/content/styleguide.html +0 -71
  91. data/docs/docs.scss +0 -94
  92. data/docs/index.html +0 -12
  93. data/docs/package-lock.json +0 -1536
  94. data/docs/package.json +0 -16
  95. data/examples/faker.yml +0 -42
  96. data/lib/calyx/production/expression.rb +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b68a7d92d201b48a71da29760bebeb4e6571a672593621356708a1ea7add2d3b
4
- data.tar.gz: e78489cd83521b940642e64def32821f52d23830574360ca2fb3c532b626f388
3
+ metadata.gz: 8278055314ef40a029522a8237f5c1956e27b449b31bf4bb8d6d2d7e5b6ff904
4
+ data.tar.gz: ccc0ebfe719a5bfc88582dfb78225edb7562d6e3a7e23e672dcb2822d1c0b9a2
5
5
  SHA512:
6
- metadata.gz: 2192ebdf78abb6998cb8d176a4a42a229cd21fa7c9023abbd3a82f8b27fec4b5fa076e8bcb3bb6e18570eac8ae4976e3b85c7a9cc832d1b610e62b7c7ce43968
7
- data.tar.gz: 71d8a3847439e00a8a550bf70a2654bde7226c881449ac3a39e881ebcee6ffe1c4048318691c0b3435f89f4e4a34baf31dce8949f994e67fa26a7f400d026387
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', '~> 1.10'
22
- spec.add_development_dependency 'rake', '~> 10.0'
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
@@ -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
@@ -1,6 +1,6 @@
1
1
  require 'calyx'
2
2
 
3
- faker = Calyx::Grammar.load(__dir__ + '/faker.yml')
3
+ faker = Calyx::Grammar.load(__dir__ + '/faker.json')
4
4
 
5
5
  puts faker.generate(:full_name)
6
6
  puts faker.generate(:email)
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/production/memo'
12
- require 'calyx/production/unique'
13
- require 'calyx/production/choices'
14
- require 'calyx/production/concat'
15
- require 'calyx/production/expression'
16
- require 'calyx/production/non_terminal'
17
- require 'calyx/production/terminal'
18
- require 'calyx/production/weighted_choices'
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
 
@@ -0,0 +1,15 @@
1
+ module Calyx
2
+ class Mapping
3
+ def initialize
4
+ @key = "key"
5
+ @value = "value"
6
+ end
7
+
8
+ def call(input)
9
+ if @key == input then @value
10
+ else
11
+ ""
12
+ end
13
+ end
14
+ end
15
+ end
@@ -20,5 +20,13 @@ module Calyx
20
20
  value
21
21
  end
22
22
  end
23
+
24
+ def upper(value)
25
+ value.upcase
26
+ end
27
+
28
+ def lower(value)
29
+ value.downcase
30
+ end
23
31
  end
24
32
  end
@@ -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
@@ -0,0 +1,6 @@
1
+ module Calyx
2
+ module Productions
3
+ class UniformBranch
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Calyx
2
+ module Productions
3
+ class WeightedBranch
4
+ end
5
+ end
6
+ end
@@ -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
- rules[name.to_sym] = Rule.new(name.to_sym, construct_rule(productions), trace)
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, construct_rule(productions), trace)
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 = Production::Terminal.new('')
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 transform it.
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 transform(name, value)
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 == @rules[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