├── test ├── unit │ └── .placeholder └── selenium │ ├── .placeholder │ └── WebTest.php ├── assets └── .htaccess ├── favicon.png ├── .dockerignore ├── docker-compose.yml ├── Dockerfile ├── includes ├── page-info.php ├── page-scramble-words.php ├── page-cipher-generate.php ├── page-scramble-generate.php ├── page-words.php ├── page.php ├── page-generate.php ├── page-cipher-main.php ├── page-scramble-main.php └── page-main.php ├── .gitignore ├── server ├── WordlistLang.php ├── Scrambler.php ├── Cipher.php ├── dict │ ├── sm.cache.txt │ └── sm.txt └── FindAWord.php ├── composer.json ├── client ├── js │ └── word-puzzles.js └── sass │ ├── word-puzzles.scss │ └── bs_variables.scss ├── bower.json ├── phpunit.xml ├── .htaccess ├── package.json ├── cli └── render-huge.php ├── LICENSE ├── README.md ├── .travis.yml ├── cipher.php ├── Gruntfile.js ├── scramble.php ├── index.php └── composer.lock /test/unit/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/selenium/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/.htaccess: -------------------------------------------------------------------------------- 1 | Order Deny,Allow 2 | Allow from All 3 | 4 | -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mike42/word-puzzles/master/favicon.png -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | selenium 3 | node_modules 4 | test 5 | .* 6 | ~.htaccess 7 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | word_puzzles: 4 | build: . 5 | ports: 6 | - "8080:80" 7 | container_name: word_puzzles_1 8 | 9 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian 2 | ADD . /var/www/html/words 3 | WORKDIR /root 4 | RUN apt-get update && apt-get install --assume-yes apache2 php5 libapache2-mod-php5 5 | CMD /usr/sbin/apache2ctl -D FOREGROUND 6 | 7 | -------------------------------------------------------------------------------- /includes/page-info.php: -------------------------------------------------------------------------------- 1 |

Word Puzzles

2 |

This is a small collection of online tools for making word puzzles.

3 |

You can access source code, or post bugs and suggestions via GitHub.

4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # External dependencies 2 | vendor/* 3 | bower_components/* 4 | node_modules/* 5 | selenium/* 6 | 7 | # Eclipse stuff 8 | .buildpath 9 | .project 10 | .settings/* 11 | 12 | # Compiled files 13 | assets/js/* 14 | assets/css/* 15 | assets/fonts/* 16 | .sass-cache/* 17 | selenium.log 18 | -------------------------------------------------------------------------------- /server/WordlistLang.php: -------------------------------------------------------------------------------- 1 | =1.2" 6 | }, 7 | "autoload": { 8 | "psr-4": { 9 | "Mike42\\WordPuzzles\\": "server" 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /client/js/word-puzzles.js: -------------------------------------------------------------------------------- 1 | /* Some basic option toggling code */ 2 | function toggle(id) { 3 | show = ! $('#' + id).is(":visible"); 4 | if (show) { 5 | $('#' + id).show(); 6 | $('#' + id + '-show').hide(); 7 | $('#' + id + '-hide').show(); 8 | $('#' + id + '-sub').hide(); 9 | } else { 10 | $('#' + id).hide(); 11 | $('#' + id + '-show').show(); 12 | $('#' + id + '-hide').hide(); 13 | $('#' + id + '-sub').show(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "word-puzzles", 3 | "authors": [ 4 | "Michael Billington " 5 | ], 6 | "description": "", 7 | "main": "", 8 | "moduleType": [ 9 | "globals" 10 | ], 11 | "license": "MIT", 12 | "homepage": "", 13 | "private": true, 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "test", 19 | "tests" 20 | ], 21 | "dependencies": { 22 | "bootstrap-sass": "~3.3.6" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | test/unit 11 | 12 | 13 | test/selenium 14 | 15 | 16 | 17 | 18 | src 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | # RedirectMatch on all dot-dirs and subdirectories containing external 2 | # dependencies. This prevents some .htaccess stashed in the git history from 3 | # allowing access. 4 | RedirectMatch 403 ^(.)*/\.(.)*$ 5 | RedirectMatch 403 ^(.)*/(vendor|bower_components|node_modules)/(.)*$ 6 | 7 | # Note that assets/ contains a .htaccess file allowing access to compiled JS/CSS 8 | # Everything else is denied, other than the public entry points 9 | Order Deny,Allow 10 | Deny from All 11 | 12 | Order Deny,Allow 13 | Allow from All 14 | 15 | 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "word-puzzles", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "index.php", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Michael Billington ", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "grunt": "^1.0.1", 13 | "grunt-contrib-concat": "^1.0.1", 14 | "grunt-contrib-copy": "^1.0.0", 15 | "grunt-contrib-cssmin": "^1.0.1", 16 | "grunt-contrib-jshint": "^1.0.0", 17 | "grunt-contrib-sass": "^1.0.0", 18 | "grunt-contrib-uglify": "^1.0.1", 19 | "grunt-contrib-watch": "^1.0.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /cli/render-huge.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/php 2 | load_dictionary($req_lang)) { 13 | die("Could not load the dictionary for that language."); 14 | } 15 | while (1) { 16 | $find_a_word -> load_words(null, 1500); 17 | $find_a_word -> fast = $req_fast; 18 | $find_a_word -> width = $req_width; 19 | $find_a_word -> height = $req_height; 20 | $find_a_word -> diagonal = $req_diagonal; 21 | $find_a_word -> reverse = $req_reverse; 22 | $find_a_word -> bug_out = true; 23 | $find_a_word -> calculate($req_lang); 24 | echo $find_a_word -> outp_block($find_a_word -> key); 25 | } 26 | 27 | ?> 28 | -------------------------------------------------------------------------------- /includes/page-scramble-words.php: -------------------------------------------------------------------------------- 1 |

2 | Please check this list of words. These are from an ".$fw_lang[$req_lang] -> name." dictionary.

"; 8 | } else { 9 | echo "

Please enter the list of words below, one per line:

"; 10 | } ?> 11 |
12 |
13 | 14 |
15 |
16 | 17 |
18 |
19 | 20 | "; 23 | }?> 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2016 Michael Billington < michael.billington@gmail.com > 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /includes/page-cipher-generate.php: -------------------------------------------------------------------------------- 1 |

2 |

Solve this cryptogram:

3 |
4 | "; 5 | echo $cipher -> outpHtml(true); 6 | echo ""; 7 | echo "
"; 8 | echo $cipher -> outpHtml(false); 9 | echo "
"; ?> 10 |
11 |
12 |
13 | 14 |
15 |
16 | 17 |
18 | 22 |
23 |
24 | 25 | 26 | \n"; 29 | }?> 30 | -------------------------------------------------------------------------------- /includes/page-scramble-generate.php: -------------------------------------------------------------------------------- 1 |

2 |
3 | "; 5 | echo "

The letters in these words have been scrambled. Try to put them back in the correct order:

"; 6 | echo "
"; 7 | echo $scramble -> outpSolution(); 8 | echo "
"; 9 | echo "
"; 10 | echo $scramble -> outpProblem(); 11 | echo "
"; 12 | echo "
Possible answers:
"; 13 | echo join(", ", $scramble -> words); 14 | echo "
"; 15 | echo ""; ?> 16 | 17 |
18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 | 27 | 28 | \n"; 31 | }?> 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP Word Puzzle Generator [![Build Status](https://travis-ci.org/mike42/word-puzzles.svg?branch=master)](https://travis-ci.org/mike42/word-puzzles) 2 | 3 | This is a PHP web app for generating basic word puzzles. 4 | 5 | It can generate- 6 | 7 | - Find-a-words 8 | - Cryptograms 9 | - Word scrambles 10 | 11 | A live version of this code runs at [https://mike42.me/words/](https://mike42.me/words/). 12 | 13 | ## Installation 14 | 15 | PHP versions from 5.6 up are supported. Simply generate the stylesheets and scripts, then copy the application to your PHP-enabled webserver: 16 | 17 | ```bash 18 | composer install --no-dev 19 | bower install 20 | npm install 21 | grunt 22 | ``` 23 | 24 | ## Development 25 | 26 | MIT-licensed contributions are welcome. 27 | 28 | The CI script at [.travis.yml](https://github.com/mike42/word-puzzles/blob/master/.travis.yml) contains commands to set up and run a build on Linux. 29 | 30 | ### Technology 31 | This project uses- 32 | 33 | Server-side: 34 | - PHP (PSR-2 code conventions checked with PHP_CodeSniffer) 35 | - Composer for server-side dependencies 36 | - Testing 37 | - PHPUnit for test execution 38 | - Selenium browser tests 39 | - Apache Web Server on Debian (in a Docker container) to host the app for testing. 40 | 41 | Client code: 42 | - Libraries 43 | - Bootstrap 44 | - JQuery 45 | - Compilation/pre-processing 46 | - Sass stylesheet processing 47 | - Grunt build 48 | - npm & bower for loading build pipleine dependencies 49 | -------------------------------------------------------------------------------- /includes/page-words.php: -------------------------------------------------------------------------------- 1 |

2 | Please check this list of words. These are from an ".$fw_lang[$req_lang] -> name." dictionary.

"; 8 | } else { 9 | echo "

Please enter the list of words below, one per line:

"; 10 | } ?> 11 |
12 |
13 | 14 |
15 |
16 | 17 |
18 | 30 |
31 | 32 | "; 35 | }?> 36 | -------------------------------------------------------------------------------- /client/sass/word-puzzles.scss: -------------------------------------------------------------------------------- 1 | @import "bs_variables.scss"; 2 | 3 | @import 4 | "../../bower_components/bootstrap-sass/assets/stylesheets/bootstrap"; 5 | 6 | /* To format the puzzles themselves */ 7 | .find-a-word { 8 | font-size: 80%; 9 | border-right: 1px solid #000; 10 | border-bottom: 1px solid #000; 11 | padding: 0; 12 | margin: 0; 13 | } 14 | 15 | .find-a-word td { 16 | border-left: 1px solid #000; 17 | border-top: 1px solid #000; 18 | padding: 0; 19 | margin: 0; 20 | text-align: center; 21 | width: 1.4em; 22 | height: 1.4em; 23 | } 24 | 25 | .word-here { 26 | background-color: #ff0; 27 | } 28 | 29 | .word-list { 30 | list-style-type: none; 31 | list-style-image: none; 32 | padding-left: 0; 33 | } 34 | 35 | .toggle { 36 | float: right; 37 | } 38 | 39 | .toggle-hidden { 40 | display: none; 41 | } 42 | 43 | button, input[type='button'], input[type='submit'] { 44 | @extend .btn; 45 | @extend .btn-default; 46 | } 47 | 48 | textarea { 49 | @extend .form-control; 50 | } 51 | 52 | select { 53 | @extend .form-control; 54 | } 55 | 56 | .puzzle-scramble td { 57 | padding: 0.5em; 58 | } 59 | 60 | .puzzle-scramble { 61 | margin-bottom: 20px; 62 | } 63 | 64 | .puzzle-cipher { 65 | margin-bottom: 20px; 66 | } 67 | 68 | #select-word_count, #select-width, #select-height { 69 | width: 5em; 70 | display: inline-block; 71 | } 72 | 73 | body { padding-top: 50px; } 74 | 75 | .radio-list { 76 | list-style-type: none; 77 | list-style-image: none 78 | } 79 | 80 | html { 81 | overflow-y: scroll; 82 | } 83 | 84 | .container-fluid, 85 | .container { 86 | max-width: $container-md; 87 | } 88 | 89 | @media print { 90 | body { padding-top: 0; } 91 | #solution-show { display: none; } 92 | #solution-hide { display: none; } 93 | .gen-time { display: none; } 94 | } 95 | -------------------------------------------------------------------------------- /includes/page.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | <?php echo htmlspecialchars($page_title); ?> 13 | 14 | 15 | 16 | 17 | 34 |
35 |
36 |
37 |
38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Use Ubuntu 'trusty' distribution 3 | sudo: required 4 | dist: trusty 5 | 6 | language: php 7 | 8 | php: 9 | - 5.6 10 | - 7.0 11 | - nightly 12 | 13 | matrix: 14 | allow_failures: 15 | - php: nightly 16 | 17 | install: 18 | # Install recent docker 19 | - > 20 | curl -sSL "https://get.docker.com/gpg" | 21 | sudo -E apt-key add - 22 | - > 23 | echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | 24 | sudo tee -a /etc/apt/sources.list 25 | - sudo apt-get update 26 | - > 27 | sudo apt-get -o Dpkg::Options::="--force-confdef" \ 28 | -o Dpkg::Options::="--force-confold" --assume-yes install docker-engine 29 | - sudo pip install docker-compose 30 | # Download selenium 31 | - mkdir -p selenium 32 | - > 33 | wget -c -O selenium/selenium-server-standalone-2.53.0.jar \ 34 | http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jar 35 | # Install NPM, Grunt, Bower, Sass 36 | - sudo apt-get --assume-yes install npm ruby-sass 37 | - sudo npm install -g bower 38 | - sudo npm install -g grunt-cli 39 | # Pull in external code dependencies, build front-end code 40 | - composer install 41 | - npm install 42 | - bower install 43 | - grunt 44 | 45 | before_script: 46 | # Start selenium 47 | - > 48 | /usr/bin/xvfb-run \ 49 | java -jar selenium/selenium-server-standalone-2.53.0.jar > selenium.log & 50 | # Start container 51 | - docker-compose up --build -d 52 | 53 | script: 54 | - php vendor/bin/phpcs -n --standard=psr2 cli/ server/ test/ includes/ *.php 55 | - php vendor/bin/phpunit test/unit/ --coverage-text 56 | - php vendor/bin/phpunit test/selenium/ 57 | 58 | after_script: 59 | - docker-compose down 60 | 61 | after_failure: 62 | - cat selenium.log 63 | 64 | cache: 65 | directories: 66 | - selenium 67 | ... 68 | 69 | -------------------------------------------------------------------------------- /cipher.php: -------------------------------------------------------------------------------- 1 | $cipher -> c_max_len) { 24 | die("Can't make cryptogram that long."); 25 | } 26 | 27 | $req_lang= take('lang'); 28 | $fw_lang = FindAWord::supportedLanguages(); 29 | if (!isset($fw_lang[$req_lang])) { 30 | die("Couldn't find that language!"); 31 | } 32 | 33 | $do = "generate"; /* All info to make puzzle. */ 34 | } else { 35 | $do = "nothing"; 36 | } 37 | } else { 38 | $do = "nothing"; 39 | } 40 | 41 | $page_title = "Create Word Cipher"; 42 | switch ($do) { 43 | case "nothing": 44 | $page_script = "cipher-main"; 45 | break; 46 | case "generate": 47 | $page_title = "Word Cipher"; 48 | $cipher -> generateKey('en'); 49 | $cipher -> hint = $req_hint; 50 | $cipher -> symbol = $req_symbol; 51 | $cipher -> encode($req_text); 52 | $page_script = "cipher-generate"; 53 | break; 54 | default: 55 | die("Didn't recognise: $do"); 56 | } 57 | 58 | $page_gen_left = true; 59 | include("includes/page.php"); 60 | 61 | /* Shorthand for getting request data */ 62 | function has($var) 63 | { 64 | return isset($_REQUEST[$var]); 65 | } 66 | function take($var) 67 | { 68 | return $_REQUEST[$var]; 69 | } 70 | -------------------------------------------------------------------------------- /includes/page-generate.php: -------------------------------------------------------------------------------- 1 |

2 |
3 | failure as $eek) { 5 | /* Knock failed words off the main list */ 6 | unset($find_a_word -> words[$eek]); 7 | } 8 | ?> 9 | 10 | "; 12 | echo "
"; 13 | echo $find_a_word -> outpTableKey(); 14 | echo "
"; 15 | echo "
"; 16 | echo $find_a_word -> outpTable($find_a_word -> puzzle); 17 | echo "
"; 18 | echo "
    "; 19 | foreach ($find_a_word -> words as $word) { 20 | echo "
  • ".htmlspecialchars($word)."
  • "; 21 | } 22 | echo "
"; 23 | echo ""; ?> 24 | 25 |
26 | 27 |
28 |
29 | 30 |
31 |
32 | failure) > 0) { 33 | echo "

We couldn't fit all of those words on the puzzle!

    "; 34 | foreach ($find_a_word -> failure as $eek) { 35 | echo "
  • ".$eek."
  • "; 36 | } 37 | echo "
Press 'regenerate to try again.

"; 38 | } 39 | 40 | echo "

Puzzle generated in ".$find_a_word -> calc_time." seconds.

"; 41 | 42 | /* All fields here */ 43 | echo field("word_list", join(",", $req_word_list_arr)); 44 | echo field("width", $req_width); 45 | echo field("height", $req_height); 46 | echo field("lang", $req_lang); 47 | echo field("diagonal", $req_diagonal); 48 | echo field("reverse", $req_reverse); 49 | /* Check-box fields, value indicated by presence/absence */ 50 | if ($req_fast) { 51 | echo field("fast", 1); 52 | } 53 | if ($req_slow) { 54 | echo field("slow", 1); 55 | } ?> 56 |
57 | \n"; 60 | }?> 61 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | grunt.initConfig({ 3 | pkg: grunt.file.readJSON('package.json'), 4 | sass: { 5 | dist: { 6 | files: { 7 | 'assets/css/<%= pkg.name %>.css': 'client/sass/<%= pkg.name %>.scss' 8 | } 9 | } 10 | }, 11 | cssmin: { 12 | options: { 13 | banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 14 | }, 15 | target: { 16 | files: [{ 17 | expand: true, 18 | src: 'assets/css/<%= pkg.name %>.css', 19 | ext: '.min.css' 20 | }] 21 | } 22 | }, 23 | copy: { 24 | jquery: { 25 | files: [ 26 | {expand: true, flatten: true, src: ['bower_components/jquery/dist/*'], dest: 'assets/js/', filter: 'isFile'}, 27 | ], 28 | }, 29 | fonts: { 30 | files: [ 31 | {expand: true, flatten: true, src: ['bower_components/bootstrap-sass/assets/fonts/bootstrap/*'], dest: 'assets/fonts/bootstrap/', filter: 'isFile'}, 32 | ], 33 | }, 34 | }, 35 | concat: { 36 | options: { 37 | separator: ';', 38 | }, 39 | dist: { 40 | src: ['client/js/<%= pkg.name %>.js'], 41 | dest: 'assets/js/<%= pkg.name %>.js', 42 | }, 43 | }, 44 | jshint: { 45 | all: ['Gruntfile.js', 'client/**/*.js'] 46 | }, 47 | uglify: { 48 | options: { 49 | banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 50 | }, 51 | dist: { 52 | src: 'assets/js/<%= pkg.name %>.js', 53 | dest: 'assets/js/<%= pkg.name %>.min.js' 54 | } 55 | }, 56 | watch: { 57 | css: { 58 | files: ['client/**/*.scss'], 59 | tasks: ['sass', 'cssmin'], 60 | }, 61 | js: { 62 | files: ['client/**/*.js'], 63 | tasks: ['jshint', 'concat', 'uglify'], 64 | }, 65 | configFiles: { 66 | files: [ 'Gruntfile.js', 'config/*.js' ], 67 | options: { 68 | reload: true 69 | } 70 | } 71 | }, 72 | }); 73 | 74 | grunt.loadNpmTasks('grunt-contrib-concat'); 75 | grunt.loadNpmTasks('grunt-contrib-copy'); 76 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 77 | grunt.loadNpmTasks('grunt-contrib-jshint'); 78 | grunt.loadNpmTasks('grunt-contrib-sass'); 79 | grunt.loadNpmTasks('grunt-contrib-uglify'); 80 | grunt.loadNpmTasks('grunt-contrib-watch'); 81 | grunt.registerTask('default', ['sass', 'jshint', 'cssmin', 'copy', 'concat', 'uglify']); 82 | }; 83 | 84 | -------------------------------------------------------------------------------- /includes/page-cipher-main.php: -------------------------------------------------------------------------------- 1 |

2 |
3 |

This is a word cipher, which will encode phrases using a simple substitution cipher. The resulting puzzle is called a "Cryptogram".

4 | 5 |

Type in the text to encode:

6 |
    7 | 8 |
9 | 10 |

Please select puzzle language:

11 | 12 | code] = $lang -> name; 18 | } ?> 19 |
    20 |
  • 21 |
22 | 23 |

Other options:

24 |
    25 |
  • 26 |
  • 27 |
28 | 29 |
30 | 31 |
32 |
33 | "; 43 | } 44 | function checkbox($field, $caption, $selected = 0) 45 | { 46 | if ($selected) { 47 | $checked = " checked=\"checked\""; 48 | } else { 49 | $checked = ""; 50 | } 51 | return " "; 52 | } 53 | function select($field, $options, $selected = 0) 54 | { 55 | $str = ""; 65 | return $str; 66 | } ?> 67 | -------------------------------------------------------------------------------- /includes/page-scramble-main.php: -------------------------------------------------------------------------------- 1 |

2 |
3 |

This is a word scrambler, which will randomly re-arrange words for use in puzzles.

4 | 5 |

I want to scramble:

6 | c_min_words; $i <= $scramble -> c_max_words; $i++) { /* Contents of word select box */ 7 | $sel_words[$i] = $i; 8 | } ?> 9 |
    10 | words. 11 |
12 | 13 |

The words will come from:

14 |
    15 | 19 |
  • (default)", 1);?>
  • 20 |
  • 21 |
22 | 23 |

Please select language:

24 | code] = $lang -> name; 30 | } ?> 31 |
    32 |
  • 33 |
34 |
35 | 36 |
37 |
38 | "; 48 | } 49 | function checkbox($field, $caption, $selected = 0) 50 | { 51 | if ($selected) { 52 | $checked = " checked=\"checked\""; 53 | } else { 54 | $checked = ""; 55 | } 56 | return " "; 57 | } 58 | function select($field, $options, $selected = 0) 59 | { 60 | $str = ""; 70 | return $str; 71 | } ?> 72 | -------------------------------------------------------------------------------- /test/selenium/WebTest.php: -------------------------------------------------------------------------------- 1 | base = 'http://localhost:8080/words'; 12 | $this->setBrowser('firefox'); 13 | $this->setBrowserUrl($this -> base . '/'); 14 | } 15 | 16 | public function testInfoPage() 17 | { 18 | // Simply access the main page 19 | $this->url($this->base . '/index.php?action=info'); 20 | $this->assertEquals('Create Word Search', $this->title()); 21 | } 22 | 23 | public function testWordSearch() 24 | { 25 | // Make a word searh with default settings 26 | $this->url($this->base . '/index.php'); 27 | $this->defaultPuzzle(); 28 | $this->genericPuzzleTest(); 29 | } 30 | 31 | public function testScrambler() 32 | { 33 | // Make a word scramble with basic settings 34 | $this->url($this->base . '/scramble.php'); 35 | $this->defaultPuzzle(); 36 | $this->genericPuzzleTest(); 37 | } 38 | 39 | public function testCipher() 40 | { 41 | // Make a cipher with basic settings 42 | $this->url($this->base . '/cipher.php'); 43 | $this->defaultPuzzle(); 44 | $this->genericPuzzleTest(); 45 | } 46 | 47 | private function defaultPuzzle() 48 | { 49 | // Click through default size & word list 50 | $button=$this->byName('submit')->click(); 51 | $button=$this->byName('submit')->click(); 52 | } 53 | 54 | private function genericPuzzleTest() 55 | { 56 | // Show/hide solution, regenerate & repeat 57 | $this->solutionToggle(); 58 | $this->regenerate(); 59 | $this->solutionToggle(); 60 | } 61 | 62 | private function regenerate() 63 | { 64 | // Find regenerate button & click it 65 | $button=$this->byName('submit')->click(); 66 | } 67 | 68 | private function solutionToggle() 69 | { 70 | // Get solution & solution sub 71 | $puzzle = $this->byId("solution-sub"); 72 | $solution = $this->byId("solution"); 73 | // Solution is hidden by default 74 | $this->assertFalse($solution->displayed()); 75 | $this->assertTrue($puzzle->displayed()); 76 | // Solution is shown 77 | $this->byCssSelector("#solution-show input[type='button']")->click(); 78 | $this->assertTrue($solution->displayed()); 79 | $this->assertFalse($puzzle->displayed()); 80 | // Solution is hidden again 81 | $this->byCssSelector("#solution-hide input[type='button']")->click(); 82 | $this->assertFalse($solution->displayed()); 83 | $this->assertTrue($puzzle->displayed()); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /scramble.php: -------------------------------------------------------------------------------- 1 | c_min_words) || ($req_word_count > $scramble -> c_max_words)) { 14 | die("Number of words out of range."); 15 | } 16 | $req_word_source = take('word_source'); 17 | $do = "words"; /* Time to find out word info. */ 18 | } elseif (has('word_list')) { 19 | $req_word_list = take('word_list'); 20 | $req_word_list = str_replace($req_word_list, "\r\n", "\n"); /* Switch lines to \n only */ 21 | $req_word_list_arr = explode("\n", take('word_list')); /* Try \n first, then change to ',' if its all on one line */ 22 | if (count($req_word_list_arr) == 1) { 23 | $req_word_list_arr = explode(",", take('word_list')); 24 | } 25 | /* Process list. Trim and remove blanks */ 26 | foreach ($req_word_list_arr as $key => $val) { 27 | $req_word_list_arr[$key] = trim($req_word_list_arr[$key]); 28 | if ($req_word_list_arr[$key] == "") { 29 | unset($req_word_list_arr[$key]); 30 | } 31 | } 32 | if (count($req_word_list_arr) < $scramble -> c_min_words || count($req_word_list_arr) > $scramble -> c_max_words) { 33 | die("Too many or not enough words!"); 34 | } 35 | $word_list_str = join(",", $req_word_list_arr); 36 | $do = "generate"; /* All info to make puzzle. */ 37 | } else { 38 | $do = "nothing"; 39 | } 40 | } else { 41 | $do = "nothing"; 42 | } 43 | 44 | $page_title = "Create Word Scramble"; 45 | switch ($do) { 46 | case "nothing": 47 | $page_script = "scramble-main"; 48 | break; 49 | case "words": 50 | /* Use find-a-word dict code */ 51 | $find_a_word = new FindAWord(); 52 | if ($req_word_source == "dict") { 53 | if (!$find_a_word -> loadDictionary($req_lang)) { /* Load dictionary */ 54 | die("Could not load the dictionary for that language."); 55 | } 56 | $find_a_word -> loadWords(null, $req_word_count); 57 | } else { 58 | $find_a_word -> loadWords(array(), 0); 59 | } 60 | $word_list_str = join("\n", $find_a_word -> words); 61 | unset($find_a_word); /* Done! */ 62 | $page_script = "scramble-words"; 63 | break; 64 | case "generate": 65 | $page_title = "Word Scramble"; 66 | $scramble -> scramble($req_word_list_arr); 67 | $page_script = "scramble-generate"; 68 | break; 69 | default: 70 | die("Didn't recognise: $do"); 71 | } 72 | $page_gen_left = true; 73 | include("includes/page.php"); 74 | 75 | /* Shorthand for getting request data */ 76 | function has($var) 77 | { 78 | return isset($_REQUEST[$var]); 79 | } 80 | function take($var) 81 | { 82 | return $_REQUEST[$var]; 83 | } 84 | -------------------------------------------------------------------------------- /server/Scrambler.php: -------------------------------------------------------------------------------- 1 | words = $words; 18 | $words = $this -> unsort($words); 19 | 20 | foreach ($words as $word) { 21 | $letter = array(); 22 | 23 | for ($i = 0; $i < mb_strlen($word); $i++) { 24 | $c = mb_substr($word, $i, 1); 25 | $letter[$c."-".$i] = $c; 26 | } 27 | 28 | if ($this -> clean) { 29 | ksort($letter); 30 | } else { 31 | $letter = $this -> unsort($letter); 32 | } 33 | 34 | $this -> scrambled[$word] = join("", $letter); 35 | unset($letter); 36 | } 37 | 38 | return $this -> scrambled; 39 | } 40 | 41 | /* Place an array in random order (wrecks keys!) */ 42 | protected function unsort($array) 43 | { 44 | foreach ($array as $item) { 45 | /* Randomly choose a numeric ID */ 46 | $id = rand(1, 65536); 47 | while (isset($rand[$id])) { 48 | $id = rand(1, 65536); 49 | } 50 | $rand[$id] = $item; 51 | } 52 | 53 | /* ksort the result */ 54 | ksort($rand); 55 | return $rand; 56 | } 57 | 58 | public function outpSolution() 59 | { 60 | $str = "\n"; 61 | $i = 0; 62 | foreach ($this -> scrambled as $orig => $messed) { 63 | if ($i % 2 == 0) { 64 | $str .= " \n"; 65 | $str .= " \n"; 70 | $str .= " \n"; 71 | $str .= " \n"; 72 | if ($i % 2 != 0) { 73 | $str .= " \n"; 74 | } 75 | $i++; 76 | } 77 | if ($i % 2 != 0) { 78 | $str .= " \n"; 79 | } 80 | $str .= "
"; 66 | } else { 67 | $str .= " "; 68 | } 69 | $str .= htmlspecialchars($messed)." = ".htmlspecialchars($orig)."
\n"; 81 | return $str; 82 | } 83 | 84 | public function outpProblem() 85 | { 86 | $str = "\n"; 87 | $i = 0; 88 | foreach ($this -> scrambled as $orig => $messed) { 89 | if ($i % 2 == 0) { 90 | $str .= " \n"; 91 | $str .= " \n"; 96 | $str .= " \n"; 97 | $str .= " \n"; 98 | if ($i % 2 != 0) { 99 | $str .= " \n"; 100 | } 101 | $i++; 102 | } 103 | if ($i % 2 != 0) { 104 | $str .= " \n"; 105 | } 106 | $str .= "
"; 92 | } else { 93 | $str .= " "; 94 | } 95 | $str .= htmlspecialchars($messed)." = _______________
\n"; 107 | return $str; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /server/Cipher.php: -------------------------------------------------------------------------------- 1 | key[$c])) { 29 | $result[] = $this -> key[$c]; 30 | } elseif ($c == " ") { 31 | $this -> enc[] = $result; 32 | $result = array(); 33 | } else { 34 | $result[] = $c; 35 | } 36 | } 37 | $this -> enc[] = $result; 38 | 39 | if ($this -> hint) { 40 | $this -> hint_word = rand(0, count($this -> enc) - 1); 41 | } else { 42 | $this -> hint_word = -1; 43 | } 44 | return true; 45 | } 46 | 47 | /* Make a key (randomise the alphabet of choice) */ 48 | public function generateKey($lang = "en") 49 | { 50 | global $fw_lang; 51 | $this -> lang = $lang; 52 | $messed = $this -> unsort($fw_lang[$lang] -> alphabet); /* Huge help! */ 53 | $i = 0; 54 | foreach ($messed as $letter) { 55 | $key[$fw_lang[$lang] -> alphabet[$i]] = $letter; 56 | $key_rev[$letter] = $fw_lang[$lang] -> alphabet[$i]; 57 | $i++; 58 | } 59 | $this -> key = $key; 60 | $this -> key_rev = $key_rev; 61 | return $key; 62 | } 63 | 64 | /* Place an array in random order (wrecks keys!) -- Copied from scrambler.php */ 65 | protected function unsort($array) 66 | { 67 | foreach ($array as $item) { 68 | /* Randomly choose a numeric ID */ 69 | $id = rand(1, 65536); 70 | while (isset($rand[$id])) { 71 | $id = rand(1, 65536); 72 | } 73 | $rand[$id] = $item; 74 | } 75 | 76 | /* ksort the result */ 77 | ksort($rand); 78 | return $rand; 79 | } 80 | 81 | /* Produce a series of left-floated HTML tables containing result */ 82 | public function outpHtml($answer = false) 83 | { 84 | $res[] = "
"; 85 | foreach ($this -> enc as $id => $word) { 86 | $res[] = " "; 87 | $res[] = " "; 88 | foreach ($word as $letter) { 89 | if (isset($this -> key_rev[$letter])) { 90 | if ($answer) { 91 | $col = " color: #f00; background-color: #ff0;"; 92 | } else { 93 | $col = ""; 94 | } 95 | $res[] = " "; 98 | } else { 99 | $res[] = " "." "; 100 | } 101 | } else { 102 | $res[] = " "; 105 | } 106 | } 107 | } 108 | $res[] = " "; 109 | foreach ($word as $letter) { 110 | $res[] = " "; 111 | } 112 | $res[] = " "; 113 | $res[] = "
"; 96 | if ($answer || $id == $this -> hint_word) { 97 | $res[] = " ".htmlentities($this -> key_rev[$letter]).""; 103 | if ($answer) { 104 | $res[] = " ".htmlentities($letter)."
$letter
"; 114 | } 115 | $res[] = "
"; 116 | $res[] = "
"; 117 | return join("\n", $res); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /includes/page-main.php: -------------------------------------------------------------------------------- 1 |

2 |

This is a word-search (a.k.a find-a-word) generator. Select from the options below, or read the info page if you would like to know how it works.

3 |
4 |

My puzzle will be:

5 |
    6 | c_min_words; $i <= $find_a_word -> c_max_words; $i++) { /* Contents of word select box */ 7 | $sel_words[$i] = $i; 8 | } 9 | for ($i = $find_a_word -> c_min_size; $i <= $find_a_word -> c_max_size; $i++) { /* Contents of size box */ 10 | $sel_size[$i] = $i; 11 | } ?> 12 |
  • x squares, with words.
  • 13 |
14 |

The words will come from:

15 |
    16 | 20 |
  • (default)", 1);?>
  • 21 |
  • 22 |
23 | 24 | 25 |

Extra options

26 |
27 |
Configure diagonal words, reverse words, languages, and advanced options.
28 |
29 |
30 |

Word search language:

31 | code] = $lang -> name; 37 | } ?> 38 |
    39 |
  • 40 |
41 |

Use diagonal words:

42 |
    43 |
  • (default)", 1);?>
  • 44 |
  • 45 |
  • 46 |
47 |

Reverse words:

48 |
    49 |
  • (default)", 1);?>
  • 50 |
  • 51 |
  • 52 |
53 |

Advanced options: [info]

54 |
    55 |
  • 56 |
  • 57 |
58 |
59 |
60 | 61 |
62 |
63 | "; 73 | } 74 | function checkbox($field, $caption, $selected = 0) 75 | { 76 | if ($selected) { 77 | $checked = " checked=\"checked\""; 78 | } else { 79 | $checked = ""; 80 | } 81 | return " "; 82 | } 83 | function select($field, $options, $selected = 0) 84 | { 85 | $str = ""; 95 | return $str; 96 | } ?> 97 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | c_min_size) || ($req_height > $find_a_word -> c_max_size)) { 18 | die("Puzzle height out of range."); 19 | } 20 | if (($req_width < $find_a_word -> c_min_size) || ($req_width > $find_a_word -> c_max_size)) { 21 | die("Puzzle width out of range."); 22 | } 23 | $req_lang = take('lang'); 24 | $req_diagonal = take('diagonal'); 25 | $req_reverse = take('reverse'); 26 | 27 | if (has('word_list')) { 28 | $req_word_list = take('word_list'); 29 | $req_word_list = str_replace($req_word_list, "\r\n", "\n"); /* Switch lines to \n only */ 30 | $req_word_list_arr = explode("\n", take('word_list')); /* Try \n first, then change to ',' if its all on one line */ 31 | if (count($req_word_list_arr) == 1) { 32 | $req_word_list_arr = explode(",", take('word_list')); 33 | } 34 | /* Process list. Trim and remove blanks */ 35 | foreach ($req_word_list_arr as $key => $val) { 36 | $req_word_list_arr[$key] = trim($req_word_list_arr[$key]); 37 | if ($req_word_list_arr[$key] == "") { 38 | unset($req_word_list_arr[$key]); 39 | } 40 | } 41 | if (count($req_word_list_arr) < $find_a_word -> c_min_words || count($req_word_list_arr) > $find_a_word -> c_max_words) { 42 | die("Word quantity out of range."); 43 | } 44 | $do = "generate"; /* All info to make puzzle. */ 45 | } elseif (has('word_count') && has('word_source')) { 46 | $req_word_count = (int)take('word_count'); 47 | if (($req_word_count < $find_a_word -> c_min_words) || ($req_word_count > $find_a_word -> c_max_words)) { 48 | die("Number of words out of range."); 49 | } 50 | $req_word_source = take('word_source'); 51 | $do = "words"; /* Time to find out word info. */ 52 | } else { 53 | $do = "nothing"; /* Some broken submit. */ 54 | } 55 | } else { /* Some (more) broken request */ 56 | $do = "nothing"; 57 | } 58 | } elseif (has('action')) { /* Non-submit, stuff like info and view source or the main page follows. */ 59 | switch (take('action')) { 60 | case "info": 61 | $do = "info"; 62 | break; 63 | default: 64 | $do = "nothing"; 65 | } 66 | } else { /* Default */ 67 | $do = "nothing"; 68 | } 69 | 70 | /* Calls to the $find_a_word object under here: */ 71 | $page_title = "Create Word Search"; 72 | switch ($do) { 73 | case "nothing": 74 | $page_script = "main"; 75 | $page_gen_left = true; 76 | break; 77 | case "info": 78 | $page_script = "info"; 79 | $page_gen_left = true; 80 | break; 81 | case "words": 82 | if ($req_word_source == "dict") { 83 | if (!$find_a_word -> loadDictionary($req_lang)) { /* Load dictionary */ 84 | die("Could not load the dictionary for that language."); 85 | } 86 | $find_a_word -> loadWords(null, $req_word_count); 87 | } else { 88 | $find_a_word -> loadWords(array(), 0); 89 | } 90 | $word_list_str = join("\n", $find_a_word -> words); 91 | $page_script = "words"; 92 | $page_gen_left = true; 93 | break; 94 | case "generate": 95 | $page_title = "Word Search"; 96 | if ($req_width > 30 || $req_height > 30 || count($req_word_list_arr) > 75) { 97 | /* The algorithm can reliably place 75 words in a 30x30 grid in about 3 seconds on my 1.6ghz atom. 98 | but becomes very slow for large grids due to the explosion of the number of possibilities. 99 | Here we force the 'fast' mode for larger puzzles. This mode tells the algorithm to stop at the 100 | first viable square, rather than enumerating all possibilities and selecting from them. */ 101 | $req_fast = true; 102 | /* If you feel like switching this, consider using the CLI instead. This is important to the 103 | web interface to avoid minutes-long executions for users who turn all of the settings to maximum. 104 | I imagine that most practical word-searches are much smaller than this! */ 105 | } 106 | 107 | if ($req_slow) { /* Long query expected. Turn to 3 mins at user's request. */ 108 | ini_set('max_execution_time', 180); 109 | } 110 | 111 | $find_a_word -> fast = $req_fast; 112 | $find_a_word -> width = $req_width; 113 | $find_a_word -> height = $req_height; 114 | $find_a_word -> diagonal = $req_diagonal; 115 | $find_a_word -> reverse = $req_reverse; 116 | $find_a_word -> loadWords($req_word_list_arr, 0); 117 | $find_a_word -> calculate($req_lang); 118 | $page_script = "generate"; 119 | $page_gen_left = false; /* Working too hard for silliness */ 120 | break; 121 | default: 122 | die("Didn't recognise: $do"); 123 | } 124 | 125 | include("includes/page.php"); 126 | 127 | /* Shorthand for getting request data */ 128 | function has($var) 129 | { 130 | return isset($_REQUEST[$var]); 131 | } 132 | function take($var) 133 | { 134 | return stripslashes($_REQUEST[$var]); 135 | } 136 | -------------------------------------------------------------------------------- /server/dict/sm.cache.txt: -------------------------------------------------------------------------------- 1 | 'a 2 | -a 3 | a 4 | a- 5 | ā 6 | 'a'ai 7 | a'ao 8 | a'au 9 | ae 10 | 'ai 11 | ai 12 | ai 13 | 'aiga 14 | 'āiga 15 | 'aina 16 | 'aisa 17 | 'aiseā 18 | aitu 19 | 'a'o 20 | a'o 21 | ao 22 | ao 23 | aoāuli 24 | aofai 25 | aofia 26 | 'aogā 27 | ā'oga 28 | 'Aokuso 29 | 'au 30 | a'u 31 | a'u 32 | au 33 | 'aua 34 | 'auā 35 | 'auala 36 | 'auivi 37 | 'aufa'i 38 | 'aufaigaluega 39 | aulelei 40 | 'aumai 41 | Ausetalia 42 | autafa 43 | 'autalavou 44 | 'auva'a 45 | 'auro 46 | afa 47 | 'āfai 48 | āfāina 49 | afafine 50 | afakasi 51 | afe 52 | afea 53 | Aferika 54 | afi 55 | afiafi 56 | afio 57 | afioga 58 | afifio 59 | afitusi 60 | 'afu 61 | afu 62 | aga 63 | agaalofa 64 | agaga 65 | agaleaga 66 | agalelei 67 | agaleleiina 68 | aganu'u 69 | agavale 70 | ala 71 | ala 72 | āla 73 | alaisa 74 | aleluia 75 | ali'i 76 | alo 77 | alo 78 | alofa 79 | alolofa 80 | alu 81 | 'aluga 82 | amata 83 | amataga 84 | amene 85 | Amerika 86 | amio 87 | amioga 88 | amiotonu 89 | ana 90 | ana- 91 | anafea 92 | ananafi 93 | ananei 94 | anapō 95 | aniani 96 | 'apa 97 | apa'au 98 | 'Apelila 99 | 'Aperila 100 | api 101 | apogā- 102 | apogāleveleve 103 | apogālevelevēa 104 | 'apu 105 | asiasi 106 | aso 107 | aso'uma 108 | Aso Falaile 109 | Aso Faraile 110 | Aso Gafua 111 | Aso Lua 112 | Aso Lulu 113 | Aso Sā 114 | Aso To'ona'i 115 | Aso Tofi 116 | asu 117 | 'ata 118 | ata 119 | atali'i 120 | ato 121 | atoa 122 | atu 123 | Atua 124 | atunu'u 125 | avanoa 126 | 'ave 127 | 'avea 128 | 'ave'ave 129 | 'ave'ese 130 | 'ave'esea 131 | 'avepasi 132 | 'aveta'avale 133 | araisa 134 | 'ārio 135 | 'e 136 | e 137 | e 138 | e 139 | e 140 | 'e'efu 141 | 'e'ena 142 | Europa 143 | 'efu'efu 144 | 'ele'ele 145 | eletise 146 | 'ena 147 | 'ena'ena 148 | 'ese 149 | 'ese'ese 150 | 'ese'esega 151 | 'eseina 152 | esi 153 | eva 154 | ekalesia 155 | 'ī 156 | 'ī 157 | 'ī2 158 | i 159 | i'a 160 | ia 161 | ia 162 | ia 163 | Ianuali 164 | Ianuari 165 | iata 166 | ia te 167 | iate 168 | 'ie 169 | 'ie afu 170 | 'ie faitaga 171 | 'ie tōga 172 | Ioane 173 | 'ioe 174 | Iulai 175 | Iuni 176 | iunivesite 177 | ifo 178 | Igilisi 179 | igoa 180 | ili 181 | ilo 182 | iloa 183 | iloagofie 184 | ina 185 | inu 186 | ipu 187 | ipu mafolafola 188 | ipu mālamalama 189 | ipupopo 190 | iputī 191 | isi 192 | isu 193 | 'isumu 194 | ita 195 | iti 196 | itiiti 197 | ititi 198 | itū 199 | itū'āiga 200 | itūlā 201 | itūlau 202 | iva 203 | ivi 204 | 'ō 205 | 'ō 206 | 'o 207 | ō 208 | o 209 | 'oe 210 | oi 211 | o'o 212 | 'o'omi 213 | 'o'omi'omi 214 | o'ona 215 | 'ou 216 | o'u 217 | ou 218 | 'oulua 219 | 'outou 220 | ofi 221 | ofisa 222 | ofu 223 | ofutino 224 | ofuvae 225 | ogā'umu 226 | ola 227 | olaga 228 | 'o le 'ā 229 | 'ole'ā 230 | 'oloa 231 | 'o lo'o 232 | 'olo'o 233 | ō mai 234 | 'omo 235 | ona 236 | ona 237 | onā 238 | oneone 239 | ono 240 | onosa'i 241 | oso 242 | osooso 243 | 'oti 244 | 'oti 245 | oti 246 | 'ova 247 | oka 248 | 'Oketopa 249 | 'ua 250 | uaea 251 | uaina 252 | uafu 253 | uati 254 | Ueligitone 255 | uiga 256 | uiga'ese 257 | uila 258 | uili 259 | uō 260 | 'u'umi 261 | ula 262 | ula 263 | ulaula 264 | ulavale 265 | uli 266 | uli 267 | uliuli 268 | uliga 269 | 'ulu 270 | ulu 271 | ulufafo 272 | ulufale 273 | 'uma 274 | 'umī 275 | 'umi 276 | 'umu 277 | umukuka 278 | 'upu 279 | uso 280 | usu 281 | usu 282 | uta 283 | fā 284 | fā 285 | fa'a 286 | fa'a- 287 | fa'a'aogā 288 | fa'a'aogāina 289 | fa'aaloalo 290 | fa'aapogāleveleve 291 | fa'aata 292 | fa'aeteete 293 | fa'aigoa 294 | fa'aili 295 | fa'ainu 296 | fa'aipoipo 297 | fa'aipoipoga 298 | fa'a'ova 299 | fa'auli 300 | fa'afafine 301 | fa'afeiloa'i 302 | fa'afetai 303 | fa'afiafia 304 | fa'afīlēmū 305 | fa'afou 306 | fa'afouina 307 | fa'agalo 308 | fa'alapotopotoga 309 | fa'alavelave 310 | fa'alavelaveina 311 | fa'aleaga 312 | fa'aleagaina 313 | fa'aleuō 314 | fa'alēfiafia 315 | fa'alelei 316 | fa'aleleia 317 | fa'aliliu 318 | fa'aliliuina 319 | fa'alogo 320 | fa'alogoina 321 | faalogologo 322 | fa'ama'a 323 | fa'amāoni 324 | fa'amau 325 | fa'amaumau 326 | fa'amaumauina 327 | fa'amāfanafana 328 | fa'amālama 329 | fa'amālamalama 330 | faamālōlō 331 | fa'amālōsi 332 | fa'amālōsia 333 | fa'amamā 334 | fa'amamafa 335 | fa'amanatu 336 | faamanatuga 337 | fa'amanuia 338 | faamanuiaga 339 | fa'amāsima 340 | fa'amasino 341 | fa'amasinoga 342 | fa'amatai 343 | fa'amatala 344 | fa'amavae 345 | fa'amavaega 346 | fa'amoemoe 347 | faamoemoega 348 | fa'amolemole 349 | fa'anoanoa 350 | fa'apa'ia 351 | fa'apāolo 352 | fa'apa'ū 353 | fa'apa'u 354 | fa'apālagi 355 | fa'apalapalā 356 | fa'apapālagi 357 | fa'apea 358 | fa'apefea 359 | fa'apepepepe 360 | fa'aperetania 361 | fa'apipi'i 362 | fa'asā 363 | fa'asāina 364 | fa'asa'o 365 | fa'asala 366 | fa'asalaina 367 | fa'asalaga 368 | fa'asamoa 369 | fa'aselau 370 | fa'asilasilaga 371 | fa'asino 372 | fa'asolo 373 | fa'asusu 374 | fa'asuka 375 | fa'ata'amilomilo 376 | fa'atā'ele 377 | fa'ata'ita'i 378 | fa'ata'ita'iga 379 | fa'atau 380 | fa'atauina 381 | fa'atafa 382 | fa'atali 383 | fa'atalitali 384 | fa'atalofa 385 | fa'atasi 386 | fa'atīgā 387 | fa'atino 388 | fa'atinoga 389 | fa'atolu 390 | fa'atonu 391 | fa'atonuina 392 | fa'atonuga 393 | fa'atuatua 394 | fa'atumu 395 | fa'atumuina 396 | fa'avae 397 | fa'avaeina 398 | fa'avalea 399 | fa'avavau 400 | fa'avave 401 | fa'avela 402 | fa'avelaina 403 | fa'avevela 404 | fa'i 405 | fai 406 | faia 407 | faiā'oga 408 | faifai 409 | faife'au 410 | faiga 411 | faigaluega 412 | faigatā 413 | faigofie 414 | fainumera 415 | faitau 416 | faitauaofai 417 | faitauina 418 | faitautusi 419 | faitoto'a 420 | fao 421 | fautasi 422 | fafao 423 | fafana 424 | fafine 425 | fafo 426 | fagu 427 | fagususu 428 | fala 429 | falaoa 430 | fala saina 431 | fale 432 | fale'aiga 433 | faleā'oga 434 | fale'oloa 435 | falema'i 436 | falemanu 437 | falemeli 438 | falepuipui 439 | falesā 440 | faleta'avale 441 | faletua 442 | faletupe 443 | fālōlō 444 | fana 445 | fānau 446 | fānanau 447 | fanua 448 | fasi 449 | fasioti 450 | fasiotia 451 | fasifalaoa 452 | fasiga 453 | fasimoli 454 | fasipē 455 | fasipovi 456 | fasipua'a 457 | fata 458 | fatafata 459 | fatu 460 | fea 461 | fe'au 462 | fe'ausi 463 | fealua'i 464 | fealualua'i 465 | fe'e 466 | feiloa'i 467 | feiloa'iga 468 | feinu 469 | feoloolo 470 | feololo 471 | feoti 472 | fefe 473 | fefefe 474 | fefevale 475 | felelei 476 | Fepuali 477 | Fepuari 478 | fesili 479 | fesoasoani 480 | feso'ota'i 481 | feso'ota'iga 482 | fesuia'i 483 | fetalai 484 | fetalaiga 485 | fetogi 486 | fetū 487 | fia 488 | fia 489 | fia'ai 490 | fiafia 491 | fiafiaga 492 | fiamoe 493 | fīlēmū 494 | fili 495 | fili 496 | filifili 497 | filifili 498 | filifilia 499 | filifiliga 500 | finagalo 501 | Fiti 502 | fitu 503 | fo'i 504 | fou 505 | fofoga 506 | fofola 507 | fogā- 508 | fogā'ele'ele 509 | fola 510 | foliga 511 | foloa 512 | fōma'i 513 | fono 514 | fu'a 515 | fua 516 | fua 517 | fuālā'au 518 | fuālā'au'aina 519 | fuāmoa 520 | fugalā'au 521 | fulū 522 | fusu 523 | -ga 524 | gaoi 525 | gaoia 526 | gaogao 527 | gaupapa 528 | gafa 529 | gagana 530 | galo 531 | galu 532 | galue 533 | galuega 534 | galulue 535 | gasegase 536 | -gatā 537 | -gofie 538 | gutu 539 | lā 540 | lā 541 | lā 542 | lā'au 543 | lā'aupese 544 | laina 545 | laisene 546 | lā'iti 547 | la'itiiti 548 | laititi 549 | la'u 550 | lau 551 | lau 552 | lau- 553 | lā'ua 554 | lauiloa 555 | lauiti 556 | lauitiiti 557 | lauititi 558 | lau'ulu 559 | lauulu 560 | laulau 561 | laumata 562 | laumei 563 | launiu 564 | laupapa 565 | lautele 566 | lautī 567 | lagi 568 | lago 569 | lagomeli 570 | lale 571 | lālelei 572 | lalo 573 | lalolagi 574 | lana 575 | lanu 576 | lanumeamata 577 | lanumoana 578 | lanumoli 579 | lāpiti 580 | lāpo'a 581 | lāpopo'a 582 | lāpotopoto 583 | lata 584 | latalata 585 | latou 586 | latu 587 | lava 588 | lavalava 589 | lakapī 590 | laki 591 | lē 592 | le 593 | le'ā 594 | lea 595 | lēai 596 | leaga 597 | leaga 598 | le'i 599 | leo 600 | leoleo 601 | leoleoina 602 | leotele 603 | lelā 604 | le lavā 605 | lele 606 | lele 607 | lelei 608 | lēmū 609 | lenā 610 | lenei 611 | lesona 612 | leva 613 | liu 614 | liua 615 | ligi 616 | liliu 617 | lima 618 | lipoti 619 | lisi 620 | lisiti 621 | loa 622 | loi 623 | loia 624 | lo'o 625 | lo outou 626 | lo'u 627 | lou 628 | loga 629 | logo 630 | logona 631 | lo la 632 | lo latou 633 | loli 634 | loloa 635 | lololo 636 | lolomi 637 | loloto 638 | lolotu 639 | lo lua 640 | lo ma 641 | lo matou 642 | lona 643 | lo ta 644 | lo tatou 645 | loto 646 | lotu 647 | loka 648 | lua 649 | lua 650 | luasefulu 651 | lue 652 | luelue 653 | luga 654 | lūlū 655 | lulu 656 | lūlūina 657 | luma 658 | lumana'i 659 | lupe 660 | ma 661 | ma'a 662 | ma'alili 663 | ma'ama'a 664 | maea 665 | ma'i 666 | mai 667 | maia 668 | maile 669 | maimau 670 | ma'omi 671 | mā'ona 672 | maota 673 | mau 674 | maua 675 | mauaina 676 | mau'oloa 677 | mauga 678 | maukeni 679 | mafai 680 | mafaia 681 | māfaufau 682 | māfanafana 683 | mafolafola 684 | magalo 685 | mago 686 | mago 687 | malaga 688 | mālamalama 689 | malemo 690 | malepe 691 | malie 692 | mālie 693 | māliega 694 | maliu 695 | mālilie 696 | maliliu 697 | malō 698 | mālō 699 | mālōlō 700 | mālōlōina 701 | mālōlōga 702 | mālolōsi 703 | mālōsi 704 | malū 705 | mālūlū 706 | mamā 707 | mamao 708 | mamafa 709 | mamana 710 | māmoe 711 | mānaia 712 | mana'o 713 | mana'oga 714 | mana'omia 715 | manana'o 716 | manatu 717 | manatua 718 | manava 719 | manogi 720 | manogia 721 | manū 722 | manu 723 | manuia 724 | manulele 725 | manūmālō 726 | mapē 727 | masalo 728 | masani 729 | masi 730 | māsima 731 | masimasi 732 | māsina 733 | masini 734 | masipopo 735 | mata 736 | mata 737 | matā- 738 | mata'i- 739 | matai 740 | mata'inumera 741 | mata'itusi 742 | matā'upu 743 | matāgaluega 744 | matagi 745 | matagofie 746 | matala 747 | matamata 748 | Mati 749 | matou 750 | matua 751 | matua 752 | matuā 753 | mātua 754 | matutua 755 | mavae 756 | maketi 757 | Me 758 | mea 759 | mea'ai 760 | meaā'oga 761 | meaalofa 762 | meafaigaluega 763 | meafale 764 | meata'alo 765 | meli 766 | meli 767 | migi 768 | mili 769 | miliona 770 | mimitavale 771 | minisita 772 | minute 773 | misa 774 | miti 775 | miti 776 | miti 777 | mitiafu 778 | mō 779 | moa 780 | moa 781 | moana 782 | moavao 783 | mo'e 784 | moe 785 | moei'ini 786 | moega 787 | mo'i 788 | mogamoga 789 | mole 790 | mōlī 791 | moli 792 | mōlī uila 793 | mōlī matagi 794 | mōlī sela 795 | momoe 796 | momoli 797 | moni 798 | motu 799 | mū 800 | muamua 801 | mulimuli 802 | mūmū 803 | mūmū tutupa 804 | musika 805 | musu 806 | musumusu 807 | na 808 | nā 809 | naifi 810 | na'o 811 | nauna 812 | namu 813 | ne'i 814 | nei 815 | ni 816 | niu 817 | Niu Sila 818 | nifo 819 | nofo 820 | nofoa 821 | nofoaga 822 | nofogofie 823 | nofonofo 824 | nonofo 825 | Novema 826 | nu'u 827 | numera 828 | pā 829 | pā 830 | pa'e'e 831 | pa'e'e'e 832 | pa'epa'e 833 | pa'i 834 | pa'ia 835 | paipa 836 | pāolo 837 | pa'ū 838 | pa'u 839 | pālagi 840 | pālalagi 841 | palapala 842 | palapalā 843 | palaka 844 | pālemia 845 | papa'i 846 | papālagi 847 | Pasefika 848 | pasese 849 | pasi 850 | pasi 851 | pata 852 | Patele 853 | pateta 854 | pati 855 | patipati 856 | pē 857 | pe 858 | pe'a 859 | pe'a 860 | pefu 861 | pefua 862 | pelē 863 | pēmata 864 | peni 865 | penisini 866 | pepa 867 | pepa 868 | pepe 869 | pepe 870 | pepelo 871 | pepese 872 | pese 873 | pesega 874 | peresetene 875 | Peretania 876 | pia 877 | pi'o 878 | pili 879 | pili 880 | pilia 881 | piliki 882 | pīniki 883 | pisa 884 | pisaō 885 | pisapisaō 886 | pisi 887 | pisinisi 888 | pito 889 | piki 890 | pikiapu 891 | pō 892 | pō 893 | po 894 | po'a 895 | po'o 896 | pou 897 | pogisā 898 | Polenisia 899 | polesi 900 | polo 901 | polo 902 | poni 903 | popo 904 | popole 905 | popolevale 906 | popoto 907 | poto 908 | potopoto 909 | potu 910 | potumoe 911 | povi 912 | pū 913 | pua'a 914 | puapuaga 915 | pu'e 916 | pu'eina 917 | puipui 918 | puipuia 919 | puipuiga 920 | pu'upu'u 921 | pula 922 | pule 923 | pulea 924 | puleā'oga 925 | pulega 926 | pulenu'u 927 | pulou 928 | pulukalami 929 | puna 930 | pupula 931 | pusa 932 | pusa'aisa 933 | pusi 934 | pusi 935 | puta 936 | sā 937 | sā 938 | sa'a 939 | saimini 940 | Saina 941 | saini 942 | sainia 943 | sa'o 944 | sau 945 | sau 946 | sāuā 947 | sala 948 | salaga 949 | salu 950 | salusalu 951 | samasama 952 | sami 953 | Sāmoa 954 | sana 955 | sapelu 956 | sasa 957 | savali 958 | savalivali 959 | savavali 960 | savili 961 | saka 962 | se 963 | se'evae 964 | se'i 965 | sei 966 | sefe 967 | sefulu 968 | sela 969 | selau 970 | selo 971 | sene 972 | senetenari 973 | sesē 974 | Setema 975 | setete 976 | seki 977 | sekia 978 | sero 979 | siamu 980 | siamponi 981 | siaki 982 | siaki 983 | Sione 984 | si'usi'i 985 | silafia 986 | sili 987 | siliva 988 | sipuni 989 | sipunitī 990 | sisi 991 | sisi 992 | sisi Aferika 993 | sisiva 994 | siva 995 | sivafou 996 | Sikotilani 997 | sikulū 998 | soifua 999 | soifuaga 1000 | so'o 1001 | sou 1002 | sole 1003 | solo 1004 | soloina 1005 | solofanua 1006 | solosolo 1007 | sona 1008 | sosi 1009 | sosisi 1010 | soso 1011 | soso'ese 1012 | suafa 1013 | suamalie 1014 | su'e 1015 | su'ega 1016 | su'esu'e 1017 | su'esu'ega 1018 | sui 1019 | su'ilima 1020 | su'isu'i 1021 | suisui 1022 | suō 1023 | suga 1024 | supo 1025 | sūsū 1026 | susū 1027 | susu 1028 | susuga 1029 | suka 1030 | sukalati 1031 | tā 1032 | tā 1033 | ta'a 1034 | ta'a- 1035 | tā'a'alo 1036 | ta'alo 1037 | ta'aloga 1038 | ta'amilo 1039 | ta'amilomilo 1040 | ta'amu 1041 | ta'avale 1042 | tae 1043 | taeao 1044 | tā'e'ele 1045 | tā'ele 1046 | ta'i- 1047 | tai 1048 | taimi 1049 | ta'itasi 1050 | ta'ito'atasi 1051 | tā'oto 1052 | tau 1053 | ta'ua 1054 | tā'ua 1055 | tauaso 1056 | taugatā 1057 | taugofie 1058 | taulima 1059 | tauloto 1060 | taumafa 1061 | taumafai 1062 | taumāfanafana 1063 | taumatau 1064 | taunu'u 1065 | tausaga 1066 | tausami 1067 | tautala 1068 | tautalatala 1069 | tautua 1070 | tauvae 1071 | tafao 1072 | tafaoga 1073 | tafafao 1074 | tafatafao 1075 | tafe 1076 | tafea 1077 | tafefe 1078 | taga 1079 | taga 1080 | tagata 1081 | tagi 1082 | tala 1083 | tālā 1084 | tala fou 1085 | talane 1086 | talanoa 1087 | talanoaga 1088 | talavou 1089 | tali 1090 | talie 1091 | taliga 1092 | talo 1093 | talofa 1094 | talofai 1095 | talofa ia 1096 | tama 1097 | tamā 1098 | tama'i 1099 | tama'ilima 1100 | tama'ita'i 1101 | tamaiti 1102 | tamaitiiti 1103 | tamaititi 1104 | tamāloa 1105 | tamāloloa 1106 | tamo'e 1107 | tāmomo'e 1108 | tapa'a 1109 | tapē 1110 | tapena 1111 | tapuni 1112 | tapunia 1113 | tasi 1114 | tatau 1115 | tatala 1116 | tatalo 1117 | tātou 1118 | taro 1119 | te 1120 | teine 1121 | teineiti 1122 | teineitiiti 1123 | teineititi 1124 | teu 1125 | teuila 1126 | teuteu 1127 | telē 1128 | tele 1129 | telefoni 1130 | televise 1131 | Tesema 1132 | tetelē 1133 | tetele 1134 | tekonolosi 1135 | tī 1136 | ti'eti'e 1137 | tīgā 1138 | tilotilo 1139 | timu 1140 | timuga 1141 | tinā 1142 | tino 1143 | tipi 1144 | tīpolo 1145 | tīpoti 1146 | tivi 1147 | tō 1148 | to'a- 1149 | to'aitiiti 1150 | to'aititi 1151 | to'afia 1152 | to'alua 1153 | to'atele 1154 | to'atolu 1155 | toe 1156 | toeaina 1157 | toeitiiti 1158 | toeititi 1159 | tōfā 1160 | Toga 1161 | togafiti 1162 | togi 1163 | togi 1164 | togia 1165 | togia 1166 | tolotolo 1167 | tolu 1168 | tomua 1169 | toniga 1170 | tonu 1171 | tope 1172 | topetope 1173 | toso 1174 | tosotoso 1175 | toto 1176 | totogi 1177 | totogia 1178 | totonu 1179 | tū 1180 | tua 1181 | tuai 1182 | tuafafine 1183 | tuagane 1184 | tui 1185 | tu'u 1186 | tu'ua 1187 | tu'uaga 1188 | tu'uina 1189 | tu'uga 1190 | tulāfale 1191 | tūlaga 1192 | tulilima 1193 | tulivae 1194 | tulou 1195 | tumu 1196 | tuna 1197 | tupe 1198 | tupu 1199 | tupu 1200 | tusa 1201 | tusi 1202 | tusia 1203 | tusiata 1204 | tusiga 1205 | tusi pa'ia 1206 | tusitala 1207 | tusitusi 1208 | tusitusiga 1209 | tūto'atasi 1210 | tūtū 1211 | tutusa 1212 | vā 1213 | va'a 1214 | va'ai 1215 | va'aia 1216 | va'alele 1217 | va'ava'ai 1218 | va'ava'aiga 1219 | vae 1220 | vaega 1221 | vai 1222 | vāi- 1223 | vai'aisa 1224 | vāiaso 1225 | vaifala 1226 | vāifale 1227 | vailā'au 1228 | vaimoli 1229 | vaipaipa 1230 | vaipou 1231 | vaipuna 1232 | vaisā 1233 | vaitā'ele 1234 | vaitafe 1235 | vaitīpolo 1236 | vaivai 1237 | vaivai 1238 | vao 1239 | vaganā 1240 | vala'au 1241 | -vale 1242 | valea 1243 | valelea 1244 | vali 1245 | valiga 1246 | valu 1247 | vānimonimo 1248 | vasa 1249 | vase 1250 | vasega 1251 | vavau 1252 | vave 1253 | vela 1254 | vevela 1255 | vi'i 1256 | vi'ia 1257 | vi'iga 1258 | violē 1259 | vili 1260 | vilivili 1261 | vivi'i 1262 | volipolo 1263 | haleluia 1264 | kalena 1265 | kalesini 1266 | kalone 1267 | kamela 1268 | kamupanī 1269 | kapeneta 1270 | kapeta 1271 | kāpeteni 1272 | karesini 1273 | keke 1274 | Kerisimasi 1275 | kī 1276 | kiliki 1277 | kilomita 1278 | kisi 1279 | kitala 1280 | kitara 1281 | kiki 1282 | kikia 1283 | kofe 1284 | koma 1285 | komiti 1286 | kopi 1287 | koko 1288 | kuata 1289 | kusi 1290 | kuka 1291 | kukama 1292 | rakapī 1293 | ripoti 1294 | Roma -------------------------------------------------------------------------------- /server/dict/sm.txt: -------------------------------------------------------------------------------- 1 | 2 | 'a 3 | -a 4 | a 5 | a- 6 | ā 7 | 'a'ai 8 | a'ao 9 | a'au 10 | ae 11 | 'ai 12 | ai 13 | ai 14 | 'aiga 15 | 'āiga 16 | 'aina 17 | 'aisa 18 | 'aiseā 19 | aitu 20 | 'a'o 21 | a'o 22 | ao 23 | ao 24 | aoāuli 25 | aofai 26 | aofia 27 | 'aogā 28 | ā'oga 29 | 'Aokuso 30 | 'au 31 | a'u 32 | a'u 33 | au 34 | 'aua 35 | 'auā 36 | 'auala 37 | 'auivi 38 | 'aufa'i 39 | 'aufaigaluega 40 | aulelei 41 | 'aumai 42 | Ausetalia 43 | autafa 44 | 'autalavou 45 | 'auva'a 46 | 'auro 47 | afa 48 | 'āfai 49 | āfāina 50 | afafine 51 | afakasi 52 | afe 53 | afea 54 | Aferika 55 | afi 56 | afiafi 57 | afio 58 | afioga 59 | afifio 60 | afitusi 61 | 'afu 62 | afu 63 | aga 64 | agaalofa 65 | agaga 66 | agaleaga 67 | agalelei 68 | agaleleiina 69 | aganu'u 70 | agavale 71 | ala 72 | ala 73 | āla 74 | alaisa 75 | aleluia 76 | ali'i 77 | alo 78 | alo 79 | alofa 80 | alolofa 81 | alu 82 | 'aluga 83 | amata 84 | amataga 85 | amene 86 | Amerika 87 | amio 88 | amioga 89 | amiotonu 90 | ana 91 | ana- 92 | anafea 93 | ananafi 94 | ananei 95 | anapō 96 | aniani 97 | 'apa 98 | apa'au 99 | 'Apelila 100 | 'Aperila 101 | api 102 | apogā- 103 | apogāleveleve 104 | apogālevelevēa 105 | 'apu 106 | asiasi 107 | aso 108 | aso'uma 109 | Aso Falaile 110 | Aso Faraile 111 | Aso Gafua 112 | Aso Lua 113 | Aso Lulu 114 | Aso Sā 115 | Aso To'ona'i 116 | Aso Tofi 117 | asu 118 | 'ata 119 | ata 120 | atali'i 121 | ato 122 | atoa 123 | atu 124 | Atua 125 | atunu'u 126 | avanoa 127 | 'ave 128 | 'avea 129 | 'ave'ave 130 | 'ave'ese 131 | 'ave'esea 132 | 'avepasi 133 | 'aveta'avale 134 | araisa 135 | 'ārio 136 | 'e 137 | e 138 | e 139 | e 140 | e 141 | 'e'efu 142 | 'e'ena 143 | Europa 144 | 'efu'efu 145 | 'ele'ele 146 | eletise 147 | 'ena 148 | 'ena'ena 149 | 'ese 150 | 'ese'ese 151 | 'ese'esega 152 | 'eseina 153 | esi 154 | eva 155 | ekalesia 156 | 'ī 157 | 'ī 158 | 'ī2 159 | i 160 | i'a 161 | ia 162 | ia 163 | ia 164 | Ianuali 165 | Ianuari 166 | iata 167 | ia te 168 | iate 169 | 'ie 170 | 'ie afu 171 | 'ie faitaga 172 | 'ie tōga 173 | Ioane 174 | 'ioe 175 | Iulai 176 | Iuni 177 | iunivesite 178 | ifo 179 | Igilisi 180 | igoa 181 | ili 182 | ilo 183 | iloa 184 | iloagofie 185 | ina 186 | inu 187 | ipu 188 | ipu mafolafola 189 | ipu mālamalama 190 | ipupopo 191 | iputī 192 | isi 193 | isu 194 | 'isumu 195 | ita 196 | iti 197 | itiiti 198 | ititi 199 | itū 200 | itū'āiga 201 | itūlā 202 | itūlau 203 | iva 204 | ivi 205 | 'ō 206 | 'ō 207 | 'o 208 | ō 209 | o 210 | 'oe 211 | oi 212 | o'o 213 | 'o'omi 214 | 'o'omi'omi 215 | o'ona 216 | 'ou 217 | o'u 218 | ou 219 | 'oulua 220 | 'outou 221 | ofi 222 | ofisa 223 | ofu 224 | ofutino 225 | ofuvae 226 | ogā'umu 227 | ola 228 | olaga 229 | 'o le 'ā 230 | 'ole'ā 231 | 'oloa 232 | 'o lo'o 233 | 'olo'o 234 | ō mai 235 | 'omo 236 | ona 237 | ona 238 | onā 239 | oneone 240 | ono 241 | onosa'i 242 | oso 243 | osooso 244 | 'oti 245 | 'oti 246 | oti 247 | 'ova 248 | oka 249 | 'Oketopa 250 | 'ua 251 | uaea 252 | uaina 253 | uafu 254 | uati 255 | Ueligitone 256 | uiga 257 | uiga'ese 258 | uila 259 | uili 260 | uō 261 | 'u'umi 262 | ula 263 | ula 264 | ulaula 265 | ulavale 266 | uli 267 | uli 268 | uliuli 269 | uliga 270 | 'ulu 271 | ulu 272 | ulufafo 273 | ulufale 274 | 'uma 275 | 'umī 276 | 'umi 277 | 'umu 278 | umukuka 279 | 'upu 280 | uso 281 | usu 282 | usu 283 | uta 284 | fā 285 | fā 286 | fa'a 287 | fa'a- 288 | fa'a'aogā 289 | fa'a'aogāina 290 | fa'aaloalo 291 | fa'aapogāleveleve 292 | fa'aata 293 | fa'aeteete 294 | fa'aigoa 295 | fa'aili 296 | fa'ainu 297 | fa'aipoipo 298 | fa'aipoipoga 299 | fa'a'ova 300 | fa'auli 301 | fa'afafine 302 | fa'afeiloa'i 303 | fa'afetai 304 | fa'afiafia 305 | fa'afīlēmū 306 | fa'afou 307 | fa'afouina 308 | fa'agalo 309 | fa'alapotopotoga 310 | fa'alavelave 311 | fa'alavelaveina 312 | fa'aleaga 313 | fa'aleagaina 314 | fa'aleuō 315 | fa'alēfiafia 316 | fa'alelei 317 | fa'aleleia 318 | fa'aliliu 319 | fa'aliliuina 320 | fa'alogo 321 | fa'alogoina 322 | faalogologo 323 | fa'ama'a 324 | fa'amāoni 325 | fa'amau 326 | fa'amaumau 327 | fa'amaumauina 328 | fa'amāfanafana 329 | fa'amālama 330 | fa'amālamalama 331 | faamālōlō 332 | fa'amālōsi 333 | fa'amālōsia 334 | fa'amamā 335 | fa'amamafa 336 | fa'amanatu 337 | faamanatuga 338 | fa'amanuia 339 | faamanuiaga 340 | fa'amāsima 341 | fa'amasino 342 | fa'amasinoga 343 | fa'amatai 344 | fa'amatala 345 | fa'amavae 346 | fa'amavaega 347 | fa'amoemoe 348 | faamoemoega 349 | fa'amolemole 350 | fa'anoanoa 351 | fa'apa'ia 352 | fa'apāolo 353 | fa'apa'ū 354 | fa'apa'u 355 | fa'apālagi 356 | fa'apalapalā 357 | fa'apapālagi 358 | fa'apea 359 | fa'apefea 360 | fa'apepepepe 361 | fa'aperetania 362 | fa'apipi'i 363 | fa'asā 364 | fa'asāina 365 | fa'asa'o 366 | fa'asala 367 | fa'asalaina 368 | fa'asalaga 369 | fa'asamoa 370 | fa'aselau 371 | fa'asilasilaga 372 | fa'asino 373 | fa'asolo 374 | fa'asusu 375 | fa'asuka 376 | fa'ata'amilomilo 377 | fa'atā'ele 378 | fa'ata'ita'i 379 | fa'ata'ita'iga 380 | fa'atau 381 | fa'atauina 382 | fa'atafa 383 | fa'atali 384 | fa'atalitali 385 | fa'atalofa 386 | fa'atasi 387 | fa'atīgā 388 | fa'atino 389 | fa'atinoga 390 | fa'atolu 391 | fa'atonu 392 | fa'atonuina 393 | fa'atonuga 394 | fa'atuatua 395 | fa'atumu 396 | fa'atumuina 397 | fa'avae 398 | fa'avaeina 399 | fa'avalea 400 | fa'avavau 401 | fa'avave 402 | fa'avela 403 | fa'avelaina 404 | fa'avevela 405 | fa'i 406 | fai 407 | faia 408 | faiā'oga 409 | faifai 410 | faife'au 411 | faiga 412 | faigaluega 413 | faigatā 414 | faigofie 415 | fainumera 416 | faitau 417 | faitauaofai 418 | faitauina 419 | faitautusi 420 | faitoto'a 421 | fao 422 | fautasi 423 | fafao 424 | fafana 425 | fafine 426 | fafo 427 | fagu 428 | fagususu 429 | fala 430 | falaoa 431 | fala saina 432 | fale 433 | fale'aiga 434 | faleā'oga 435 | fale'oloa 436 | falema'i 437 | falemanu 438 | falemeli 439 | falepuipui 440 | falesā 441 | faleta'avale 442 | faletua 443 | faletupe 444 | fālōlō 445 | fana 446 | fānau 447 | fānanau 448 | fanua 449 | fasi 450 | fasioti 451 | fasiotia 452 | fasifalaoa 453 | fasiga 454 | fasimoli 455 | fasipē 456 | fasipovi 457 | fasipua'a 458 | fata 459 | fatafata 460 | fatu 461 | fea 462 | fe'au 463 | fe'ausi 464 | fealua'i 465 | fealualua'i 466 | fe'e 467 | feiloa'i 468 | feiloa'iga 469 | feinu 470 | feoloolo 471 | feololo 472 | feoti 473 | fefe 474 | fefefe 475 | fefevale 476 | felelei 477 | Fepuali 478 | Fepuari 479 | fesili 480 | fesoasoani 481 | feso'ota'i 482 | feso'ota'iga 483 | fesuia'i 484 | fetalai 485 | fetalaiga 486 | fetogi 487 | fetū 488 | fia 489 | fia 490 | fia'ai 491 | fiafia 492 | fiafiaga 493 | fiamoe 494 | fīlēmū 495 | fili 496 | fili 497 | filifili 498 | filifili 499 | filifilia 500 | filifiliga 501 | finagalo 502 | Fiti 503 | fitu 504 | fo'i 505 | fou 506 | fofoga 507 | fofola 508 | fogā- 509 | fogā'ele'ele 510 | fola 511 | foliga 512 | foloa 513 | fōma'i 514 | fono 515 | fu'a 516 | fua 517 | fua 518 | fuālā'au 519 | fuālā'au'aina 520 | fuāmoa 521 | fugalā'au 522 | fulū 523 | fusu 524 | -ga 525 | gaoi 526 | gaoia 527 | gaogao 528 | gaupapa 529 | gafa 530 | gagana 531 | galo 532 | galu 533 | galue 534 | galuega 535 | galulue 536 | gasegase 537 | -gatā 538 | -gofie 539 | gutu 540 | lā 541 | lā 542 | lā 543 | lā'au 544 | lā'aupese 545 | laina 546 | laisene 547 | lā'iti 548 | la'itiiti 549 | laititi 550 | la'u 551 | lau 552 | lau 553 | lau- 554 | lā'ua 555 | lauiloa 556 | lauiti 557 | lauitiiti 558 | lauititi 559 | lau'ulu 560 | lauulu 561 | laulau 562 | laumata 563 | laumei 564 | launiu 565 | laupapa 566 | lautele 567 | lautī 568 | lagi 569 | lago 570 | lagomeli 571 | lale 572 | lālelei 573 | lalo 574 | lalolagi 575 | lana 576 | lanu 577 | lanumeamata 578 | lanumoana 579 | lanumoli 580 | lāpiti 581 | lāpo'a 582 | lāpopo'a 583 | lāpotopoto 584 | lata 585 | latalata 586 | latou 587 | latu 588 | lava 589 | lavalava 590 | lakapī 591 | laki 592 | lē 593 | le 594 | le'ā 595 | lea 596 | lēai 597 | leaga 598 | leaga 599 | le'i 600 | leo 601 | leoleo 602 | leoleoina 603 | leotele 604 | lelā 605 | le lavā 606 | lele 607 | lele 608 | lelei 609 | lēmū 610 | lenā 611 | lenei 612 | lesona 613 | leva 614 | liu 615 | liua 616 | ligi 617 | liliu 618 | lima 619 | lipoti 620 | lisi 621 | lisiti 622 | loa 623 | loi 624 | loia 625 | lo'o 626 | lo outou 627 | lo'u 628 | lou 629 | loga 630 | logo 631 | logona 632 | lo la 633 | lo latou 634 | loli 635 | loloa 636 | lololo 637 | lolomi 638 | loloto 639 | lolotu 640 | lo lua 641 | lo ma 642 | lo matou 643 | lona 644 | lo ta 645 | lo tatou 646 | loto 647 | lotu 648 | loka 649 | lua 650 | lua 651 | luasefulu 652 | lue 653 | luelue 654 | luga 655 | lūlū 656 | lulu 657 | lūlūina 658 | luma 659 | lumana'i 660 | lupe 661 | ma 662 | ma'a 663 | ma'alili 664 | ma'ama'a 665 | maea 666 | ma'i 667 | mai 668 | maia 669 | maile 670 | maimau 671 | ma'omi 672 | mā'ona 673 | maota 674 | mau 675 | maua 676 | mauaina 677 | mau'oloa 678 | mauga 679 | maukeni 680 | mafai 681 | mafaia 682 | māfaufau 683 | māfanafana 684 | mafolafola 685 | magalo 686 | mago 687 | mago 688 | malaga 689 | mālamalama 690 | malemo 691 | malepe 692 | malie 693 | mālie 694 | māliega 695 | maliu 696 | mālilie 697 | maliliu 698 | malō 699 | mālō 700 | mālōlō 701 | mālōlōina 702 | mālōlōga 703 | mālolōsi 704 | mālōsi 705 | malū 706 | mālūlū 707 | mamā 708 | mamao 709 | mamafa 710 | mamana 711 | māmoe 712 | mānaia 713 | mana'o 714 | mana'oga 715 | mana'omia 716 | manana'o 717 | manatu 718 | manatua 719 | manava 720 | manogi 721 | manogia 722 | manū 723 | manu 724 | manuia 725 | manulele 726 | manūmālō 727 | mapē 728 | masalo 729 | masani 730 | masi 731 | māsima 732 | masimasi 733 | māsina 734 | masini 735 | masipopo 736 | mata 737 | mata 738 | matā- 739 | mata'i- 740 | matai 741 | mata'inumera 742 | mata'itusi 743 | matā'upu 744 | matāgaluega 745 | matagi 746 | matagofie 747 | matala 748 | matamata 749 | Mati 750 | matou 751 | matua 752 | matua 753 | matuā 754 | mātua 755 | matutua 756 | mavae 757 | maketi 758 | Me 759 | mea 760 | mea'ai 761 | meaā'oga 762 | meaalofa 763 | meafaigaluega 764 | meafale 765 | meata'alo 766 | meli 767 | meli 768 | migi 769 | mili 770 | miliona 771 | mimitavale 772 | minisita 773 | minute 774 | misa 775 | miti 776 | miti 777 | miti 778 | mitiafu 779 | mō 780 | moa 781 | moa 782 | moana 783 | moavao 784 | mo'e 785 | moe 786 | moei'ini 787 | moega 788 | mo'i 789 | mogamoga 790 | mole 791 | mōlī 792 | moli 793 | mōlī uila 794 | mōlī matagi 795 | mōlī sela 796 | momoe 797 | momoli 798 | moni 799 | motu 800 | mū 801 | muamua 802 | mulimuli 803 | mūmū 804 | mūmū tutupa 805 | musika 806 | musu 807 | musumusu 808 | na 809 | nā 810 | naifi 811 | na'o 812 | nauna 813 | namu 814 | ne'i 815 | nei 816 | ni 817 | niu 818 | Niu Sila 819 | nifo 820 | nofo 821 | nofoa 822 | nofoaga 823 | nofogofie 824 | nofonofo 825 | nonofo 826 | Novema 827 | nu'u 828 | numera 829 | pā 830 | pā 831 | pa'e'e 832 | pa'e'e'e 833 | pa'epa'e 834 | pa'i 835 | pa'ia 836 | paipa 837 | pāolo 838 | pa'ū 839 | pa'u 840 | pālagi 841 | pālalagi 842 | palapala 843 | palapalā 844 | palaka 845 | pālemia 846 | papa'i 847 | papālagi 848 | Pasefika 849 | pasese 850 | pasi 851 | pasi 852 | pata 853 | Patele 854 | pateta 855 | pati 856 | patipati 857 | pē 858 | pe 859 | pe'a 860 | pe'a 861 | pefu 862 | pefua 863 | pelē 864 | pēmata 865 | peni 866 | penisini 867 | pepa 868 | pepa 869 | pepe 870 | pepe 871 | pepelo 872 | pepese 873 | pese 874 | pesega 875 | peresetene 876 | Peretania 877 | pia 878 | pi'o 879 | pili 880 | pili 881 | pilia 882 | piliki 883 | pīniki 884 | pisa 885 | pisaō 886 | pisapisaō 887 | pisi 888 | pisinisi 889 | pito 890 | piki 891 | pikiapu 892 | pō 893 | pō 894 | po 895 | po'a 896 | po'o 897 | pou 898 | pogisā 899 | Polenisia 900 | polesi 901 | polo 902 | polo 903 | poni 904 | popo 905 | popole 906 | popolevale 907 | popoto 908 | poto 909 | potopoto 910 | potu 911 | potumoe 912 | povi 913 | pū 914 | pua'a 915 | puapuaga 916 | pu'e 917 | pu'eina 918 | puipui 919 | puipuia 920 | puipuiga 921 | pu'upu'u 922 | pula 923 | pule 924 | pulea 925 | puleā'oga 926 | pulega 927 | pulenu'u 928 | pulou 929 | pulukalami 930 | puna 931 | pupula 932 | pusa 933 | pusa'aisa 934 | pusi 935 | pusi 936 | puta 937 | sā 938 | sā 939 | sa'a 940 | saimini 941 | Saina 942 | saini 943 | sainia 944 | sa'o 945 | sau 946 | sau 947 | sāuā 948 | sala 949 | salaga 950 | salu 951 | salusalu 952 | samasama 953 | sami 954 | Sāmoa 955 | sana 956 | sapelu 957 | sasa 958 | savali 959 | savalivali 960 | savavali 961 | savili 962 | saka 963 | se 964 | se'evae 965 | se'i 966 | sei 967 | sefe 968 | sefulu 969 | sela 970 | selau 971 | selo 972 | sene 973 | senetenari 974 | sesē 975 | Setema 976 | setete 977 | seki 978 | sekia 979 | sero 980 | siamu 981 | siamponi 982 | siaki 983 | siaki 984 | Sione 985 | si'usi'i 986 | silafia 987 | sili 988 | siliva 989 | sipuni 990 | sipunitī 991 | sisi 992 | sisi 993 | sisi Aferika 994 | sisiva 995 | siva 996 | sivafou 997 | Sikotilani 998 | sikulū 999 | soifua 1000 | soifuaga 1001 | so'o 1002 | sou 1003 | sole 1004 | solo 1005 | soloina 1006 | solofanua 1007 | solosolo 1008 | sona 1009 | sosi 1010 | sosisi 1011 | soso 1012 | soso'ese 1013 | suafa 1014 | suamalie 1015 | su'e 1016 | su'ega 1017 | su'esu'e 1018 | su'esu'ega 1019 | sui 1020 | su'ilima 1021 | su'isu'i 1022 | suisui 1023 | suō 1024 | suga 1025 | supo 1026 | sūsū 1027 | susū 1028 | susu 1029 | susuga 1030 | suka 1031 | sukalati 1032 | tā 1033 | tā 1034 | ta'a 1035 | ta'a- 1036 | tā'a'alo 1037 | ta'alo 1038 | ta'aloga 1039 | ta'amilo 1040 | ta'amilomilo 1041 | ta'amu 1042 | ta'avale 1043 | tae 1044 | taeao 1045 | tā'e'ele 1046 | tā'ele 1047 | ta'i- 1048 | tai 1049 | taimi 1050 | ta'itasi 1051 | ta'ito'atasi 1052 | tā'oto 1053 | tau 1054 | ta'ua 1055 | tā'ua 1056 | tauaso 1057 | taugatā 1058 | taugofie 1059 | taulima 1060 | tauloto 1061 | taumafa 1062 | taumafai 1063 | taumāfanafana 1064 | taumatau 1065 | taunu'u 1066 | tausaga 1067 | tausami 1068 | tautala 1069 | tautalatala 1070 | tautua 1071 | tauvae 1072 | tafao 1073 | tafaoga 1074 | tafafao 1075 | tafatafao 1076 | tafe 1077 | tafea 1078 | tafefe 1079 | taga 1080 | taga 1081 | tagata 1082 | tagi 1083 | tala 1084 | tālā 1085 | tala fou 1086 | talane 1087 | talanoa 1088 | talanoaga 1089 | talavou 1090 | tali 1091 | talie 1092 | taliga 1093 | talo 1094 | talofa 1095 | talofai 1096 | talofa ia 1097 | tama 1098 | tamā 1099 | tama'i 1100 | tama'ilima 1101 | tama'ita'i 1102 | tamaiti 1103 | tamaitiiti 1104 | tamaititi 1105 | tamāloa 1106 | tamāloloa 1107 | tamo'e 1108 | tāmomo'e 1109 | tapa'a 1110 | tapē 1111 | tapena 1112 | tapuni 1113 | tapunia 1114 | tasi 1115 | tatau 1116 | tatala 1117 | tatalo 1118 | tātou 1119 | taro 1120 | te 1121 | teine 1122 | teineiti 1123 | teineitiiti 1124 | teineititi 1125 | teu 1126 | teuila 1127 | teuteu 1128 | telē 1129 | tele 1130 | telefoni 1131 | televise 1132 | Tesema 1133 | tetelē 1134 | tetele 1135 | tekonolosi 1136 | tī 1137 | ti'eti'e 1138 | tīgā 1139 | tilotilo 1140 | timu 1141 | timuga 1142 | tinā 1143 | tino 1144 | tipi 1145 | tīpolo 1146 | tīpoti 1147 | tivi 1148 | tō 1149 | to'a- 1150 | to'aitiiti 1151 | to'aititi 1152 | to'afia 1153 | to'alua 1154 | to'atele 1155 | to'atolu 1156 | toe 1157 | toeaina 1158 | toeitiiti 1159 | toeititi 1160 | tōfā 1161 | Toga 1162 | togafiti 1163 | togi 1164 | togi 1165 | togia 1166 | togia 1167 | tolotolo 1168 | tolu 1169 | tomua 1170 | toniga 1171 | tonu 1172 | tope 1173 | topetope 1174 | toso 1175 | tosotoso 1176 | toto 1177 | totogi 1178 | totogia 1179 | totonu 1180 | tū 1181 | tua 1182 | tuai 1183 | tuafafine 1184 | tuagane 1185 | tui 1186 | tu'u 1187 | tu'ua 1188 | tu'uaga 1189 | tu'uina 1190 | tu'uga 1191 | tulāfale 1192 | tūlaga 1193 | tulilima 1194 | tulivae 1195 | tulou 1196 | tumu 1197 | tuna 1198 | tupe 1199 | tupu 1200 | tupu 1201 | tusa 1202 | tusi 1203 | tusia 1204 | tusiata 1205 | tusiga 1206 | tusi pa'ia 1207 | tusitala 1208 | tusitusi 1209 | tusitusiga 1210 | tūto'atasi 1211 | tūtū 1212 | tutusa 1213 | vā 1214 | va'a 1215 | va'ai 1216 | va'aia 1217 | va'alele 1218 | va'ava'ai 1219 | va'ava'aiga 1220 | vae 1221 | vaega 1222 | vai 1223 | vāi- 1224 | vai'aisa 1225 | vāiaso 1226 | vaifala 1227 | vāifale 1228 | vailā'au 1229 | vaimoli 1230 | vaipaipa 1231 | vaipou 1232 | vaipuna 1233 | vaisā 1234 | vaitā'ele 1235 | vaitafe 1236 | vaitīpolo 1237 | vaivai 1238 | vaivai 1239 | vao 1240 | vaganā 1241 | vala'au 1242 | -vale 1243 | valea 1244 | valelea 1245 | vali 1246 | valiga 1247 | valu 1248 | vānimonimo 1249 | vasa 1250 | vase 1251 | vasega 1252 | vavau 1253 | vave 1254 | vela 1255 | vevela 1256 | vi'i 1257 | vi'ia 1258 | vi'iga 1259 | violē 1260 | vili 1261 | vilivili 1262 | vivi'i 1263 | volipolo 1264 | haleluia 1265 | kalena 1266 | kalesini 1267 | kalone 1268 | kamela 1269 | kamupanī 1270 | kapeneta 1271 | kapeta 1272 | kāpeteni 1273 | karesini 1274 | keke 1275 | Kerisimasi 1276 | kī 1277 | kiliki 1278 | kilomita 1279 | kisi 1280 | kitala 1281 | kitara 1282 | kiki 1283 | kikia 1284 | kofe 1285 | koma 1286 | komiti 1287 | kopi 1288 | koko 1289 | kuata 1290 | kusi 1291 | kuka 1292 | kukama 1293 | rakapī 1294 | ripoti 1295 | Roma 1296 | -------------------------------------------------------------------------------- /server/FindAWord.php: -------------------------------------------------------------------------------- 1 | dict_cache_path != "") { 49 | $path = $fw_lang[$lang_code] -> dict_cache_path; 50 | /* Fast escape with cached (pre-filtered) dictionary, rather than all that checking. */ 51 | if ($dict_txt = file_get_contents($path)) { 52 | $this -> dictionary = explode("\n", $dict_txt); 53 | return true; 54 | } 55 | } 56 | 57 | /* The path for the dictionary. */ 58 | $path = $fw_lang[$lang_code] -> dict_path; 59 | 60 | /* Load the dictionary file */ 61 | if (!$dict_txt = file_get_contents($path)) { 62 | return false; 63 | } 64 | 65 | /* Set up variables */ 66 | $w_ignore = false; 67 | $i = 1; 68 | $count_accepted = 0; 69 | $count_ignored = 0; 70 | $this -> dictionary = array(); 71 | $dict_arr = explode("\n", $dict_txt); 72 | 73 | /* Loop through the dictionary and pick suitable words for a find-a-word */ 74 | foreach ($dict_arr as $w) { 75 | $w_ignore = false; 76 | if ($ignore) { 77 | if ($w != mb_strtolower($w)) { 78 | $w_ignore = true; /* Ignore proper nouns and acronyms */ 79 | } 80 | if (mb_strlen($w) > 2 && !$w_ignore) { 81 | if (mb_substr($w, mb_strlen($w) - 2, 1) == "'") { 82 | $w_ignore = true; /* Ignore words where the second-last letter is an apostrophe. */ 83 | } 84 | } elseif (mb_strlen($w) <= 2) { 85 | $ignore = true; /* Cut out short words */ 86 | } 87 | } 88 | if (!$w_ignore && $w != "") { 89 | $this -> dictionary[$i] = $w; 90 | $i++; 91 | $count_accepted++; 92 | } else { 93 | $count_ignored++; 94 | } 95 | } 96 | 97 | if ($fw_lang[$lang_code] -> dict_cache_path != "") { 98 | $this -> saveDictCache($lang_code); 99 | } 100 | 101 | $end_time = microtime(true); 102 | $this -> dict_time = ($end_time - $start_time); 103 | return true; 104 | } 105 | 106 | protected function saveDictCache($lang_code) 107 | { 108 | global $fw_lang; 109 | $filename = $fw_lang[$lang_code] -> dict_cache_path; 110 | if ($fn = fopen($filename, "w")) { 111 | $fat_str = join("\n", $this -> dictionary); 112 | fwrite($fn, $fat_str); 113 | fclose($fn); 114 | echo "
Dictionary cache written for $lang_code.
"; 115 | } else { 116 | die("Writing out to $lang_code's dictionary cache failed. Please check permissions/paths or turn off the cache."); 117 | } 118 | } 119 | 120 | /* Either select random words, or store a list of words for the puzzle */ 121 | public function loadWords($words = array(), $num = 0) 122 | { 123 | $this -> words = array(); 124 | if (count($words) == 0) { 125 | $i = 1; 126 | if ($num < 0) { 127 | $num = 0; 128 | } 129 | if (count($this -> dictionary) == 0) { 130 | return false; 131 | } 132 | while ($num > ($i - 1)) { 133 | $id = rand(1, count($this->dictionary)); 134 | $this -> words[$this->dictionary[$id]] = $this->dictionary[$id]; 135 | $i++; 136 | } 137 | } else { 138 | foreach ($words as $word) { 139 | $this -> words[$word] = $word; 140 | } 141 | } 142 | 143 | foreach ($this -> words as $id => $word) { 144 | /* The dictionary is UTF-8, but this script does not properly support it yet. Convert back to ISO */ 145 | //$this -> words[$id] = iconv("UTF-8", "ISO-8859-1", $word); 146 | } 147 | 148 | ksort($this -> words); /* Words come out alphabetically */ 149 | return true; 150 | } 151 | 152 | /* Select a random letter from the given alphabet */ 153 | protected function alphabetSoup($alphabet) 154 | { 155 | $id = rand(0, count($alphabet)-1); 156 | return $alphabet[$id]; 157 | } 158 | 159 | /* The main show: Generate a find-a-word */ 160 | public function calculate($lang_code) 161 | { 162 | $fw_lang = self::supportedLanguages(); 163 | $abort = false; 164 | $start_time = microtime(true); 165 | 166 | /* Get some config options */ 167 | $alphabet = $fw_lang[$lang_code] -> alphabet; 168 | 169 | $d = 0; /* Half-and-half diagonal */ 170 | if ($this -> diagonal == "never") { 171 | $d = 1; 172 | } 173 | if ($this -> diagonal == "sometimes") { 174 | $d = -1; 175 | } 176 | $r = 0; /* Half-and-half reverse */ 177 | if ($this -> reverse == "never") { 178 | $r = 1; 179 | } 180 | if ($this -> reverse == "sometimes") { 181 | $r = -1; 182 | } 183 | 184 | /* Make blank board */ 185 | $this -> failure = array(); /* Clear errors */ 186 | for ($x = 1; $x <= $this -> width; $x++) { 187 | for ($y = 1; $y <= $this -> height; $y++) { 188 | $this -> key[$x][$y] = ""; 189 | } 190 | } 191 | 192 | /* Todo: Sorting words by length here will make sure the super-long words get a place. */ 193 | 194 | /* Loop words */ 195 | foreach ($this -> words as $word) { 196 | /* Spin and reverse as allowed */ 197 | if ($d == 0) { 198 | $dir = rand(0, 2); 199 | $c1 = 3; 200 | } else { 201 | $dir = rand(0, 1); 202 | $c1 = 2; 203 | } 204 | if ($r == 0) { 205 | $rev = rand(0, 1); 206 | $c2 = 2; 207 | } else { 208 | $rev = 0; 209 | $c2 = 1; 210 | } 211 | 212 | $loop = 0; 213 | $fail = -1; 214 | $comb = $c1 * $c2; /* Number of combinations for this thing */ 215 | while ($fail != 0 && $loop < $comb) { 216 | if ($fail > 0) { 217 | /* Todo: This should depend on the mod of c1 and c2 or somesuch */ 218 | if ($d != 1 && $comb % $c2 == 0) { 219 | $dir++; 220 | } /* Flip if allowed but wait for $rev if it has 2 modes. */ 221 | if ($dir == 3) { 222 | $dir = 0; 223 | } 224 | if ($r != 1) { 225 | $rev++; 226 | } 227 | if ($rev == 2) { 228 | $rev = 0; 229 | } 230 | } 231 | $fail = 0; 232 | 233 | /* See where we can put this word. */ 234 | $word_2d = $this -> doWordSquare($word, $dir, $rev); 235 | $options = $this -> enumPossibilities($word_2d); 236 | if (isset($options[2])) { /* Use joining options first always */ 237 | $this -> pasteWord($word_2d, explode(",", $options[2][rand(0, count($options[2]) - 1)])); 238 | $fail = 0; 239 | } elseif (isset($options[1])) { /* Next non-joining options (a lone word) */ 240 | $this -> pasteWord($word_2d, explode(",", $options[1][rand(0, count($options[1]) - 1)])); 241 | $fail = 0; 242 | } else { /* No options! shucks */ 243 | if ($this -> bug_out) { 244 | $abort = true; 245 | } 246 | if ($loop == 5) { 247 | $this -> failure[] = $word; 248 | } 249 | if ($fail == -1) { 250 | $fail = 0; 251 | } 252 | $fail++; 253 | } 254 | $loop++; 255 | if ($abort) { 256 | break; 257 | } /* Part of optional fast-bug-out mode */ 258 | } 259 | if ($abort) { 260 | break; 261 | } /* Part of optional fast-bug-out mode */ 262 | } 263 | 264 | /* Fill in with alphabet soup */ 265 | for ($x = 1; $x <= $this -> width; $x++) { 266 | for ($y = 1; $y <= $this -> height; $y++) { 267 | if ($this -> key[$x][$y] == "") { 268 | $this -> puzzle[$x][$y] = $this -> alphabetSoup($alphabet); 269 | } else { 270 | $this -> puzzle[$x][$y] = $this -> key[$x][$y]; 271 | } 272 | } 273 | } 274 | 275 | $end_time = microtime(true); 276 | $this -> calc_time = $end_time - $start_time; 277 | return true; 278 | } 279 | 280 | protected function pasteWord($word, $coords) 281 | { 282 | $x = $coords[0]; 283 | $y = $coords[1]; 284 | 285 | foreach ($word as $x_sub => $col) { 286 | foreach ($col as $y_sub => $char) { 287 | $x_dest = $x + $x_sub - 1; 288 | $y_dest = $y + $y_sub - 1; 289 | if ($y_dest > ($this -> height) || $x_dest > ($this -> width)) { 290 | /* Error here? should have been checked already by enum_possibilities. */ 291 | } elseif ($this -> key[$x_dest][$y_dest] == "") { 292 | $this -> key[$x_dest][$y_dest] = $char; 293 | } else { 294 | } 295 | } 296 | } 297 | } 298 | 299 | protected function doWordSquare($word, $direction = 0, $reverse = 0) 300 | { 301 | /* Put a word in a 2D array, optionally reversing it etc */ 302 | switch ($direction) { 303 | case 0: /* Horiz. */ 304 | $orientation['x'] = 1; 305 | $orientation['y'] = 0; 306 | break; 307 | case 1: /* Vert. */ 308 | $orientation['x'] = 0; 309 | $orientation['y'] = 1; 310 | break; 311 | default: /* Diag. */ 312 | $orientation['x'] = 1; 313 | $orientation['y'] = 1; 314 | break; 315 | } 316 | 317 | /* Reverse orientation if allowed */ 318 | if ($reverse == 1) { 319 | $orientation['x'] = -$orientation['x']; 320 | $orientation['y'] = -$orientation['y']; 321 | } 322 | 323 | /* Adjust orientations and reverse word to keep in boundaries. */ 324 | if ($orientation['y'] == -1 && $orientation['y'] == -1) { 325 | $orientation['y'] = 1; 326 | $orientation['x'] = 1; 327 | $word = $this -> reverse($word); 328 | } elseif ($orientation['y'] == -1) { 329 | $orientation['y'] = 1; 330 | $word = $this -> reverse($word); 331 | } elseif ($orientation['x'] == -1) { 332 | $orientation['x'] = 1; 333 | $word = $this -> reverse($word); 334 | } 335 | 336 | /* Pasting letters into 2D array. */ 337 | $next['x'] = 1; 338 | $next['y'] = 1; 339 | $letters = 0; 340 | 341 | for ($i = 0; $i < mb_strlen($word); $i++) { 342 | $temp[$next['x']][$next['y']] = mb_strtoupper(mb_substr($word, $i, 1)); 343 | $next['x'] = $next['x'] + $orientation['x']; 344 | $next['y'] = $next['y'] + $orientation['y']; 345 | } 346 | 347 | return $temp; 348 | } 349 | 350 | protected function enumPossibilities($board_struct) 351 | { 352 | /* List possible locations for this word (outputs list of joining possibilities and non-joining ones) */ 353 | $possibilities = array(); 354 | for ($y = 1; $y <= $this -> height; $y++) { 355 | for ($x = 1; $x <= $this -> width; $x++) { 356 | /* For each cell on the board... Attempt the word */ 357 | $possible = 1; 358 | foreach ($board_struct as $x_sub => $col) { 359 | foreach ($col as $y_sub => $char) { 360 | if ($possible != 0) { 361 | $x_check = $x + $x_sub - 1; 362 | $y_check = $y + $y_sub - 1; 363 | if (!isset($this -> key[$x_check][$y_check])) { 364 | $possible = 0; /* Can't paste off the board */ 365 | } else { 366 | /* Pasting over a character */ 367 | if ($this -> key[$x_check][$y_check] == "") { 368 | /* For blank squares, no change */ 369 | } elseif ($this -> key[$x_check][$y_check] == $char) { 370 | $possible = 2; /* Found a join! */ 371 | } else { 372 | $possible = 0; /* Can't paste over existing (different) letters. */ 373 | } 374 | } 375 | } 376 | } 377 | } 378 | 379 | /* All possible starting places */ 380 | if ($possible != 0) { 381 | $possibilities[$possible][] = "$x,$y"; 382 | if ($this -> fast) { 383 | return $possibilities; 384 | } 385 | } 386 | } 387 | } 388 | return $possibilities; 389 | } 390 | 391 | /* Output the find-a-word to a HTML table */ 392 | public function outpTable($puzzle) 393 | { 394 | $str = "\n"; 395 | for ($y = 1; $y <= $this -> height; $y++) { 396 | $str .= " \n"; 397 | for ($x = 1; $x <= $this -> width; $x++) { 398 | if ($puzzle[$x][$y] == "") { 399 | $str .= " \n"; 400 | } else { 401 | $str .= " \n"; 402 | } 403 | } 404 | $str .= " \n"; 405 | } 406 | $str .= "
 ".$puzzle[$x][$y]."
"; 407 | return $str; 408 | } 409 | 410 | /* Formatted table for showing the answers */ 411 | public function outpTableKey() 412 | { 413 | $str = "\n"; 414 | for ($y = 1; $y <= $this -> height; $y++) { 415 | $str .= " \n"; 416 | for ($x = 1; $x <= $this -> width; $x++) { 417 | if ($this -> puzzle[$x][$y] == $this -> key[$x][$y]) { 418 | $str .= " \n"; 419 | } else { 420 | $str .= " \n"; 421 | } 422 | } 423 | $str .= " \n"; 424 | } 425 | $str .= "
".$this -> puzzle[$x][$y]."".$this -> puzzle[$x][$y]."
"; 426 | return $str; 427 | } 428 | 429 | /* Plaintext block of letters */ 430 | protected function outpBlock($puzzle) 431 | { 432 | $str = ""; 433 | for ($y = 1; $y <= $this -> height; $y++) { 434 | for ($x = 1; $x <= $this -> width; $x++) { 435 | if ($puzzle[$x][$y] == "") { 436 | $str .= " "; 437 | } else { 438 | $str .= $puzzle[$x][$y]." "; 439 | } 440 | } 441 | $str .= "\n"; 442 | } 443 | return $str; 444 | } 445 | 446 | protected function reverse($str) 447 | { 448 | $res = ""; 449 | for ($i = 0; $i < mb_strlen($str); $i++) { 450 | $res .= mb_substr($str, (mb_strlen($str) - 1 - $i), 1); 451 | } 452 | return $res; 453 | } 454 | 455 | public static function supportedLanguages() 456 | { 457 | /* English */ 458 | $fw_lang['en'] = new WordlistLang(); 459 | $fw_lang['en'] -> code = "en"; 460 | $fw_lang['en'] -> name = "English (United States)"; 461 | $fw_lang['en'] -> alphabet = array( "A", "B", "C", "D", "E", "F", "G", "H", "I", 462 | "J", "K", "L", "M", "N", "O", "P", "Q", "R", 463 | "S", "T", "U", "V", "W", "X", "Y", "Z"); 464 | $fw_lang['en'] -> dict_path = "server/dict/en-us.txt"; 465 | $fw_lang['en'] -> dict_cache_path = "server/dict/en-us.cache.txt"; 466 | 467 | /* Samoan */ 468 | $fw_lang['sm'] = new WordlistLang(); 469 | $fw_lang['sm'] -> code = "sm"; 470 | $fw_lang['sm'] -> name = "Samoan"; 471 | $fw_lang['sm'] -> alphabet = array( "A", "E", "I", "O", "U", "F", "G", "L", "M", 472 | "N", "P", "S", "T", "V", "H", "K", "R"); 473 | $fw_lang['sm'] -> dict_path = "server/dict/sm.txt"; 474 | $fw_lang['sm'] -> dict_cache_path = "server/dict/sm.cache.txt"; 475 | return $fw_lang; 476 | } 477 | } 478 | -------------------------------------------------------------------------------- /client/sass/bs_variables.scss: -------------------------------------------------------------------------------- 1 | $bootstrap-sass-asset-helper: false !default; 2 | // 3 | // Variables 4 | // -------------------------------------------------- 5 | 6 | 7 | //== Colors 8 | // 9 | //## Gray and brand colors for use across Bootstrap. 10 | 11 | $gray-base: #000 !default; 12 | $gray-darker: lighten($gray-base, 13.5%) !default; // #222 13 | $gray-dark: lighten($gray-base, 20%) !default; // #333 14 | $gray: lighten($gray-base, 33.5%) !default; // #555 15 | $gray-light: lighten($gray-base, 46.7%) !default; // #777 16 | $gray-lighter: lighten($gray-base, 93.5%) !default; // #eee 17 | 18 | $brand-primary: darken(#428bca, 6.5%) !default; // #337ab7 19 | $brand-success: #5cb85c !default; 20 | $brand-info: #5bc0de !default; 21 | $brand-warning: #f0ad4e !default; 22 | $brand-danger: #d9534f !default; 23 | 24 | 25 | //== Scaffolding 26 | // 27 | //## Settings for some of the most global styles. 28 | 29 | //** Background color for ``. 30 | $body-bg: #fff !default; 31 | //** Global text color on ``. 32 | $text-color: $gray-dark !default; 33 | 34 | //** Global textual link color. 35 | $link-color: $brand-primary !default; 36 | //** Link hover color set via `darken()` function. 37 | $link-hover-color: darken($link-color, 15%) !default; 38 | //** Link hover decoration. 39 | $link-hover-decoration: underline !default; 40 | 41 | 42 | //== Typography 43 | // 44 | //## Font, line-height, and color for body text, headings, and more. 45 | 46 | $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default; 47 | $font-family-serif: Georgia, "Times New Roman", Times, serif !default; 48 | //** Default monospace fonts for ``, ``, and `
`.
 49 | $font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
 50 | $font-family-base:        $font-family-sans-serif !default;
 51 | 
 52 | $font-size-base:          14px !default;
 53 | $font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
 54 | $font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
 55 | 
 56 | $font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
 57 | $font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
 58 | $font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
 59 | $font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
 60 | $font-size-h5:            $font-size-base !default;
 61 | $font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
 62 | 
 63 | //** Unit-less `line-height` for use in components like buttons.
 64 | $line-height-base:        1.428571429 !default; // 20/14
 65 | //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 66 | $line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
 67 | 
 68 | //** By default, this inherits from the ``.
 69 | $headings-font-family:    inherit !default;
 70 | $headings-font-weight:    500 !default;
 71 | $headings-line-height:    1.1 !default;
 72 | $headings-color:          inherit !default;
 73 | 
 74 | 
 75 | //== Iconography
 76 | //
 77 | //## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
 78 | 
 79 | //** Load fonts from this directory.
 80 | 
 81 | // [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
 82 | // [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
 83 | $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
 84 | 
 85 | //** File name for all font files.
 86 | $icon-font-name:          "glyphicons-halflings-regular" !default;
 87 | //** Element ID within SVG icon file.
 88 | $icon-font-svg-id:        "glyphicons_halflingsregular" !default;
 89 | 
 90 | 
 91 | //== Components
 92 | //
 93 | //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
 94 | 
 95 | $padding-base-vertical:     6px !default;
 96 | $padding-base-horizontal:   12px !default;
 97 | 
 98 | $padding-large-vertical:    10px !default;
 99 | $padding-large-horizontal:  16px !default;
100 | 
101 | $padding-small-vertical:    5px !default;
102 | $padding-small-horizontal:  10px !default;
103 | 
104 | $padding-xs-vertical:       1px !default;
105 | $padding-xs-horizontal:     5px !default;
106 | 
107 | $line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
108 | $line-height-small:         1.5 !default;
109 | 
110 | $border-radius-base:        4px !default;
111 | $border-radius-large:       6px !default;
112 | $border-radius-small:       3px !default;
113 | 
114 | //** Global color for active items (e.g., navs or dropdowns).
115 | $component-active-color:    #fff !default;
116 | //** Global background color for active items (e.g., navs or dropdowns).
117 | $component-active-bg:       $brand-primary !default;
118 | 
119 | //** Width of the `border` for generating carets that indicator dropdowns.
120 | $caret-width-base:          4px !default;
121 | //** Carets increase slightly in size for larger components.
122 | $caret-width-large:         5px !default;
123 | 
124 | 
125 | //== Tables
126 | //
127 | //## Customizes the `.table` component with basic values, each used across all table variations.
128 | 
129 | //** Padding for ``s and ``s.
130 | $table-cell-padding:            8px !default;
131 | //** Padding for cells in `.table-condensed`.
132 | $table-condensed-cell-padding:  5px !default;
133 | 
134 | //** Default background color used for all tables.
135 | $table-bg:                      transparent !default;
136 | //** Background color used for `.table-striped`.
137 | $table-bg-accent:               #f9f9f9 !default;
138 | //** Background color used for `.table-hover`.
139 | $table-bg-hover:                #f5f5f5 !default;
140 | $table-bg-active:               $table-bg-hover !default;
141 | 
142 | //** Border color for table and cell borders.
143 | $table-border-color:            #ddd !default;
144 | 
145 | 
146 | //== Buttons
147 | //
148 | //## For each of Bootstrap's buttons, define text, background and border color.
149 | 
150 | $btn-font-weight:                normal !default;
151 | 
152 | $btn-default-color:              #333 !default;
153 | $btn-default-bg:                 #fff !default;
154 | $btn-default-border:             #ccc !default;
155 | 
156 | $btn-primary-color:              #fff !default;
157 | $btn-primary-bg:                 $brand-primary !default;
158 | $btn-primary-border:             darken($btn-primary-bg, 5%) !default;
159 | 
160 | $btn-success-color:              #fff !default;
161 | $btn-success-bg:                 $brand-success !default;
162 | $btn-success-border:             darken($btn-success-bg, 5%) !default;
163 | 
164 | $btn-info-color:                 #fff !default;
165 | $btn-info-bg:                    $brand-info !default;
166 | $btn-info-border:                darken($btn-info-bg, 5%) !default;
167 | 
168 | $btn-warning-color:              #fff !default;
169 | $btn-warning-bg:                 $brand-warning !default;
170 | $btn-warning-border:             darken($btn-warning-bg, 5%) !default;
171 | 
172 | $btn-danger-color:               #fff !default;
173 | $btn-danger-bg:                  $brand-danger !default;
174 | $btn-danger-border:              darken($btn-danger-bg, 5%) !default;
175 | 
176 | $btn-link-disabled-color:        $gray-light !default;
177 | 
178 | // Allows for customizing button radius independently from global border radius
179 | $btn-border-radius-base:         $border-radius-base !default;
180 | $btn-border-radius-large:        $border-radius-large !default;
181 | $btn-border-radius-small:        $border-radius-small !default;
182 | 
183 | 
184 | //== Forms
185 | //
186 | //##
187 | 
188 | //** `` background color
189 | $input-bg:                       #fff !default;
190 | //** `` background color
191 | $input-bg-disabled:              $gray-lighter !default;
192 | 
193 | //** Text color for ``s
194 | $input-color:                    $gray !default;
195 | //** `` border color
196 | $input-border:                   #ccc !default;
197 | 
198 | // TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
199 | //** Default `.form-control` border radius
200 | // This has no effect on ``s in CSS.
201 | $input-border-radius:            $border-radius-base !default;
202 | //** Large `.form-control` border radius
203 | $input-border-radius-large:      $border-radius-large !default;
204 | //** Small `.form-control` border radius
205 | $input-border-radius-small:      $border-radius-small !default;
206 | 
207 | //** Border color for inputs on focus
208 | $input-border-focus:             #66afe9 !default;
209 | 
210 | //** Placeholder text color
211 | $input-color-placeholder:        #999 !default;
212 | 
213 | //** Default `.form-control` height
214 | $input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
215 | //** Large `.form-control` height
216 | $input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
217 | //** Small `.form-control` height
218 | $input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
219 | 
220 | //** `.form-group` margin
221 | $form-group-margin-bottom:       15px !default;
222 | 
223 | $legend-color:                   $gray-dark !default;
224 | $legend-border-color:            #e5e5e5 !default;
225 | 
226 | //** Background color for textual input addons
227 | $input-group-addon-bg:           $gray-lighter !default;
228 | //** Border color for textual input addons
229 | $input-group-addon-border-color: $input-border !default;
230 | 
231 | //** Disabled cursor for form controls and buttons.
232 | $cursor-disabled:                not-allowed !default;
233 | 
234 | 
235 | //== Dropdowns
236 | //
237 | //## Dropdown menu container and contents.
238 | 
239 | //** Background for the dropdown menu.
240 | $dropdown-bg:                    #fff !default;
241 | //** Dropdown menu `border-color`.
242 | $dropdown-border:                rgba(0,0,0,.15) !default;
243 | //** Dropdown menu `border-color` **for IE8**.
244 | $dropdown-fallback-border:       #ccc !default;
245 | //** Divider color for between dropdown items.
246 | $dropdown-divider-bg:            #e5e5e5 !default;
247 | 
248 | //** Dropdown link text color.
249 | $dropdown-link-color:            $gray-dark !default;
250 | //** Hover color for dropdown links.
251 | $dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
252 | //** Hover background for dropdown links.
253 | $dropdown-link-hover-bg:         #f5f5f5 !default;
254 | 
255 | //** Active dropdown menu item text color.
256 | $dropdown-link-active-color:     $component-active-color !default;
257 | //** Active dropdown menu item background color.
258 | $dropdown-link-active-bg:        $component-active-bg !default;
259 | 
260 | //** Disabled dropdown menu item background color.
261 | $dropdown-link-disabled-color:   $gray-light !default;
262 | 
263 | //** Text color for headers within dropdown menus.
264 | $dropdown-header-color:          $gray-light !default;
265 | 
266 | //** Deprecated `$dropdown-caret-color` as of v3.1.0
267 | $dropdown-caret-color:           #000 !default;
268 | 
269 | 
270 | //-- Z-index master list
271 | //
272 | // Warning: Avoid customizing these values. They're used for a bird's eye view
273 | // of components dependent on the z-axis and are designed to all work together.
274 | //
275 | // Note: These variables are not generated into the Customizer.
276 | 
277 | $zindex-navbar:            1000 !default;
278 | $zindex-dropdown:          1000 !default;
279 | $zindex-popover:           1060 !default;
280 | $zindex-tooltip:           1070 !default;
281 | $zindex-navbar-fixed:      1030 !default;
282 | $zindex-modal-background:  1040 !default;
283 | $zindex-modal:             1050 !default;
284 | 
285 | 
286 | //== Media queries breakpoints
287 | //
288 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes.
289 | 
290 | // Extra small screen / phone
291 | //** Deprecated `$screen-xs` as of v3.0.1
292 | $screen-xs:                  480px !default;
293 | //** Deprecated `$screen-xs-min` as of v3.2.0
294 | $screen-xs-min:              $screen-xs !default;
295 | //** Deprecated `$screen-phone` as of v3.0.1
296 | $screen-phone:               $screen-xs-min !default;
297 | 
298 | // Small screen / tablet
299 | //** Deprecated `$screen-sm` as of v3.0.1
300 | $screen-sm:                  768px !default;
301 | $screen-sm-min:              $screen-sm !default;
302 | //** Deprecated `$screen-tablet` as of v3.0.1
303 | $screen-tablet:              $screen-sm-min !default;
304 | 
305 | // Medium screen / desktop
306 | //** Deprecated `$screen-md` as of v3.0.1
307 | $screen-md:                  992px !default;
308 | $screen-md-min:              $screen-md !default;
309 | //** Deprecated `$screen-desktop` as of v3.0.1
310 | $screen-desktop:             $screen-md-min !default;
311 | 
312 | // Large screen / wide desktop
313 | //** Deprecated `$screen-lg` as of v3.0.1
314 | $screen-lg:                  1200px !default;
315 | $screen-lg-min:              $screen-lg !default;
316 | //** Deprecated `$screen-lg-desktop` as of v3.0.1
317 | $screen-lg-desktop:          $screen-lg-min !default;
318 | 
319 | // So media queries don't overlap when required, provide a maximum
320 | $screen-xs-max:              ($screen-sm-min - 1) !default;
321 | $screen-sm-max:              ($screen-md-min - 1) !default;
322 | $screen-md-max:              ($screen-lg-min - 1) !default;
323 | 
324 | 
325 | //== Grid system
326 | //
327 | //## Define your custom responsive grid.
328 | 
329 | //** Number of columns in the grid.
330 | $grid-columns:              12 !default;
331 | //** Padding between columns. Gets divided in half for the left and right.
332 | $grid-gutter-width:         30px !default;
333 | // Navbar collapse
334 | //** Point at which the navbar becomes uncollapsed.
335 | $grid-float-breakpoint:     0 !default;
336 | //** Point at which the navbar begins collapsing.
337 | $grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
338 | 
339 | 
340 | //== Container sizes
341 | //
342 | //## Define the maximum width of `.container` for different screen sizes.
343 | 
344 | // Small screen / tablet
345 | $container-tablet:             (720px + $grid-gutter-width) !default;
346 | //** For `$screen-sm-min` and up.
347 | $container-sm:                 $container-tablet !default;
348 | 
349 | // Medium screen / desktop
350 | $container-desktop:            (940px + $grid-gutter-width) !default;
351 | //** For `$screen-md-min` and up.
352 | $container-md:                 $container-desktop !default;
353 | 
354 | // Large screen / wide desktop
355 | $container-large-desktop:      (1140px + $grid-gutter-width) !default;
356 | //** For `$screen-lg-min` and up.
357 | $container-lg:                 $container-large-desktop !default;
358 | 
359 | 
360 | //== Navbar
361 | //
362 | //##
363 | 
364 | // Basics of a navbar
365 | $navbar-height:                    50px !default;
366 | $navbar-margin-bottom:             $line-height-computed !default;
367 | $navbar-border-radius:             $border-radius-base !default;
368 | $navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
369 | $navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
370 | $navbar-collapse-max-height:       340px !default;
371 | 
372 | $navbar-default-color:             #777 !default;
373 | $navbar-default-bg:                #f8f8f8 !default;
374 | $navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
375 | 
376 | // Navbar links
377 | $navbar-default-link-color:                #777 !default;
378 | $navbar-default-link-hover-color:          #333 !default;
379 | $navbar-default-link-hover-bg:             transparent !default;
380 | $navbar-default-link-active-color:         #555 !default;
381 | $navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
382 | $navbar-default-link-disabled-color:       #ccc !default;
383 | $navbar-default-link-disabled-bg:          transparent !default;
384 | 
385 | // Navbar brand label
386 | $navbar-default-brand-color:               $navbar-default-link-color !default;
387 | $navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
388 | $navbar-default-brand-hover-bg:            transparent !default;
389 | 
390 | // Navbar toggle
391 | $navbar-default-toggle-hover-bg:           #ddd !default;
392 | $navbar-default-toggle-icon-bar-bg:        #888 !default;
393 | $navbar-default-toggle-border-color:       #ddd !default;
394 | 
395 | 
396 | //=== Inverted navbar
397 | // Reset inverted navbar basics
398 | $navbar-inverse-color:                      lighten($gray-light, 15%) !default;
399 | $navbar-inverse-bg:                         #222 !default;
400 | $navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
401 | 
402 | // Inverted navbar links
403 | $navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
404 | $navbar-inverse-link-hover-color:           #fff !default;
405 | $navbar-inverse-link-hover-bg:              transparent !default;
406 | $navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
407 | $navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
408 | $navbar-inverse-link-disabled-color:        #444 !default;
409 | $navbar-inverse-link-disabled-bg:           transparent !default;
410 | 
411 | // Inverted navbar brand label
412 | $navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
413 | $navbar-inverse-brand-hover-color:          #fff !default;
414 | $navbar-inverse-brand-hover-bg:             transparent !default;
415 | 
416 | // Inverted navbar toggle
417 | $navbar-inverse-toggle-hover-bg:            #333 !default;
418 | $navbar-inverse-toggle-icon-bar-bg:         #fff !default;
419 | $navbar-inverse-toggle-border-color:        #333 !default;
420 | 
421 | 
422 | //== Navs
423 | //
424 | //##
425 | 
426 | //=== Shared nav styles
427 | $nav-link-padding:                          10px 15px !default;
428 | $nav-link-hover-bg:                         $gray-lighter !default;
429 | 
430 | $nav-disabled-link-color:                   $gray-light !default;
431 | $nav-disabled-link-hover-color:             $gray-light !default;
432 | 
433 | //== Tabs
434 | $nav-tabs-border-color:                     #ddd !default;
435 | 
436 | $nav-tabs-link-hover-border-color:          $gray-lighter !default;
437 | 
438 | $nav-tabs-active-link-hover-bg:             $body-bg !default;
439 | $nav-tabs-active-link-hover-color:          $gray !default;
440 | $nav-tabs-active-link-hover-border-color:   #ddd !default;
441 | 
442 | $nav-tabs-justified-link-border-color:            #ddd !default;
443 | $nav-tabs-justified-active-link-border-color:     $body-bg !default;
444 | 
445 | //== Pills
446 | $nav-pills-border-radius:                   $border-radius-base !default;
447 | $nav-pills-active-link-hover-bg:            $component-active-bg !default;
448 | $nav-pills-active-link-hover-color:         $component-active-color !default;
449 | 
450 | 
451 | //== Pagination
452 | //
453 | //##
454 | 
455 | $pagination-color:                     $link-color !default;
456 | $pagination-bg:                        #fff !default;
457 | $pagination-border:                    #ddd !default;
458 | 
459 | $pagination-hover-color:               $link-hover-color !default;
460 | $pagination-hover-bg:                  $gray-lighter !default;
461 | $pagination-hover-border:              #ddd !default;
462 | 
463 | $pagination-active-color:              #fff !default;
464 | $pagination-active-bg:                 $brand-primary !default;
465 | $pagination-active-border:             $brand-primary !default;
466 | 
467 | $pagination-disabled-color:            $gray-light !default;
468 | $pagination-disabled-bg:               #fff !default;
469 | $pagination-disabled-border:           #ddd !default;
470 | 
471 | 
472 | //== Pager
473 | //
474 | //##
475 | 
476 | $pager-bg:                             $pagination-bg !default;
477 | $pager-border:                         $pagination-border !default;
478 | $pager-border-radius:                  15px !default;
479 | 
480 | $pager-hover-bg:                       $pagination-hover-bg !default;
481 | 
482 | $pager-active-bg:                      $pagination-active-bg !default;
483 | $pager-active-color:                   $pagination-active-color !default;
484 | 
485 | $pager-disabled-color:                 $pagination-disabled-color !default;
486 | 
487 | 
488 | //== Jumbotron
489 | //
490 | //##
491 | 
492 | $jumbotron-padding:              30px !default;
493 | $jumbotron-color:                inherit !default;
494 | $jumbotron-bg:                   $gray-lighter !default;
495 | $jumbotron-heading-color:        inherit !default;
496 | $jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
497 | $jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
498 | 
499 | 
500 | //== Form states and alerts
501 | //
502 | //## Define colors for form feedback states and, by default, alerts.
503 | 
504 | $state-success-text:             #3c763d !default;
505 | $state-success-bg:               #dff0d8 !default;
506 | $state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;
507 | 
508 | $state-info-text:                #31708f !default;
509 | $state-info-bg:                  #d9edf7 !default;
510 | $state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;
511 | 
512 | $state-warning-text:             #8a6d3b !default;
513 | $state-warning-bg:               #fcf8e3 !default;
514 | $state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%) !default;
515 | 
516 | $state-danger-text:              #a94442 !default;
517 | $state-danger-bg:                #f2dede !default;
518 | $state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%) !default;
519 | 
520 | 
521 | //== Tooltips
522 | //
523 | //##
524 | 
525 | //** Tooltip max width
526 | $tooltip-max-width:           200px !default;
527 | //** Tooltip text color
528 | $tooltip-color:               #fff !default;
529 | //** Tooltip background color
530 | $tooltip-bg:                  #000 !default;
531 | $tooltip-opacity:             .9 !default;
532 | 
533 | //** Tooltip arrow width
534 | $tooltip-arrow-width:         5px !default;
535 | //** Tooltip arrow color
536 | $tooltip-arrow-color:         $tooltip-bg !default;
537 | 
538 | 
539 | //== Popovers
540 | //
541 | //##
542 | 
543 | //** Popover body background color
544 | $popover-bg:                          #fff !default;
545 | //** Popover maximum width
546 | $popover-max-width:                   276px !default;
547 | //** Popover border color
548 | $popover-border-color:                rgba(0,0,0,.2) !default;
549 | //** Popover fallback border color
550 | $popover-fallback-border-color:       #ccc !default;
551 | 
552 | //** Popover title background color
553 | $popover-title-bg:                    darken($popover-bg, 3%) !default;
554 | 
555 | //** Popover arrow width
556 | $popover-arrow-width:                 10px !default;
557 | //** Popover arrow color
558 | $popover-arrow-color:                 $popover-bg !default;
559 | 
560 | //** Popover outer arrow width
561 | $popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
562 | //** Popover outer arrow color
563 | $popover-arrow-outer-color:           fade_in($popover-border-color, 0.05) !default;
564 | //** Popover outer arrow fallback color
565 | $popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
566 | 
567 | 
568 | //== Labels
569 | //
570 | //##
571 | 
572 | //** Default label background color
573 | $label-default-bg:            $gray-light !default;
574 | //** Primary label background color
575 | $label-primary-bg:            $brand-primary !default;
576 | //** Success label background color
577 | $label-success-bg:            $brand-success !default;
578 | //** Info label background color
579 | $label-info-bg:               $brand-info !default;
580 | //** Warning label background color
581 | $label-warning-bg:            $brand-warning !default;
582 | //** Danger label background color
583 | $label-danger-bg:             $brand-danger !default;
584 | 
585 | //** Default label text color
586 | $label-color:                 #fff !default;
587 | //** Default text color of a linked label
588 | $label-link-hover-color:      #fff !default;
589 | 
590 | 
591 | //== Modals
592 | //
593 | //##
594 | 
595 | //** Padding applied to the modal body
596 | $modal-inner-padding:         15px !default;
597 | 
598 | //** Padding applied to the modal title
599 | $modal-title-padding:         15px !default;
600 | //** Modal title line-height
601 | $modal-title-line-height:     $line-height-base !default;
602 | 
603 | //** Background color of modal content area
604 | $modal-content-bg:                             #fff !default;
605 | //** Modal content border color
606 | $modal-content-border-color:                   rgba(0,0,0,.2) !default;
607 | //** Modal content border color **for IE8**
608 | $modal-content-fallback-border-color:          #999 !default;
609 | 
610 | //** Modal backdrop background color
611 | $modal-backdrop-bg:           #000 !default;
612 | //** Modal backdrop opacity
613 | $modal-backdrop-opacity:      .5 !default;
614 | //** Modal header border color
615 | $modal-header-border-color:   #e5e5e5 !default;
616 | //** Modal footer border color
617 | $modal-footer-border-color:   $modal-header-border-color !default;
618 | 
619 | $modal-lg:                    900px !default;
620 | $modal-md:                    600px !default;
621 | $modal-sm:                    300px !default;
622 | 
623 | 
624 | //== Alerts
625 | //
626 | //## Define alert colors, border radius, and padding.
627 | 
628 | $alert-padding:               15px !default;
629 | $alert-border-radius:         $border-radius-base !default;
630 | $alert-link-font-weight:      bold !default;
631 | 
632 | $alert-success-bg:            $state-success-bg !default;
633 | $alert-success-text:          $state-success-text !default;
634 | $alert-success-border:        $state-success-border !default;
635 | 
636 | $alert-info-bg:               $state-info-bg !default;
637 | $alert-info-text:             $state-info-text !default;
638 | $alert-info-border:           $state-info-border !default;
639 | 
640 | $alert-warning-bg:            $state-warning-bg !default;
641 | $alert-warning-text:          $state-warning-text !default;
642 | $alert-warning-border:        $state-warning-border !default;
643 | 
644 | $alert-danger-bg:             $state-danger-bg !default;
645 | $alert-danger-text:           $state-danger-text !default;
646 | $alert-danger-border:         $state-danger-border !default;
647 | 
648 | 
649 | //== Progress bars
650 | //
651 | //##
652 | 
653 | //** Background color of the whole progress component
654 | $progress-bg:                 #f5f5f5 !default;
655 | //** Progress bar text color
656 | $progress-bar-color:          #fff !default;
657 | //** Variable for setting rounded corners on progress bar.
658 | $progress-border-radius:      $border-radius-base !default;
659 | 
660 | //** Default progress bar color
661 | $progress-bar-bg:             $brand-primary !default;
662 | //** Success progress bar color
663 | $progress-bar-success-bg:     $brand-success !default;
664 | //** Warning progress bar color
665 | $progress-bar-warning-bg:     $brand-warning !default;
666 | //** Danger progress bar color
667 | $progress-bar-danger-bg:      $brand-danger !default;
668 | //** Info progress bar color
669 | $progress-bar-info-bg:        $brand-info !default;
670 | 
671 | 
672 | //== List group
673 | //
674 | //##
675 | 
676 | //** Background color on `.list-group-item`
677 | $list-group-bg:                 #fff !default;
678 | //** `.list-group-item` border color
679 | $list-group-border:             #ddd !default;
680 | //** List group border radius
681 | $list-group-border-radius:      $border-radius-base !default;
682 | 
683 | //** Background color of single list items on hover
684 | $list-group-hover-bg:           #f5f5f5 !default;
685 | //** Text color of active list items
686 | $list-group-active-color:       $component-active-color !default;
687 | //** Background color of active list items
688 | $list-group-active-bg:          $component-active-bg !default;
689 | //** Border color of active list elements
690 | $list-group-active-border:      $list-group-active-bg !default;
691 | //** Text color for content within active list items
692 | $list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
693 | 
694 | //** Text color of disabled list items
695 | $list-group-disabled-color:      $gray-light !default;
696 | //** Background color of disabled list items
697 | $list-group-disabled-bg:         $gray-lighter !default;
698 | //** Text color for content within disabled list items
699 | $list-group-disabled-text-color: $list-group-disabled-color !default;
700 | 
701 | $list-group-link-color:         #555 !default;
702 | $list-group-link-hover-color:   $list-group-link-color !default;
703 | $list-group-link-heading-color: #333 !default;
704 | 
705 | 
706 | //== Panels
707 | //
708 | //##
709 | 
710 | $panel-bg:                    #fff !default;
711 | $panel-body-padding:          15px !default;
712 | $panel-heading-padding:       10px 15px !default;
713 | $panel-footer-padding:        $panel-heading-padding !default;
714 | $panel-border-radius:         $border-radius-base !default;
715 | 
716 | //** Border color for elements within panels
717 | $panel-inner-border:          #ddd !default;
718 | $panel-footer-bg:             #f5f5f5 !default;
719 | 
720 | $panel-default-text:          $gray-dark !default;
721 | $panel-default-border:        #ddd !default;
722 | $panel-default-heading-bg:    #f5f5f5 !default;
723 | 
724 | $panel-primary-text:          #fff !default;
725 | $panel-primary-border:        $brand-primary !default;
726 | $panel-primary-heading-bg:    $brand-primary !default;
727 | 
728 | $panel-success-text:          $state-success-text !default;
729 | $panel-success-border:        $state-success-border !default;
730 | $panel-success-heading-bg:    $state-success-bg !default;
731 | 
732 | $panel-info-text:             $state-info-text !default;
733 | $panel-info-border:           $state-info-border !default;
734 | $panel-info-heading-bg:       $state-info-bg !default;
735 | 
736 | $panel-warning-text:          $state-warning-text !default;
737 | $panel-warning-border:        $state-warning-border !default;
738 | $panel-warning-heading-bg:    $state-warning-bg !default;
739 | 
740 | $panel-danger-text:           $state-danger-text !default;
741 | $panel-danger-border:         $state-danger-border !default;
742 | $panel-danger-heading-bg:     $state-danger-bg !default;
743 | 
744 | 
745 | //== Thumbnails
746 | //
747 | //##
748 | 
749 | //** Padding around the thumbnail image
750 | $thumbnail-padding:           4px !default;
751 | //** Thumbnail background color
752 | $thumbnail-bg:                $body-bg !default;
753 | //** Thumbnail border color
754 | $thumbnail-border:            #ddd !default;
755 | //** Thumbnail border radius
756 | $thumbnail-border-radius:     $border-radius-base !default;
757 | 
758 | //** Custom text color for thumbnail captions
759 | $thumbnail-caption-color:     $text-color !default;
760 | //** Padding around the thumbnail caption
761 | $thumbnail-caption-padding:   9px !default;
762 | 
763 | 
764 | //== Wells
765 | //
766 | //##
767 | 
768 | $well-bg:                     #f5f5f5 !default;
769 | $well-border:                 darken($well-bg, 7%) !default;
770 | 
771 | 
772 | //== Badges
773 | //
774 | //##
775 | 
776 | $badge-color:                 #fff !default;
777 | //** Linked badge text color on hover
778 | $badge-link-hover-color:      #fff !default;
779 | $badge-bg:                    $gray-light !default;
780 | 
781 | //** Badge text color in active nav link
782 | $badge-active-color:          $link-color !default;
783 | //** Badge background color in active nav link
784 | $badge-active-bg:             #fff !default;
785 | 
786 | $badge-font-weight:           bold !default;
787 | $badge-line-height:           1 !default;
788 | $badge-border-radius:         10px !default;
789 | 
790 | 
791 | //== Breadcrumbs
792 | //
793 | //##
794 | 
795 | $breadcrumb-padding-vertical:   8px !default;
796 | $breadcrumb-padding-horizontal: 15px !default;
797 | //** Breadcrumb background color
798 | $breadcrumb-bg:                 #f5f5f5 !default;
799 | //** Breadcrumb text color
800 | $breadcrumb-color:              #ccc !default;
801 | //** Text color of current page in the breadcrumb
802 | $breadcrumb-active-color:       $gray-light !default;
803 | //** Textual separator for between breadcrumb elements
804 | $breadcrumb-separator:          "/" !default;
805 | 
806 | 
807 | //== Carousel
808 | //
809 | //##
810 | 
811 | $carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
812 | 
813 | $carousel-control-color:                      #fff !default;
814 | $carousel-control-width:                      15% !default;
815 | $carousel-control-opacity:                    .5 !default;
816 | $carousel-control-font-size:                  20px !default;
817 | 
818 | $carousel-indicator-active-bg:                #fff !default;
819 | $carousel-indicator-border-color:             #fff !default;
820 | 
821 | $carousel-caption-color:                      #fff !default;
822 | 
823 | 
824 | //== Close
825 | //
826 | //##
827 | 
828 | $close-font-weight:           bold !default;
829 | $close-color:                 #000 !default;
830 | $close-text-shadow:           0 1px 0 #fff !default;
831 | 
832 | 
833 | //== Code
834 | //
835 | //##
836 | 
837 | $code-color:                  #c7254e !default;
838 | $code-bg:                     #f9f2f4 !default;
839 | 
840 | $kbd-color:                   #fff !default;
841 | $kbd-bg:                      #333 !default;
842 | 
843 | $pre-bg:                      #f5f5f5 !default;
844 | $pre-color:                   $gray-dark !default;
845 | $pre-border-color:            #ccc !default;
846 | $pre-scrollable-max-height:   340px !default;
847 | 
848 | 
849 | //== Type
850 | //
851 | //##
852 | 
853 | //** Horizontal offset for forms and lists.
854 | $component-offset-horizontal: 180px !default;
855 | //** Text muted color
856 | $text-muted:                  $gray-light !default;
857 | //** Abbreviations and acronyms border color
858 | $abbr-border-color:           $gray-light !default;
859 | //** Headings small color
860 | $headings-small-color:        $gray-light !default;
861 | //** Blockquote small color
862 | $blockquote-small-color:      $gray-light !default;
863 | //** Blockquote font size
864 | $blockquote-font-size:        ($font-size-base * 1.25) !default;
865 | //** Blockquote border color
866 | $blockquote-border-color:     $gray-lighter !default;
867 | //** Page header border color
868 | $page-header-border-color:    $gray-lighter !default;
869 | //** Width of horizontal description list titles
870 | $dl-horizontal-offset:        $component-offset-horizontal !default;
871 | //** Horizontal line color.
872 | $hr-border:                   $gray-lighter !default;
873 | 


--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
   1 | {
   2 |     "_readme": [
   3 |         "This file locks the dependencies of your project to a known state",
   4 |         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
   5 |         "This file is @generated automatically"
   6 |     ],
   7 |     "hash": "628102f31f5280a111013df010655712",
   8 |     "content-hash": "3e382c11350afa173a7ee072034579bd",
   9 |     "packages": [],
  10 |     "packages-dev": [
  11 |         {
  12 |             "name": "doctrine/instantiator",
  13 |             "version": "1.0.5",
  14 |             "source": {
  15 |                 "type": "git",
  16 |                 "url": "https://github.com/doctrine/instantiator.git",
  17 |                 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
  18 |             },
  19 |             "dist": {
  20 |                 "type": "zip",
  21 |                 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
  22 |                 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
  23 |                 "shasum": ""
  24 |             },
  25 |             "require": {
  26 |                 "php": ">=5.3,<8.0-DEV"
  27 |             },
  28 |             "require-dev": {
  29 |                 "athletic/athletic": "~0.1.8",
  30 |                 "ext-pdo": "*",
  31 |                 "ext-phar": "*",
  32 |                 "phpunit/phpunit": "~4.0",
  33 |                 "squizlabs/php_codesniffer": "~2.0"
  34 |             },
  35 |             "type": "library",
  36 |             "extra": {
  37 |                 "branch-alias": {
  38 |                     "dev-master": "1.0.x-dev"
  39 |                 }
  40 |             },
  41 |             "autoload": {
  42 |                 "psr-4": {
  43 |                     "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
  44 |                 }
  45 |             },
  46 |             "notification-url": "https://packagist.org/downloads/",
  47 |             "license": [
  48 |                 "MIT"
  49 |             ],
  50 |             "authors": [
  51 |                 {
  52 |                     "name": "Marco Pivetta",
  53 |                     "email": "ocramius@gmail.com",
  54 |                     "homepage": "http://ocramius.github.com/"
  55 |                 }
  56 |             ],
  57 |             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
  58 |             "homepage": "https://github.com/doctrine/instantiator",
  59 |             "keywords": [
  60 |                 "constructor",
  61 |                 "instantiate"
  62 |             ],
  63 |             "time": "2015-06-14 21:17:01"
  64 |         },
  65 |         {
  66 |             "name": "myclabs/deep-copy",
  67 |             "version": "1.5.1",
  68 |             "source": {
  69 |                 "type": "git",
  70 |                 "url": "https://github.com/myclabs/DeepCopy.git",
  71 |                 "reference": "a8773992b362b58498eed24bf85005f363c34771"
  72 |             },
  73 |             "dist": {
  74 |                 "type": "zip",
  75 |                 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a8773992b362b58498eed24bf85005f363c34771",
  76 |                 "reference": "a8773992b362b58498eed24bf85005f363c34771",
  77 |                 "shasum": ""
  78 |             },
  79 |             "require": {
  80 |                 "php": ">=5.4.0"
  81 |             },
  82 |             "require-dev": {
  83 |                 "doctrine/collections": "1.*",
  84 |                 "phpunit/phpunit": "~4.1"
  85 |             },
  86 |             "type": "library",
  87 |             "autoload": {
  88 |                 "psr-4": {
  89 |                     "DeepCopy\\": "src/DeepCopy/"
  90 |                 }
  91 |             },
  92 |             "notification-url": "https://packagist.org/downloads/",
  93 |             "license": [
  94 |                 "MIT"
  95 |             ],
  96 |             "description": "Create deep copies (clones) of your objects",
  97 |             "homepage": "https://github.com/myclabs/DeepCopy",
  98 |             "keywords": [
  99 |                 "clone",
 100 |                 "copy",
 101 |                 "duplicate",
 102 |                 "object",
 103 |                 "object graph"
 104 |             ],
 105 |             "time": "2015-11-20 12:04:31"
 106 |         },
 107 |         {
 108 |             "name": "phpdocumentor/reflection-docblock",
 109 |             "version": "2.0.4",
 110 |             "source": {
 111 |                 "type": "git",
 112 |                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
 113 |                 "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
 114 |             },
 115 |             "dist": {
 116 |                 "type": "zip",
 117 |                 "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
 118 |                 "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
 119 |                 "shasum": ""
 120 |             },
 121 |             "require": {
 122 |                 "php": ">=5.3.3"
 123 |             },
 124 |             "require-dev": {
 125 |                 "phpunit/phpunit": "~4.0"
 126 |             },
 127 |             "suggest": {
 128 |                 "dflydev/markdown": "~1.0",
 129 |                 "erusev/parsedown": "~1.0"
 130 |             },
 131 |             "type": "library",
 132 |             "extra": {
 133 |                 "branch-alias": {
 134 |                     "dev-master": "2.0.x-dev"
 135 |                 }
 136 |             },
 137 |             "autoload": {
 138 |                 "psr-0": {
 139 |                     "phpDocumentor": [
 140 |                         "src/"
 141 |                     ]
 142 |                 }
 143 |             },
 144 |             "notification-url": "https://packagist.org/downloads/",
 145 |             "license": [
 146 |                 "MIT"
 147 |             ],
 148 |             "authors": [
 149 |                 {
 150 |                     "name": "Mike van Riel",
 151 |                     "email": "mike.vanriel@naenius.com"
 152 |                 }
 153 |             ],
 154 |             "time": "2015-02-03 12:10:50"
 155 |         },
 156 |         {
 157 |             "name": "phpspec/prophecy",
 158 |             "version": "v1.6.0",
 159 |             "source": {
 160 |                 "type": "git",
 161 |                 "url": "https://github.com/phpspec/prophecy.git",
 162 |                 "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972"
 163 |             },
 164 |             "dist": {
 165 |                 "type": "zip",
 166 |                 "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972",
 167 |                 "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972",
 168 |                 "shasum": ""
 169 |             },
 170 |             "require": {
 171 |                 "doctrine/instantiator": "^1.0.2",
 172 |                 "php": "^5.3|^7.0",
 173 |                 "phpdocumentor/reflection-docblock": "~2.0",
 174 |                 "sebastian/comparator": "~1.1",
 175 |                 "sebastian/recursion-context": "~1.0"
 176 |             },
 177 |             "require-dev": {
 178 |                 "phpspec/phpspec": "~2.0"
 179 |             },
 180 |             "type": "library",
 181 |             "extra": {
 182 |                 "branch-alias": {
 183 |                     "dev-master": "1.5.x-dev"
 184 |                 }
 185 |             },
 186 |             "autoload": {
 187 |                 "psr-0": {
 188 |                     "Prophecy\\": "src/"
 189 |                 }
 190 |             },
 191 |             "notification-url": "https://packagist.org/downloads/",
 192 |             "license": [
 193 |                 "MIT"
 194 |             ],
 195 |             "authors": [
 196 |                 {
 197 |                     "name": "Konstantin Kudryashov",
 198 |                     "email": "ever.zet@gmail.com",
 199 |                     "homepage": "http://everzet.com"
 200 |                 },
 201 |                 {
 202 |                     "name": "Marcello Duarte",
 203 |                     "email": "marcello.duarte@gmail.com"
 204 |                 }
 205 |             ],
 206 |             "description": "Highly opinionated mocking framework for PHP 5.3+",
 207 |             "homepage": "https://github.com/phpspec/prophecy",
 208 |             "keywords": [
 209 |                 "Double",
 210 |                 "Dummy",
 211 |                 "fake",
 212 |                 "mock",
 213 |                 "spy",
 214 |                 "stub"
 215 |             ],
 216 |             "time": "2016-02-15 07:46:21"
 217 |         },
 218 |         {
 219 |             "name": "phpunit/php-code-coverage",
 220 |             "version": "3.3.3",
 221 |             "source": {
 222 |                 "type": "git",
 223 |                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
 224 |                 "reference": "44cd8e3930e431658d1a5de7d282d5cb37837fd5"
 225 |             },
 226 |             "dist": {
 227 |                 "type": "zip",
 228 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/44cd8e3930e431658d1a5de7d282d5cb37837fd5",
 229 |                 "reference": "44cd8e3930e431658d1a5de7d282d5cb37837fd5",
 230 |                 "shasum": ""
 231 |             },
 232 |             "require": {
 233 |                 "php": "^5.6 || ^7.0",
 234 |                 "phpunit/php-file-iterator": "~1.3",
 235 |                 "phpunit/php-text-template": "~1.2",
 236 |                 "phpunit/php-token-stream": "^1.4.2",
 237 |                 "sebastian/code-unit-reverse-lookup": "~1.0",
 238 |                 "sebastian/environment": "^1.3.2",
 239 |                 "sebastian/version": "~1.0|~2.0"
 240 |             },
 241 |             "require-dev": {
 242 |                 "ext-xdebug": ">=2.1.4",
 243 |                 "phpunit/phpunit": "~5"
 244 |             },
 245 |             "suggest": {
 246 |                 "ext-dom": "*",
 247 |                 "ext-xdebug": ">=2.4.0",
 248 |                 "ext-xmlwriter": "*"
 249 |             },
 250 |             "type": "library",
 251 |             "extra": {
 252 |                 "branch-alias": {
 253 |                     "dev-master": "3.3.x-dev"
 254 |                 }
 255 |             },
 256 |             "autoload": {
 257 |                 "classmap": [
 258 |                     "src/"
 259 |                 ]
 260 |             },
 261 |             "notification-url": "https://packagist.org/downloads/",
 262 |             "license": [
 263 |                 "BSD-3-Clause"
 264 |             ],
 265 |             "authors": [
 266 |                 {
 267 |                     "name": "Sebastian Bergmann",
 268 |                     "email": "sb@sebastian-bergmann.de",
 269 |                     "role": "lead"
 270 |                 }
 271 |             ],
 272 |             "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
 273 |             "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
 274 |             "keywords": [
 275 |                 "coverage",
 276 |                 "testing",
 277 |                 "xunit"
 278 |             ],
 279 |             "time": "2016-05-27 16:24:29"
 280 |         },
 281 |         {
 282 |             "name": "phpunit/php-file-iterator",
 283 |             "version": "1.4.1",
 284 |             "source": {
 285 |                 "type": "git",
 286 |                 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
 287 |                 "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
 288 |             },
 289 |             "dist": {
 290 |                 "type": "zip",
 291 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
 292 |                 "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
 293 |                 "shasum": ""
 294 |             },
 295 |             "require": {
 296 |                 "php": ">=5.3.3"
 297 |             },
 298 |             "type": "library",
 299 |             "extra": {
 300 |                 "branch-alias": {
 301 |                     "dev-master": "1.4.x-dev"
 302 |                 }
 303 |             },
 304 |             "autoload": {
 305 |                 "classmap": [
 306 |                     "src/"
 307 |                 ]
 308 |             },
 309 |             "notification-url": "https://packagist.org/downloads/",
 310 |             "license": [
 311 |                 "BSD-3-Clause"
 312 |             ],
 313 |             "authors": [
 314 |                 {
 315 |                     "name": "Sebastian Bergmann",
 316 |                     "email": "sb@sebastian-bergmann.de",
 317 |                     "role": "lead"
 318 |                 }
 319 |             ],
 320 |             "description": "FilterIterator implementation that filters files based on a list of suffixes.",
 321 |             "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
 322 |             "keywords": [
 323 |                 "filesystem",
 324 |                 "iterator"
 325 |             ],
 326 |             "time": "2015-06-21 13:08:43"
 327 |         },
 328 |         {
 329 |             "name": "phpunit/php-text-template",
 330 |             "version": "1.2.1",
 331 |             "source": {
 332 |                 "type": "git",
 333 |                 "url": "https://github.com/sebastianbergmann/php-text-template.git",
 334 |                 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
 335 |             },
 336 |             "dist": {
 337 |                 "type": "zip",
 338 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
 339 |                 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
 340 |                 "shasum": ""
 341 |             },
 342 |             "require": {
 343 |                 "php": ">=5.3.3"
 344 |             },
 345 |             "type": "library",
 346 |             "autoload": {
 347 |                 "classmap": [
 348 |                     "src/"
 349 |                 ]
 350 |             },
 351 |             "notification-url": "https://packagist.org/downloads/",
 352 |             "license": [
 353 |                 "BSD-3-Clause"
 354 |             ],
 355 |             "authors": [
 356 |                 {
 357 |                     "name": "Sebastian Bergmann",
 358 |                     "email": "sebastian@phpunit.de",
 359 |                     "role": "lead"
 360 |                 }
 361 |             ],
 362 |             "description": "Simple template engine.",
 363 |             "homepage": "https://github.com/sebastianbergmann/php-text-template/",
 364 |             "keywords": [
 365 |                 "template"
 366 |             ],
 367 |             "time": "2015-06-21 13:50:34"
 368 |         },
 369 |         {
 370 |             "name": "phpunit/php-timer",
 371 |             "version": "1.0.8",
 372 |             "source": {
 373 |                 "type": "git",
 374 |                 "url": "https://github.com/sebastianbergmann/php-timer.git",
 375 |                 "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
 376 |             },
 377 |             "dist": {
 378 |                 "type": "zip",
 379 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
 380 |                 "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
 381 |                 "shasum": ""
 382 |             },
 383 |             "require": {
 384 |                 "php": ">=5.3.3"
 385 |             },
 386 |             "require-dev": {
 387 |                 "phpunit/phpunit": "~4|~5"
 388 |             },
 389 |             "type": "library",
 390 |             "autoload": {
 391 |                 "classmap": [
 392 |                     "src/"
 393 |                 ]
 394 |             },
 395 |             "notification-url": "https://packagist.org/downloads/",
 396 |             "license": [
 397 |                 "BSD-3-Clause"
 398 |             ],
 399 |             "authors": [
 400 |                 {
 401 |                     "name": "Sebastian Bergmann",
 402 |                     "email": "sb@sebastian-bergmann.de",
 403 |                     "role": "lead"
 404 |                 }
 405 |             ],
 406 |             "description": "Utility class for timing",
 407 |             "homepage": "https://github.com/sebastianbergmann/php-timer/",
 408 |             "keywords": [
 409 |                 "timer"
 410 |             ],
 411 |             "time": "2016-05-12 18:03:57"
 412 |         },
 413 |         {
 414 |             "name": "phpunit/php-token-stream",
 415 |             "version": "1.4.8",
 416 |             "source": {
 417 |                 "type": "git",
 418 |                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
 419 |                 "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
 420 |             },
 421 |             "dist": {
 422 |                 "type": "zip",
 423 |                 "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
 424 |                 "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
 425 |                 "shasum": ""
 426 |             },
 427 |             "require": {
 428 |                 "ext-tokenizer": "*",
 429 |                 "php": ">=5.3.3"
 430 |             },
 431 |             "require-dev": {
 432 |                 "phpunit/phpunit": "~4.2"
 433 |             },
 434 |             "type": "library",
 435 |             "extra": {
 436 |                 "branch-alias": {
 437 |                     "dev-master": "1.4-dev"
 438 |                 }
 439 |             },
 440 |             "autoload": {
 441 |                 "classmap": [
 442 |                     "src/"
 443 |                 ]
 444 |             },
 445 |             "notification-url": "https://packagist.org/downloads/",
 446 |             "license": [
 447 |                 "BSD-3-Clause"
 448 |             ],
 449 |             "authors": [
 450 |                 {
 451 |                     "name": "Sebastian Bergmann",
 452 |                     "email": "sebastian@phpunit.de"
 453 |                 }
 454 |             ],
 455 |             "description": "Wrapper around PHP's tokenizer extension.",
 456 |             "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
 457 |             "keywords": [
 458 |                 "tokenizer"
 459 |             ],
 460 |             "time": "2015-09-15 10:49:45"
 461 |         },
 462 |         {
 463 |             "name": "phpunit/phpunit",
 464 |             "version": "5.3.4",
 465 |             "source": {
 466 |                 "type": "git",
 467 |                 "url": "https://github.com/sebastianbergmann/phpunit.git",
 468 |                 "reference": "00dd95ffb48805503817ced06399017df315fe5c"
 469 |             },
 470 |             "dist": {
 471 |                 "type": "zip",
 472 |                 "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00dd95ffb48805503817ced06399017df315fe5c",
 473 |                 "reference": "00dd95ffb48805503817ced06399017df315fe5c",
 474 |                 "shasum": ""
 475 |             },
 476 |             "require": {
 477 |                 "ext-dom": "*",
 478 |                 "ext-json": "*",
 479 |                 "ext-pcre": "*",
 480 |                 "ext-reflection": "*",
 481 |                 "ext-spl": "*",
 482 |                 "myclabs/deep-copy": "~1.3",
 483 |                 "php": "^5.6 || ^7.0",
 484 |                 "phpspec/prophecy": "^1.3.1",
 485 |                 "phpunit/php-code-coverage": "^3.3.0",
 486 |                 "phpunit/php-file-iterator": "~1.4",
 487 |                 "phpunit/php-text-template": "~1.2",
 488 |                 "phpunit/php-timer": "^1.0.6",
 489 |                 "phpunit/phpunit-mock-objects": "^3.1",
 490 |                 "sebastian/comparator": "~1.1",
 491 |                 "sebastian/diff": "~1.2",
 492 |                 "sebastian/environment": "~1.3",
 493 |                 "sebastian/exporter": "~1.2",
 494 |                 "sebastian/global-state": "~1.0",
 495 |                 "sebastian/object-enumerator": "~1.0",
 496 |                 "sebastian/resource-operations": "~1.0",
 497 |                 "sebastian/version": "~1.0|~2.0",
 498 |                 "symfony/yaml": "~2.1|~3.0"
 499 |             },
 500 |             "suggest": {
 501 |                 "phpunit/php-invoker": "~1.1"
 502 |             },
 503 |             "bin": [
 504 |                 "phpunit"
 505 |             ],
 506 |             "type": "library",
 507 |             "extra": {
 508 |                 "branch-alias": {
 509 |                     "dev-master": "5.3.x-dev"
 510 |                 }
 511 |             },
 512 |             "autoload": {
 513 |                 "classmap": [
 514 |                     "src/"
 515 |                 ]
 516 |             },
 517 |             "notification-url": "https://packagist.org/downloads/",
 518 |             "license": [
 519 |                 "BSD-3-Clause"
 520 |             ],
 521 |             "authors": [
 522 |                 {
 523 |                     "name": "Sebastian Bergmann",
 524 |                     "email": "sebastian@phpunit.de",
 525 |                     "role": "lead"
 526 |                 }
 527 |             ],
 528 |             "description": "The PHP Unit Testing framework.",
 529 |             "homepage": "https://phpunit.de/",
 530 |             "keywords": [
 531 |                 "phpunit",
 532 |                 "testing",
 533 |                 "xunit"
 534 |             ],
 535 |             "time": "2016-05-11 13:28:45"
 536 |         },
 537 |         {
 538 |             "name": "phpunit/phpunit-mock-objects",
 539 |             "version": "3.1.3",
 540 |             "source": {
 541 |                 "type": "git",
 542 |                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
 543 |                 "reference": "151c96874bff6fe61a25039df60e776613a61489"
 544 |             },
 545 |             "dist": {
 546 |                 "type": "zip",
 547 |                 "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/151c96874bff6fe61a25039df60e776613a61489",
 548 |                 "reference": "151c96874bff6fe61a25039df60e776613a61489",
 549 |                 "shasum": ""
 550 |             },
 551 |             "require": {
 552 |                 "doctrine/instantiator": "^1.0.2",
 553 |                 "php": ">=5.6",
 554 |                 "phpunit/php-text-template": "~1.2",
 555 |                 "sebastian/exporter": "~1.2"
 556 |             },
 557 |             "require-dev": {
 558 |                 "phpunit/phpunit": "~5"
 559 |             },
 560 |             "suggest": {
 561 |                 "ext-soap": "*"
 562 |             },
 563 |             "type": "library",
 564 |             "extra": {
 565 |                 "branch-alias": {
 566 |                     "dev-master": "3.1.x-dev"
 567 |                 }
 568 |             },
 569 |             "autoload": {
 570 |                 "classmap": [
 571 |                     "src/"
 572 |                 ]
 573 |             },
 574 |             "notification-url": "https://packagist.org/downloads/",
 575 |             "license": [
 576 |                 "BSD-3-Clause"
 577 |             ],
 578 |             "authors": [
 579 |                 {
 580 |                     "name": "Sebastian Bergmann",
 581 |                     "email": "sb@sebastian-bergmann.de",
 582 |                     "role": "lead"
 583 |                 }
 584 |             ],
 585 |             "description": "Mock Object library for PHPUnit",
 586 |             "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
 587 |             "keywords": [
 588 |                 "mock",
 589 |                 "xunit"
 590 |             ],
 591 |             "time": "2016-04-20 14:39:26"
 592 |         },
 593 |         {
 594 |             "name": "phpunit/phpunit-selenium",
 595 |             "version": "3.0.2",
 596 |             "source": {
 597 |                 "type": "git",
 598 |                 "url": "https://github.com/giorgiosironi/phpunit-selenium.git",
 599 |                 "reference": "d3aa8984c31efcff7c8829b9bd9ad7ab4c94709c"
 600 |             },
 601 |             "dist": {
 602 |                 "type": "zip",
 603 |                 "url": "https://api.github.com/repos/giorgiosironi/phpunit-selenium/zipball/d3aa8984c31efcff7c8829b9bd9ad7ab4c94709c",
 604 |                 "reference": "d3aa8984c31efcff7c8829b9bd9ad7ab4c94709c",
 605 |                 "shasum": ""
 606 |             },
 607 |             "require": {
 608 |                 "ext-curl": "*",
 609 |                 "ext-dom": "*",
 610 |                 "php": ">=5.6",
 611 |                 "phpunit/phpunit": "~5.0",
 612 |                 "sebastian/comparator": "~1.0"
 613 |             },
 614 |             "require-dev": {
 615 |                 "phing/phing": "2.*"
 616 |             },
 617 |             "type": "library",
 618 |             "autoload": {
 619 |                 "classmap": [
 620 |                     "PHPUnit/"
 621 |                 ]
 622 |             },
 623 |             "notification-url": "https://packagist.org/downloads/",
 624 |             "include-path": [
 625 |                 ""
 626 |             ],
 627 |             "license": [
 628 |                 "BSD-3-Clause"
 629 |             ],
 630 |             "authors": [
 631 |                 {
 632 |                     "name": "Giorgio Sironi",
 633 |                     "email": "info@giorgiosironi.com",
 634 |                     "role": "developer"
 635 |                 },
 636 |                 {
 637 |                     "name": "Ivan Kurnosov",
 638 |                     "email": "zerkms@zerkms.com",
 639 |                     "role": "developer"
 640 |                 },
 641 |                 {
 642 |                     "name": "Sebastian Bergmann",
 643 |                     "email": "sb@sebastian-bergmann.de",
 644 |                     "role": "original developer"
 645 |                 }
 646 |             ],
 647 |             "description": "Selenium Server integration for PHPUnit",
 648 |             "homepage": "http://www.phpunit.de/",
 649 |             "keywords": [
 650 |                 "phpunit",
 651 |                 "selenium",
 652 |                 "testing",
 653 |                 "xunit"
 654 |             ],
 655 |             "time": "2016-04-22 10:41:33"
 656 |         },
 657 |         {
 658 |             "name": "sebastian/code-unit-reverse-lookup",
 659 |             "version": "1.0.0",
 660 |             "source": {
 661 |                 "type": "git",
 662 |                 "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
 663 |                 "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe"
 664 |             },
 665 |             "dist": {
 666 |                 "type": "zip",
 667 |                 "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
 668 |                 "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
 669 |                 "shasum": ""
 670 |             },
 671 |             "require": {
 672 |                 "php": ">=5.6"
 673 |             },
 674 |             "require-dev": {
 675 |                 "phpunit/phpunit": "~5"
 676 |             },
 677 |             "type": "library",
 678 |             "extra": {
 679 |                 "branch-alias": {
 680 |                     "dev-master": "1.0.x-dev"
 681 |                 }
 682 |             },
 683 |             "autoload": {
 684 |                 "classmap": [
 685 |                     "src/"
 686 |                 ]
 687 |             },
 688 |             "notification-url": "https://packagist.org/downloads/",
 689 |             "license": [
 690 |                 "BSD-3-Clause"
 691 |             ],
 692 |             "authors": [
 693 |                 {
 694 |                     "name": "Sebastian Bergmann",
 695 |                     "email": "sebastian@phpunit.de"
 696 |                 }
 697 |             ],
 698 |             "description": "Looks up which function or method a line of code belongs to",
 699 |             "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
 700 |             "time": "2016-02-13 06:45:14"
 701 |         },
 702 |         {
 703 |             "name": "sebastian/comparator",
 704 |             "version": "1.2.0",
 705 |             "source": {
 706 |                 "type": "git",
 707 |                 "url": "https://github.com/sebastianbergmann/comparator.git",
 708 |                 "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
 709 |             },
 710 |             "dist": {
 711 |                 "type": "zip",
 712 |                 "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
 713 |                 "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
 714 |                 "shasum": ""
 715 |             },
 716 |             "require": {
 717 |                 "php": ">=5.3.3",
 718 |                 "sebastian/diff": "~1.2",
 719 |                 "sebastian/exporter": "~1.2"
 720 |             },
 721 |             "require-dev": {
 722 |                 "phpunit/phpunit": "~4.4"
 723 |             },
 724 |             "type": "library",
 725 |             "extra": {
 726 |                 "branch-alias": {
 727 |                     "dev-master": "1.2.x-dev"
 728 |                 }
 729 |             },
 730 |             "autoload": {
 731 |                 "classmap": [
 732 |                     "src/"
 733 |                 ]
 734 |             },
 735 |             "notification-url": "https://packagist.org/downloads/",
 736 |             "license": [
 737 |                 "BSD-3-Clause"
 738 |             ],
 739 |             "authors": [
 740 |                 {
 741 |                     "name": "Jeff Welch",
 742 |                     "email": "whatthejeff@gmail.com"
 743 |                 },
 744 |                 {
 745 |                     "name": "Volker Dusch",
 746 |                     "email": "github@wallbash.com"
 747 |                 },
 748 |                 {
 749 |                     "name": "Bernhard Schussek",
 750 |                     "email": "bschussek@2bepublished.at"
 751 |                 },
 752 |                 {
 753 |                     "name": "Sebastian Bergmann",
 754 |                     "email": "sebastian@phpunit.de"
 755 |                 }
 756 |             ],
 757 |             "description": "Provides the functionality to compare PHP values for equality",
 758 |             "homepage": "http://www.github.com/sebastianbergmann/comparator",
 759 |             "keywords": [
 760 |                 "comparator",
 761 |                 "compare",
 762 |                 "equality"
 763 |             ],
 764 |             "time": "2015-07-26 15:48:44"
 765 |         },
 766 |         {
 767 |             "name": "sebastian/diff",
 768 |             "version": "1.4.1",
 769 |             "source": {
 770 |                 "type": "git",
 771 |                 "url": "https://github.com/sebastianbergmann/diff.git",
 772 |                 "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
 773 |             },
 774 |             "dist": {
 775 |                 "type": "zip",
 776 |                 "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
 777 |                 "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
 778 |                 "shasum": ""
 779 |             },
 780 |             "require": {
 781 |                 "php": ">=5.3.3"
 782 |             },
 783 |             "require-dev": {
 784 |                 "phpunit/phpunit": "~4.8"
 785 |             },
 786 |             "type": "library",
 787 |             "extra": {
 788 |                 "branch-alias": {
 789 |                     "dev-master": "1.4-dev"
 790 |                 }
 791 |             },
 792 |             "autoload": {
 793 |                 "classmap": [
 794 |                     "src/"
 795 |                 ]
 796 |             },
 797 |             "notification-url": "https://packagist.org/downloads/",
 798 |             "license": [
 799 |                 "BSD-3-Clause"
 800 |             ],
 801 |             "authors": [
 802 |                 {
 803 |                     "name": "Kore Nordmann",
 804 |                     "email": "mail@kore-nordmann.de"
 805 |                 },
 806 |                 {
 807 |                     "name": "Sebastian Bergmann",
 808 |                     "email": "sebastian@phpunit.de"
 809 |                 }
 810 |             ],
 811 |             "description": "Diff implementation",
 812 |             "homepage": "https://github.com/sebastianbergmann/diff",
 813 |             "keywords": [
 814 |                 "diff"
 815 |             ],
 816 |             "time": "2015-12-08 07:14:41"
 817 |         },
 818 |         {
 819 |             "name": "sebastian/environment",
 820 |             "version": "1.3.7",
 821 |             "source": {
 822 |                 "type": "git",
 823 |                 "url": "https://github.com/sebastianbergmann/environment.git",
 824 |                 "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716"
 825 |             },
 826 |             "dist": {
 827 |                 "type": "zip",
 828 |                 "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716",
 829 |                 "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716",
 830 |                 "shasum": ""
 831 |             },
 832 |             "require": {
 833 |                 "php": ">=5.3.3"
 834 |             },
 835 |             "require-dev": {
 836 |                 "phpunit/phpunit": "~4.4"
 837 |             },
 838 |             "type": "library",
 839 |             "extra": {
 840 |                 "branch-alias": {
 841 |                     "dev-master": "1.3.x-dev"
 842 |                 }
 843 |             },
 844 |             "autoload": {
 845 |                 "classmap": [
 846 |                     "src/"
 847 |                 ]
 848 |             },
 849 |             "notification-url": "https://packagist.org/downloads/",
 850 |             "license": [
 851 |                 "BSD-3-Clause"
 852 |             ],
 853 |             "authors": [
 854 |                 {
 855 |                     "name": "Sebastian Bergmann",
 856 |                     "email": "sebastian@phpunit.de"
 857 |                 }
 858 |             ],
 859 |             "description": "Provides functionality to handle HHVM/PHP environments",
 860 |             "homepage": "http://www.github.com/sebastianbergmann/environment",
 861 |             "keywords": [
 862 |                 "Xdebug",
 863 |                 "environment",
 864 |                 "hhvm"
 865 |             ],
 866 |             "time": "2016-05-17 03:18:57"
 867 |         },
 868 |         {
 869 |             "name": "sebastian/exporter",
 870 |             "version": "1.2.1",
 871 |             "source": {
 872 |                 "type": "git",
 873 |                 "url": "https://github.com/sebastianbergmann/exporter.git",
 874 |                 "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
 875 |             },
 876 |             "dist": {
 877 |                 "type": "zip",
 878 |                 "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
 879 |                 "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
 880 |                 "shasum": ""
 881 |             },
 882 |             "require": {
 883 |                 "php": ">=5.3.3",
 884 |                 "sebastian/recursion-context": "~1.0"
 885 |             },
 886 |             "require-dev": {
 887 |                 "phpunit/phpunit": "~4.4"
 888 |             },
 889 |             "type": "library",
 890 |             "extra": {
 891 |                 "branch-alias": {
 892 |                     "dev-master": "1.2.x-dev"
 893 |                 }
 894 |             },
 895 |             "autoload": {
 896 |                 "classmap": [
 897 |                     "src/"
 898 |                 ]
 899 |             },
 900 |             "notification-url": "https://packagist.org/downloads/",
 901 |             "license": [
 902 |                 "BSD-3-Clause"
 903 |             ],
 904 |             "authors": [
 905 |                 {
 906 |                     "name": "Jeff Welch",
 907 |                     "email": "whatthejeff@gmail.com"
 908 |                 },
 909 |                 {
 910 |                     "name": "Volker Dusch",
 911 |                     "email": "github@wallbash.com"
 912 |                 },
 913 |                 {
 914 |                     "name": "Bernhard Schussek",
 915 |                     "email": "bschussek@2bepublished.at"
 916 |                 },
 917 |                 {
 918 |                     "name": "Sebastian Bergmann",
 919 |                     "email": "sebastian@phpunit.de"
 920 |                 },
 921 |                 {
 922 |                     "name": "Adam Harvey",
 923 |                     "email": "aharvey@php.net"
 924 |                 }
 925 |             ],
 926 |             "description": "Provides the functionality to export PHP variables for visualization",
 927 |             "homepage": "http://www.github.com/sebastianbergmann/exporter",
 928 |             "keywords": [
 929 |                 "export",
 930 |                 "exporter"
 931 |             ],
 932 |             "time": "2015-06-21 07:55:53"
 933 |         },
 934 |         {
 935 |             "name": "sebastian/global-state",
 936 |             "version": "1.1.1",
 937 |             "source": {
 938 |                 "type": "git",
 939 |                 "url": "https://github.com/sebastianbergmann/global-state.git",
 940 |                 "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
 941 |             },
 942 |             "dist": {
 943 |                 "type": "zip",
 944 |                 "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
 945 |                 "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
 946 |                 "shasum": ""
 947 |             },
 948 |             "require": {
 949 |                 "php": ">=5.3.3"
 950 |             },
 951 |             "require-dev": {
 952 |                 "phpunit/phpunit": "~4.2"
 953 |             },
 954 |             "suggest": {
 955 |                 "ext-uopz": "*"
 956 |             },
 957 |             "type": "library",
 958 |             "extra": {
 959 |                 "branch-alias": {
 960 |                     "dev-master": "1.0-dev"
 961 |                 }
 962 |             },
 963 |             "autoload": {
 964 |                 "classmap": [
 965 |                     "src/"
 966 |                 ]
 967 |             },
 968 |             "notification-url": "https://packagist.org/downloads/",
 969 |             "license": [
 970 |                 "BSD-3-Clause"
 971 |             ],
 972 |             "authors": [
 973 |                 {
 974 |                     "name": "Sebastian Bergmann",
 975 |                     "email": "sebastian@phpunit.de"
 976 |                 }
 977 |             ],
 978 |             "description": "Snapshotting of global state",
 979 |             "homepage": "http://www.github.com/sebastianbergmann/global-state",
 980 |             "keywords": [
 981 |                 "global state"
 982 |             ],
 983 |             "time": "2015-10-12 03:26:01"
 984 |         },
 985 |         {
 986 |             "name": "sebastian/object-enumerator",
 987 |             "version": "1.0.0",
 988 |             "source": {
 989 |                 "type": "git",
 990 |                 "url": "https://github.com/sebastianbergmann/object-enumerator.git",
 991 |                 "reference": "d4ca2fb70344987502567bc50081c03e6192fb26"
 992 |             },
 993 |             "dist": {
 994 |                 "type": "zip",
 995 |                 "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26",
 996 |                 "reference": "d4ca2fb70344987502567bc50081c03e6192fb26",
 997 |                 "shasum": ""
 998 |             },
 999 |             "require": {
1000 |                 "php": ">=5.6",
1001 |                 "sebastian/recursion-context": "~1.0"
1002 |             },
1003 |             "require-dev": {
1004 |                 "phpunit/phpunit": "~5"
1005 |             },
1006 |             "type": "library",
1007 |             "extra": {
1008 |                 "branch-alias": {
1009 |                     "dev-master": "1.0.x-dev"
1010 |                 }
1011 |             },
1012 |             "autoload": {
1013 |                 "classmap": [
1014 |                     "src/"
1015 |                 ]
1016 |             },
1017 |             "notification-url": "https://packagist.org/downloads/",
1018 |             "license": [
1019 |                 "BSD-3-Clause"
1020 |             ],
1021 |             "authors": [
1022 |                 {
1023 |                     "name": "Sebastian Bergmann",
1024 |                     "email": "sebastian@phpunit.de"
1025 |                 }
1026 |             ],
1027 |             "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1028 |             "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1029 |             "time": "2016-01-28 13:25:10"
1030 |         },
1031 |         {
1032 |             "name": "sebastian/recursion-context",
1033 |             "version": "1.0.2",
1034 |             "source": {
1035 |                 "type": "git",
1036 |                 "url": "https://github.com/sebastianbergmann/recursion-context.git",
1037 |                 "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
1038 |             },
1039 |             "dist": {
1040 |                 "type": "zip",
1041 |                 "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
1042 |                 "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
1043 |                 "shasum": ""
1044 |             },
1045 |             "require": {
1046 |                 "php": ">=5.3.3"
1047 |             },
1048 |             "require-dev": {
1049 |                 "phpunit/phpunit": "~4.4"
1050 |             },
1051 |             "type": "library",
1052 |             "extra": {
1053 |                 "branch-alias": {
1054 |                     "dev-master": "1.0.x-dev"
1055 |                 }
1056 |             },
1057 |             "autoload": {
1058 |                 "classmap": [
1059 |                     "src/"
1060 |                 ]
1061 |             },
1062 |             "notification-url": "https://packagist.org/downloads/",
1063 |             "license": [
1064 |                 "BSD-3-Clause"
1065 |             ],
1066 |             "authors": [
1067 |                 {
1068 |                     "name": "Jeff Welch",
1069 |                     "email": "whatthejeff@gmail.com"
1070 |                 },
1071 |                 {
1072 |                     "name": "Sebastian Bergmann",
1073 |                     "email": "sebastian@phpunit.de"
1074 |                 },
1075 |                 {
1076 |                     "name": "Adam Harvey",
1077 |                     "email": "aharvey@php.net"
1078 |                 }
1079 |             ],
1080 |             "description": "Provides functionality to recursively process PHP variables",
1081 |             "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1082 |             "time": "2015-11-11 19:50:13"
1083 |         },
1084 |         {
1085 |             "name": "sebastian/resource-operations",
1086 |             "version": "1.0.0",
1087 |             "source": {
1088 |                 "type": "git",
1089 |                 "url": "https://github.com/sebastianbergmann/resource-operations.git",
1090 |                 "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
1091 |             },
1092 |             "dist": {
1093 |                 "type": "zip",
1094 |                 "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
1095 |                 "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
1096 |                 "shasum": ""
1097 |             },
1098 |             "require": {
1099 |                 "php": ">=5.6.0"
1100 |             },
1101 |             "type": "library",
1102 |             "extra": {
1103 |                 "branch-alias": {
1104 |                     "dev-master": "1.0.x-dev"
1105 |                 }
1106 |             },
1107 |             "autoload": {
1108 |                 "classmap": [
1109 |                     "src/"
1110 |                 ]
1111 |             },
1112 |             "notification-url": "https://packagist.org/downloads/",
1113 |             "license": [
1114 |                 "BSD-3-Clause"
1115 |             ],
1116 |             "authors": [
1117 |                 {
1118 |                     "name": "Sebastian Bergmann",
1119 |                     "email": "sebastian@phpunit.de"
1120 |                 }
1121 |             ],
1122 |             "description": "Provides a list of PHP built-in functions that operate on resources",
1123 |             "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1124 |             "time": "2015-07-28 20:34:47"
1125 |         },
1126 |         {
1127 |             "name": "sebastian/version",
1128 |             "version": "2.0.0",
1129 |             "source": {
1130 |                 "type": "git",
1131 |                 "url": "https://github.com/sebastianbergmann/version.git",
1132 |                 "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5"
1133 |             },
1134 |             "dist": {
1135 |                 "type": "zip",
1136 |                 "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5",
1137 |                 "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5",
1138 |                 "shasum": ""
1139 |             },
1140 |             "require": {
1141 |                 "php": ">=5.6"
1142 |             },
1143 |             "type": "library",
1144 |             "extra": {
1145 |                 "branch-alias": {
1146 |                     "dev-master": "2.0.x-dev"
1147 |                 }
1148 |             },
1149 |             "autoload": {
1150 |                 "classmap": [
1151 |                     "src/"
1152 |                 ]
1153 |             },
1154 |             "notification-url": "https://packagist.org/downloads/",
1155 |             "license": [
1156 |                 "BSD-3-Clause"
1157 |             ],
1158 |             "authors": [
1159 |                 {
1160 |                     "name": "Sebastian Bergmann",
1161 |                     "email": "sebastian@phpunit.de",
1162 |                     "role": "lead"
1163 |                 }
1164 |             ],
1165 |             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1166 |             "homepage": "https://github.com/sebastianbergmann/version",
1167 |             "time": "2016-02-04 12:56:52"
1168 |         },
1169 |         {
1170 |             "name": "squizlabs/php_codesniffer",
1171 |             "version": "2.6.1",
1172 |             "source": {
1173 |                 "type": "git",
1174 |                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
1175 |                 "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d"
1176 |             },
1177 |             "dist": {
1178 |                 "type": "zip",
1179 |                 "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/fb72ed32f8418db5e7770be1653e62e0d6f5dd3d",
1180 |                 "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d",
1181 |                 "shasum": ""
1182 |             },
1183 |             "require": {
1184 |                 "ext-simplexml": "*",
1185 |                 "ext-tokenizer": "*",
1186 |                 "ext-xmlwriter": "*",
1187 |                 "php": ">=5.1.2"
1188 |             },
1189 |             "require-dev": {
1190 |                 "phpunit/phpunit": "~4.0"
1191 |             },
1192 |             "bin": [
1193 |                 "scripts/phpcs",
1194 |                 "scripts/phpcbf"
1195 |             ],
1196 |             "type": "library",
1197 |             "extra": {
1198 |                 "branch-alias": {
1199 |                     "dev-master": "2.x-dev"
1200 |                 }
1201 |             },
1202 |             "autoload": {
1203 |                 "classmap": [
1204 |                     "CodeSniffer.php",
1205 |                     "CodeSniffer/CLI.php",
1206 |                     "CodeSniffer/Exception.php",
1207 |                     "CodeSniffer/File.php",
1208 |                     "CodeSniffer/Fixer.php",
1209 |                     "CodeSniffer/Report.php",
1210 |                     "CodeSniffer/Reporting.php",
1211 |                     "CodeSniffer/Sniff.php",
1212 |                     "CodeSniffer/Tokens.php",
1213 |                     "CodeSniffer/Reports/",
1214 |                     "CodeSniffer/Tokenizers/",
1215 |                     "CodeSniffer/DocGenerators/",
1216 |                     "CodeSniffer/Standards/AbstractPatternSniff.php",
1217 |                     "CodeSniffer/Standards/AbstractScopeSniff.php",
1218 |                     "CodeSniffer/Standards/AbstractVariableSniff.php",
1219 |                     "CodeSniffer/Standards/IncorrectPatternException.php",
1220 |                     "CodeSniffer/Standards/Generic/Sniffs/",
1221 |                     "CodeSniffer/Standards/MySource/Sniffs/",
1222 |                     "CodeSniffer/Standards/PEAR/Sniffs/",
1223 |                     "CodeSniffer/Standards/PSR1/Sniffs/",
1224 |                     "CodeSniffer/Standards/PSR2/Sniffs/",
1225 |                     "CodeSniffer/Standards/Squiz/Sniffs/",
1226 |                     "CodeSniffer/Standards/Zend/Sniffs/"
1227 |                 ]
1228 |             },
1229 |             "notification-url": "https://packagist.org/downloads/",
1230 |             "license": [
1231 |                 "BSD-3-Clause"
1232 |             ],
1233 |             "authors": [
1234 |                 {
1235 |                     "name": "Greg Sherwood",
1236 |                     "role": "lead"
1237 |                 }
1238 |             ],
1239 |             "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
1240 |             "homepage": "http://www.squizlabs.com/php-codesniffer",
1241 |             "keywords": [
1242 |                 "phpcs",
1243 |                 "standards"
1244 |             ],
1245 |             "time": "2016-05-30 22:24:32"
1246 |         },
1247 |         {
1248 |             "name": "symfony/yaml",
1249 |             "version": "v3.1.0",
1250 |             "source": {
1251 |                 "type": "git",
1252 |                 "url": "https://github.com/symfony/yaml.git",
1253 |                 "reference": "eca51b7b65eb9be6af88ad7cc91685f1556f5c9a"
1254 |             },
1255 |             "dist": {
1256 |                 "type": "zip",
1257 |                 "url": "https://api.github.com/repos/symfony/yaml/zipball/eca51b7b65eb9be6af88ad7cc91685f1556f5c9a",
1258 |                 "reference": "eca51b7b65eb9be6af88ad7cc91685f1556f5c9a",
1259 |                 "shasum": ""
1260 |             },
1261 |             "require": {
1262 |                 "php": ">=5.5.9"
1263 |             },
1264 |             "type": "library",
1265 |             "extra": {
1266 |                 "branch-alias": {
1267 |                     "dev-master": "3.1-dev"
1268 |                 }
1269 |             },
1270 |             "autoload": {
1271 |                 "psr-4": {
1272 |                     "Symfony\\Component\\Yaml\\": ""
1273 |                 },
1274 |                 "exclude-from-classmap": [
1275 |                     "/Tests/"
1276 |                 ]
1277 |             },
1278 |             "notification-url": "https://packagist.org/downloads/",
1279 |             "license": [
1280 |                 "MIT"
1281 |             ],
1282 |             "authors": [
1283 |                 {
1284 |                     "name": "Fabien Potencier",
1285 |                     "email": "fabien@symfony.com"
1286 |                 },
1287 |                 {
1288 |                     "name": "Symfony Community",
1289 |                     "homepage": "https://symfony.com/contributors"
1290 |                 }
1291 |             ],
1292 |             "description": "Symfony Yaml Component",
1293 |             "homepage": "https://symfony.com",
1294 |             "time": "2016-05-26 21:46:24"
1295 |         }
1296 |     ],
1297 |     "aliases": [],
1298 |     "minimum-stability": "stable",
1299 |     "stability-flags": [],
1300 |     "prefer-stable": false,
1301 |     "prefer-lowest": false,
1302 |     "platform": [],
1303 |     "platform-dev": []
1304 | }
1305 | 


--------------------------------------------------------------------------------