How to use Not class

Best Mockery code snippet using Not

Fips181Generator.php

Source:Fips181Generator.php Github

copy

Full Screen

1<?php2namespace TweedeGolf\GeneratorBundle\Generator\Password;3use Symfony\Component\Security\Core\Util\SecureRandomInterface;4class Fips181Generator extends AbstractPasswordGenerator5{6 // flags7 const MAX_UNACCEPTABLE = 20;8 // gram rules:9 const NOT_BEGIN_SYLLABLE = 0x08;10 const NO_FINAL_SPLIT = 0x04;11 const VOWEL = 0x02;12 const ALTERNATE_VOWEL = 0x01;13 const NO_SPECIAL_RULE = 0x00;14 // digram rules:15 const BEGIN = 0x80;16 const NOT_BEGIN = 0x40;17 const BREAK_GRAM = 0x40;18 const PREFIX = 0x20;19 const ILLEGAL_PAIR = 0x10;20 const SUFFIX = 0x04;21 const END = 0x02;22 const NOT_END = 0x01;23 const ANY_COMBINATION = 0x00;24 private $grams;25 private $vowelGrams;26 private $gramRules;27 private $digramRules;28 private $separator;29 public function __construct(SecureRandomInterface $rng, $separator = '-')30 {31 parent::__construct($rng);32 $this->setSeparator($separator);33 $this->grams = [34 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',35 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u',36 'v', 'w', 'x', 'y', 'z', 'ch', 'gh', 'ph', 'rh',37 'sh', 'th', 'wh', 'qu', 'ck',38 ];39 $this->vowelGrams = [40 'a', 'e', 'i', 'o', 'u', 'y',41 ];42 $this->generateGramRules();43 $this->generateDigramRules();44 }45 public function generateGramRules()46 {47 // gram rules48 $this->gramRules = [];49 foreach ($this->grams as $gram) {50 $this->gramRules[$gram] = self::NO_SPECIAL_RULE;51 }52 foreach ($this->vowelGrams as $gram) {53 $this->gramRules[$gram] = self::VOWEL;54 }55 $this->gramRules['e'] |= self::NO_FINAL_SPLIT;56 $this->gramRules['y'] |= self::ALTERNATE_VOWEL;57 $this->gramRules['x'] = self::NOT_BEGIN_SYLLABLE;58 $this->gramRules['ck'] = self::NOT_BEGIN_SYLLABLE;59 }60 public function generateDigramRules()61 {62 // digram rules63 $this->digramRules = [];64 $this->digramRules['a'] = [];65 $this->digramRules['a']['a'] = self::ILLEGAL_PAIR;66 $this->digramRules['a']['b'] = self::ANY_COMBINATION;67 $this->digramRules['a']['c'] = self::ANY_COMBINATION;68 $this->digramRules['a']['d'] = self::ANY_COMBINATION;69 $this->digramRules['a']['e'] = self::ILLEGAL_PAIR;70 $this->digramRules['a']['f'] = self::ANY_COMBINATION;71 $this->digramRules['a']['g'] = self::ANY_COMBINATION;72 $this->digramRules['a']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;73 $this->digramRules['a']['i'] = self::ANY_COMBINATION;74 $this->digramRules['a']['j'] = self::ANY_COMBINATION;75 $this->digramRules['a']['k'] = self::ANY_COMBINATION;76 $this->digramRules['a']['l'] = self::ANY_COMBINATION;77 $this->digramRules['a']['m'] = self::ANY_COMBINATION;78 $this->digramRules['a']['n'] = self::ANY_COMBINATION;79 $this->digramRules['a']['o'] = self::ILLEGAL_PAIR;80 $this->digramRules['a']['p'] = self::ANY_COMBINATION;81 $this->digramRules['a']['r'] = self::ANY_COMBINATION;82 $this->digramRules['a']['s'] = self::ANY_COMBINATION;83 $this->digramRules['a']['t'] = self::ANY_COMBINATION;84 $this->digramRules['a']['u'] = self::ANY_COMBINATION;85 $this->digramRules['a']['v'] = self::ANY_COMBINATION;86 $this->digramRules['a']['w'] = self::ANY_COMBINATION;87 $this->digramRules['a']['x'] = self::ANY_COMBINATION;88 $this->digramRules['a']['y'] = self::ANY_COMBINATION;89 $this->digramRules['a']['z'] = self::ANY_COMBINATION;90 $this->digramRules['a']['ch'] = self::ANY_COMBINATION;91 $this->digramRules['a']['gh'] = self::ILLEGAL_PAIR;92 $this->digramRules['a']['ph'] = self::ANY_COMBINATION;93 $this->digramRules['a']['rh'] = self::ILLEGAL_PAIR;94 $this->digramRules['a']['sh'] = self::ANY_COMBINATION;95 $this->digramRules['a']['th'] = self::ANY_COMBINATION;96 $this->digramRules['a']['wh'] = self::ILLEGAL_PAIR;97 $this->digramRules['a']['qu'] = self::BREAK_GRAM | self::NOT_END;98 $this->digramRules['a']['ck'] = self::ANY_COMBINATION;99 $this->digramRules['b'] = [];100 $this->digramRules['b']['a'] = self::ANY_COMBINATION;101 $this->digramRules['b']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;102 $this->digramRules['b']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;103 $this->digramRules['b']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;104 $this->digramRules['b']['e'] = self::ANY_COMBINATION;105 $this->digramRules['b']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;106 $this->digramRules['b']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;107 $this->digramRules['b']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;108 $this->digramRules['b']['i'] = self::ANY_COMBINATION;109 $this->digramRules['b']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;110 $this->digramRules['b']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;111 $this->digramRules['b']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;112 $this->digramRules['b']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;113 $this->digramRules['b']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;114 $this->digramRules['b']['o'] = self::ANY_COMBINATION;115 $this->digramRules['b']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;116 $this->digramRules['b']['r'] = self::BEGIN | self::END;117 $this->digramRules['b']['s'] = self::NOT_BEGIN;118 $this->digramRules['b']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;119 $this->digramRules['b']['u'] = self::ANY_COMBINATION;120 $this->digramRules['b']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;121 $this->digramRules['b']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;122 $this->digramRules['b']['x'] = self::ILLEGAL_PAIR;123 $this->digramRules['b']['y'] = self::ANY_COMBINATION;124 $this->digramRules['b']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;125 $this->digramRules['b']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;126 $this->digramRules['b']['gh'] = self::ILLEGAL_PAIR;127 $this->digramRules['b']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;128 $this->digramRules['b']['rh'] = self::ILLEGAL_PAIR;129 $this->digramRules['b']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;130 $this->digramRules['b']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;131 $this->digramRules['b']['wh'] = self::ILLEGAL_PAIR;132 $this->digramRules['b']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;133 $this->digramRules['b']['ck'] = self::ILLEGAL_PAIR;134 $this->digramRules['c'] = [];135 $this->digramRules['c']['a'] = self::ANY_COMBINATION;136 $this->digramRules['c']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;137 $this->digramRules['c']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;138 $this->digramRules['c']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;139 $this->digramRules['c']['e'] = self::ANY_COMBINATION;140 $this->digramRules['c']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;141 $this->digramRules['c']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;142 $this->digramRules['c']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;143 $this->digramRules['c']['i'] = self::ANY_COMBINATION;144 $this->digramRules['c']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;145 $this->digramRules['c']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;146 $this->digramRules['c']['l'] = self::SUFFIX | self::NOT_END;147 $this->digramRules['c']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;148 $this->digramRules['c']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;149 $this->digramRules['c']['o'] = self::ANY_COMBINATION;150 $this->digramRules['c']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;151 $this->digramRules['c']['r'] = self::NOT_END;152 $this->digramRules['c']['s'] = self::NOT_BEGIN | self::END;153 $this->digramRules['c']['t'] = self::NOT_BEGIN | self::PREFIX;154 $this->digramRules['c']['u'] = self::ANY_COMBINATION;155 $this->digramRules['c']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;156 $this->digramRules['c']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;157 $this->digramRules['c']['x'] = self::ILLEGAL_PAIR;158 $this->digramRules['c']['y'] = self::ANY_COMBINATION;159 $this->digramRules['c']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;160 $this->digramRules['c']['ch'] = self::ILLEGAL_PAIR;161 $this->digramRules['c']['gh'] = self::ILLEGAL_PAIR;162 $this->digramRules['c']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;163 $this->digramRules['c']['rh'] = self::ILLEGAL_PAIR;164 $this->digramRules['c']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;165 $this->digramRules['c']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;166 $this->digramRules['c']['wh'] = self::ILLEGAL_PAIR;167 $this->digramRules['c']['qu'] = self::NOT_BEGIN | self::SUFFIX | self::NOT_END;168 $this->digramRules['c']['ck'] = self::ILLEGAL_PAIR;169 $this->digramRules['d'] = [];170 $this->digramRules['d']['a'] = self::ANY_COMBINATION;171 $this->digramRules['d']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;172 $this->digramRules['d']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;173 $this->digramRules['d']['d'] = self::NOT_BEGIN;174 $this->digramRules['d']['e'] = self::ANY_COMBINATION;175 $this->digramRules['d']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;176 $this->digramRules['d']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;177 $this->digramRules['d']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;178 $this->digramRules['d']['i'] = self::ANY_COMBINATION;179 $this->digramRules['d']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;180 $this->digramRules['d']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;181 $this->digramRules['d']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;182 $this->digramRules['d']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;183 $this->digramRules['d']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;184 $this->digramRules['d']['o'] = self::ANY_COMBINATION;185 $this->digramRules['d']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;186 $this->digramRules['d']['r'] = self::BEGIN | self::NOT_END;187 $this->digramRules['d']['s'] = self::NOT_BEGIN | self::END;188 $this->digramRules['d']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;189 $this->digramRules['d']['u'] = self::ANY_COMBINATION;190 $this->digramRules['d']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;191 $this->digramRules['d']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;192 $this->digramRules['d']['x'] = self::ILLEGAL_PAIR;193 $this->digramRules['d']['y'] = self::ANY_COMBINATION;194 $this->digramRules['d']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;195 $this->digramRules['d']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;196 $this->digramRules['d']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;197 $this->digramRules['d']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;198 $this->digramRules['d']['rh'] = self::ILLEGAL_PAIR;199 $this->digramRules['d']['sh'] = self::NOT_BEGIN | self::NOT_END;200 $this->digramRules['d']['th'] = self::NOT_BEGIN | self::PREFIX;201 $this->digramRules['d']['wh'] = self::ILLEGAL_PAIR;202 $this->digramRules['d']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;203 $this->digramRules['d']['ck'] = self::ILLEGAL_PAIR;204 $this->digramRules['e'] = [];205 $this->digramRules['e']['a'] = self::ANY_COMBINATION;206 $this->digramRules['e']['b'] = self::ANY_COMBINATION;207 $this->digramRules['e']['c'] = self::ANY_COMBINATION;208 $this->digramRules['e']['d'] = self::ANY_COMBINATION;209 $this->digramRules['e']['e'] = self::ANY_COMBINATION;210 $this->digramRules['e']['f'] = self::ANY_COMBINATION;211 $this->digramRules['e']['g'] = self::ANY_COMBINATION;212 $this->digramRules['e']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;213 $this->digramRules['e']['i'] = self::NOT_END;214 $this->digramRules['e']['j'] = self::ANY_COMBINATION;215 $this->digramRules['e']['k'] = self::ANY_COMBINATION;216 $this->digramRules['e']['l'] = self::ANY_COMBINATION;217 $this->digramRules['e']['m'] = self::ANY_COMBINATION;218 $this->digramRules['e']['n'] = self::ANY_COMBINATION;219 $this->digramRules['e']['o'] = self::BREAK_GRAM;220 $this->digramRules['e']['p'] = self::ANY_COMBINATION;221 $this->digramRules['e']['r'] = self::ANY_COMBINATION;222 $this->digramRules['e']['s'] = self::ANY_COMBINATION;223 $this->digramRules['e']['t'] = self::ANY_COMBINATION;224 $this->digramRules['e']['u'] = self::ANY_COMBINATION;225 $this->digramRules['e']['v'] = self::ANY_COMBINATION;226 $this->digramRules['e']['w'] = self::ANY_COMBINATION;227 $this->digramRules['e']['x'] = self::ANY_COMBINATION;228 $this->digramRules['e']['y'] = self::ANY_COMBINATION;229 $this->digramRules['e']['z'] = self::ANY_COMBINATION;230 $this->digramRules['e']['ch'] = self::ANY_COMBINATION;231 $this->digramRules['e']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;232 $this->digramRules['e']['ph'] = self::ANY_COMBINATION;233 $this->digramRules['e']['rh'] = self::ILLEGAL_PAIR;234 $this->digramRules['e']['sh'] = self::ANY_COMBINATION;235 $this->digramRules['e']['th'] = self::ANY_COMBINATION;236 $this->digramRules['e']['wh'] = self::ILLEGAL_PAIR;237 $this->digramRules['e']['qu'] = self::BREAK_GRAM | self::NOT_END;238 $this->digramRules['e']['ck'] = self::ANY_COMBINATION;239 $this->digramRules['f'] = [];240 $this->digramRules['f']['a'] = self::ANY_COMBINATION;241 $this->digramRules['f']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;242 $this->digramRules['f']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;243 $this->digramRules['f']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;244 $this->digramRules['f']['e'] = self::ANY_COMBINATION;245 $this->digramRules['f']['f'] = self::NOT_BEGIN;246 $this->digramRules['f']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;247 $this->digramRules['f']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;248 $this->digramRules['f']['i'] = self::ANY_COMBINATION;249 $this->digramRules['f']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;250 $this->digramRules['f']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;251 $this->digramRules['f']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;252 $this->digramRules['f']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;253 $this->digramRules['f']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;254 $this->digramRules['f']['o'] = self::ANY_COMBINATION;255 $this->digramRules['f']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;256 $this->digramRules['f']['r'] = self::BEGIN | self::NOT_END;257 $this->digramRules['f']['s'] = self::NOT_BEGIN;258 $this->digramRules['f']['t'] = self::NOT_BEGIN;259 $this->digramRules['f']['u'] = self::ANY_COMBINATION;260 $this->digramRules['f']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;261 $this->digramRules['f']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;262 $this->digramRules['f']['x'] = self::ILLEGAL_PAIR;263 $this->digramRules['f']['y'] = self::NOT_BEGIN;264 $this->digramRules['f']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;265 $this->digramRules['f']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;266 $this->digramRules['f']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;267 $this->digramRules['f']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;268 $this->digramRules['f']['rh'] = self::ILLEGAL_PAIR;269 $this->digramRules['f']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;270 $this->digramRules['f']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;271 $this->digramRules['f']['wh'] = self::ILLEGAL_PAIR;272 $this->digramRules['f']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;273 $this->digramRules['f']['ck'] = self::ILLEGAL_PAIR;274 $this->digramRules['g'] = [];275 $this->digramRules['g']['a'] = self::ANY_COMBINATION;276 $this->digramRules['g']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;277 $this->digramRules['g']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;278 $this->digramRules['g']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;279 $this->digramRules['g']['e'] = self::ANY_COMBINATION;280 $this->digramRules['g']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;281 $this->digramRules['g']['g'] = self::NOT_BEGIN;282 $this->digramRules['g']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;283 $this->digramRules['g']['i'] = self::ANY_COMBINATION;284 $this->digramRules['g']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;285 $this->digramRules['g']['k'] = self::ILLEGAL_PAIR;286 $this->digramRules['g']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;287 $this->digramRules['g']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;288 $this->digramRules['g']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;289 $this->digramRules['g']['o'] = self::ANY_COMBINATION;290 $this->digramRules['g']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;291 $this->digramRules['g']['r'] = self::BEGIN | self::NOT_END;292 $this->digramRules['g']['s'] = self::NOT_BEGIN | self::END;293 $this->digramRules['g']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;294 $this->digramRules['g']['u'] = self::ANY_COMBINATION;295 $this->digramRules['g']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;296 $this->digramRules['g']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;297 $this->digramRules['g']['x'] = self::ILLEGAL_PAIR;298 $this->digramRules['g']['y'] = self::NOT_BEGIN;299 $this->digramRules['g']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;300 $this->digramRules['g']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;301 $this->digramRules['g']['gh'] = self::ILLEGAL_PAIR;302 $this->digramRules['g']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;303 $this->digramRules['g']['rh'] = self::ILLEGAL_PAIR;304 $this->digramRules['g']['sh'] = self::NOT_BEGIN;305 $this->digramRules['g']['th'] = self::NOT_BEGIN;306 $this->digramRules['g']['wh'] = self::ILLEGAL_PAIR;307 $this->digramRules['g']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;308 $this->digramRules['g']['ck'] = self::ILLEGAL_PAIR;309 $this->digramRules['h'] = [];310 $this->digramRules['h']['a'] = self::ANY_COMBINATION;311 $this->digramRules['h']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;312 $this->digramRules['h']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;313 $this->digramRules['h']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;314 $this->digramRules['h']['e'] = self::ANY_COMBINATION;315 $this->digramRules['h']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;316 $this->digramRules['h']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;317 $this->digramRules['h']['h'] = self::ILLEGAL_PAIR;318 $this->digramRules['h']['i'] = self::ANY_COMBINATION;319 $this->digramRules['h']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;320 $this->digramRules['h']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;321 $this->digramRules['h']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;322 $this->digramRules['h']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;323 $this->digramRules['h']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;324 $this->digramRules['h']['o'] = self::ANY_COMBINATION;325 $this->digramRules['h']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;326 $this->digramRules['h']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;327 $this->digramRules['h']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;328 $this->digramRules['h']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;329 $this->digramRules['h']['u'] = self::ANY_COMBINATION;330 $this->digramRules['h']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;331 $this->digramRules['h']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;332 $this->digramRules['h']['x'] = self::ILLEGAL_PAIR;333 $this->digramRules['h']['y'] = self::ANY_COMBINATION;334 $this->digramRules['h']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;335 $this->digramRules['h']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;336 $this->digramRules['h']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;337 $this->digramRules['h']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;338 $this->digramRules['h']['rh'] = self::ILLEGAL_PAIR;339 $this->digramRules['h']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;340 $this->digramRules['h']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;341 $this->digramRules['h']['wh'] = self::ILLEGAL_PAIR;342 $this->digramRules['h']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;343 $this->digramRules['h']['ck'] = self::ILLEGAL_PAIR;344 $this->digramRules['i'] = [];345 $this->digramRules['i']['a'] = self::ANY_COMBINATION;346 $this->digramRules['i']['b'] = self::ANY_COMBINATION;347 $this->digramRules['i']['c'] = self::ANY_COMBINATION;348 $this->digramRules['i']['d'] = self::ANY_COMBINATION;349 $this->digramRules['i']['e'] = self::NOT_BEGIN;350 $this->digramRules['i']['f'] = self::ANY_COMBINATION;351 $this->digramRules['i']['g'] = self::ANY_COMBINATION;352 $this->digramRules['i']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;353 $this->digramRules['i']['i'] = self::ILLEGAL_PAIR;354 $this->digramRules['i']['j'] = self::ANY_COMBINATION;355 $this->digramRules['i']['k'] = self::ANY_COMBINATION;356 $this->digramRules['i']['l'] = self::ANY_COMBINATION;357 $this->digramRules['i']['m'] = self::ANY_COMBINATION;358 $this->digramRules['i']['n'] = self::ANY_COMBINATION;359 $this->digramRules['i']['o'] = self::BREAK_GRAM;360 $this->digramRules['i']['p'] = self::ANY_COMBINATION;361 $this->digramRules['i']['r'] = self::ANY_COMBINATION;362 $this->digramRules['i']['s'] = self::ANY_COMBINATION;363 $this->digramRules['i']['t'] = self::ANY_COMBINATION;364 $this->digramRules['i']['u'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;365 $this->digramRules['i']['v'] = self::ANY_COMBINATION;366 $this->digramRules['i']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;367 $this->digramRules['i']['x'] = self::ANY_COMBINATION;368 $this->digramRules['i']['y'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;369 $this->digramRules['i']['z'] = self::ANY_COMBINATION;370 $this->digramRules['i']['ch'] = self::ANY_COMBINATION;371 $this->digramRules['i']['gh'] = self::NOT_BEGIN;372 $this->digramRules['i']['ph'] = self::ANY_COMBINATION;373 $this->digramRules['i']['rh'] = self::ILLEGAL_PAIR;374 $this->digramRules['i']['sh'] = self::ANY_COMBINATION;375 $this->digramRules['i']['th'] = self::ANY_COMBINATION;376 $this->digramRules['i']['wh'] = self::ILLEGAL_PAIR;377 $this->digramRules['i']['qu'] = self::BREAK_GRAM | self::NOT_END;378 $this->digramRules['i']['ck'] = self::ANY_COMBINATION;379 $this->digramRules['j'] = [];380 $this->digramRules['j']['a'] = self::ANY_COMBINATION;381 $this->digramRules['j']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;382 $this->digramRules['j']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;383 $this->digramRules['j']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;384 $this->digramRules['j']['e'] = self::ANY_COMBINATION;385 $this->digramRules['j']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;386 $this->digramRules['j']['g'] = self::ILLEGAL_PAIR;387 $this->digramRules['j']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;388 $this->digramRules['j']['i'] = self::ANY_COMBINATION;389 $this->digramRules['j']['j'] = self::ILLEGAL_PAIR;390 $this->digramRules['j']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;391 $this->digramRules['j']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;392 $this->digramRules['j']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;393 $this->digramRules['j']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;394 $this->digramRules['j']['o'] = self::ANY_COMBINATION;395 $this->digramRules['j']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;396 $this->digramRules['j']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;397 $this->digramRules['j']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;398 $this->digramRules['j']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;399 $this->digramRules['j']['u'] = self::ANY_COMBINATION;400 $this->digramRules['j']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;401 $this->digramRules['j']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;402 $this->digramRules['j']['x'] = self::ILLEGAL_PAIR;403 $this->digramRules['j']['y'] = self::NOT_BEGIN;404 $this->digramRules['j']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;405 $this->digramRules['j']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;406 $this->digramRules['j']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;407 $this->digramRules['j']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;408 $this->digramRules['j']['rh'] = self::ILLEGAL_PAIR;409 $this->digramRules['j']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;410 $this->digramRules['j']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;411 $this->digramRules['j']['wh'] = self::ILLEGAL_PAIR;412 $this->digramRules['j']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;413 $this->digramRules['j']['ck'] = self::ILLEGAL_PAIR;414 $this->digramRules['k'] = [];415 $this->digramRules['k']['a'] = self::ANY_COMBINATION;416 $this->digramRules['k']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;417 $this->digramRules['k']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;418 $this->digramRules['k']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;419 $this->digramRules['k']['e'] = self::ANY_COMBINATION;420 $this->digramRules['k']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;421 $this->digramRules['k']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;422 $this->digramRules['k']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;423 $this->digramRules['k']['i'] = self::ANY_COMBINATION;424 $this->digramRules['k']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;425 $this->digramRules['k']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;426 $this->digramRules['k']['l'] = self::SUFFIX | self::NOT_END;427 $this->digramRules['k']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;428 $this->digramRules['k']['n'] = self::BEGIN | self::SUFFIX | self::NOT_END;429 $this->digramRules['k']['o'] = self::ANY_COMBINATION;430 $this->digramRules['k']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;431 $this->digramRules['k']['r'] = self::SUFFIX | self::NOT_END;432 $this->digramRules['k']['s'] = self::NOT_BEGIN | self::END;433 $this->digramRules['k']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;434 $this->digramRules['k']['u'] = self::ANY_COMBINATION;435 $this->digramRules['k']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;436 $this->digramRules['k']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;437 $this->digramRules['k']['x'] = self::ILLEGAL_PAIR;438 $this->digramRules['k']['y'] = self::NOT_BEGIN;439 $this->digramRules['k']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;440 $this->digramRules['k']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;441 $this->digramRules['k']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;442 $this->digramRules['k']['ph'] = self::NOT_BEGIN | self::PREFIX;443 $this->digramRules['k']['rh'] = self::ILLEGAL_PAIR;444 $this->digramRules['k']['sh'] = self::NOT_BEGIN;445 $this->digramRules['k']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;446 $this->digramRules['k']['wh'] = self::ILLEGAL_PAIR;447 $this->digramRules['k']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;448 $this->digramRules['k']['ck'] = self::ILLEGAL_PAIR;449 $this->digramRules['l'] = [];450 $this->digramRules['l']['a'] = self::ANY_COMBINATION;451 $this->digramRules['l']['b'] = self::NOT_BEGIN | self::PREFIX;452 $this->digramRules['l']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;453 $this->digramRules['l']['d'] = self::NOT_BEGIN | self::PREFIX;454 $this->digramRules['l']['e'] = self::ANY_COMBINATION;455 $this->digramRules['l']['f'] = self::NOT_BEGIN | self::PREFIX;456 $this->digramRules['l']['g'] = self::NOT_BEGIN | self::PREFIX;457 $this->digramRules['l']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;458 $this->digramRules['l']['i'] = self::ANY_COMBINATION;459 $this->digramRules['l']['j'] = self::NOT_BEGIN | self::PREFIX;460 $this->digramRules['l']['k'] = self::NOT_BEGIN | self::PREFIX;461 $this->digramRules['l']['l'] = self::NOT_BEGIN | self::PREFIX;462 $this->digramRules['l']['m'] = self::NOT_BEGIN | self::PREFIX;463 $this->digramRules['l']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;464 $this->digramRules['l']['o'] = self::ANY_COMBINATION;465 $this->digramRules['l']['p'] = self::NOT_BEGIN | self::PREFIX;466 $this->digramRules['l']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;467 $this->digramRules['l']['s'] = self::NOT_BEGIN;468 $this->digramRules['l']['t'] = self::NOT_BEGIN | self::PREFIX;469 $this->digramRules['l']['u'] = self::ANY_COMBINATION;470 $this->digramRules['l']['v'] = self::NOT_BEGIN | self::PREFIX;471 $this->digramRules['l']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;472 $this->digramRules['l']['x'] = self::ILLEGAL_PAIR;473 $this->digramRules['l']['y'] = self::ANY_COMBINATION;474 $this->digramRules['l']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;475 $this->digramRules['l']['ch'] = self::NOT_BEGIN | self::PREFIX;476 $this->digramRules['l']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;477 $this->digramRules['l']['ph'] = self::NOT_BEGIN | self::PREFIX;478 $this->digramRules['l']['rh'] = self::ILLEGAL_PAIR;479 $this->digramRules['l']['sh'] = self::NOT_BEGIN | self::PREFIX;480 $this->digramRules['l']['th'] = self::NOT_BEGIN | self::PREFIX;481 $this->digramRules['l']['wh'] = self::ILLEGAL_PAIR;482 $this->digramRules['l']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;483 $this->digramRules['l']['ck'] = self::ILLEGAL_PAIR;484 $this->digramRules['m'] = [];485 $this->digramRules['m']['a'] = self::ANY_COMBINATION;486 $this->digramRules['m']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;487 $this->digramRules['m']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;488 $this->digramRules['m']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;489 $this->digramRules['m']['e'] = self::ANY_COMBINATION;490 $this->digramRules['m']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;491 $this->digramRules['m']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;492 $this->digramRules['m']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;493 $this->digramRules['m']['i'] = self::ANY_COMBINATION;494 $this->digramRules['m']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;495 $this->digramRules['m']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;496 $this->digramRules['m']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;497 $this->digramRules['m']['m'] = self::NOT_BEGIN;498 $this->digramRules['m']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;499 $this->digramRules['m']['o'] = self::ANY_COMBINATION;500 $this->digramRules['m']['p'] = self::NOT_BEGIN;501 $this->digramRules['m']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;502 $this->digramRules['m']['s'] = self::NOT_BEGIN;503 $this->digramRules['m']['t'] = self::NOT_BEGIN;504 $this->digramRules['m']['u'] = self::ANY_COMBINATION;505 $this->digramRules['m']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;506 $this->digramRules['m']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;507 $this->digramRules['m']['x'] = self::ILLEGAL_PAIR;508 $this->digramRules['m']['y'] = self::ANY_COMBINATION;509 $this->digramRules['m']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;510 $this->digramRules['m']['ch'] = self::NOT_BEGIN | self::PREFIX;511 $this->digramRules['m']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;512 $this->digramRules['m']['ph'] = self::NOT_BEGIN;513 $this->digramRules['m']['rh'] = self::ILLEGAL_PAIR;514 $this->digramRules['m']['sh'] = self::NOT_BEGIN;515 $this->digramRules['m']['th'] = self::NOT_BEGIN;516 $this->digramRules['m']['wh'] = self::ILLEGAL_PAIR;517 $this->digramRules['m']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;518 $this->digramRules['m']['ck'] = self::ILLEGAL_PAIR;519 $this->digramRules['n'] = [];520 $this->digramRules['n']['a'] = self::ANY_COMBINATION;521 $this->digramRules['n']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;522 $this->digramRules['n']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;523 $this->digramRules['n']['d'] = self::NOT_BEGIN;524 $this->digramRules['n']['e'] = self::ANY_COMBINATION;525 $this->digramRules['n']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;526 $this->digramRules['n']['g'] = self::NOT_BEGIN | self::PREFIX;527 $this->digramRules['n']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;528 $this->digramRules['n']['i'] = self::ANY_COMBINATION;529 $this->digramRules['n']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;530 $this->digramRules['n']['k'] = self::NOT_BEGIN | self::PREFIX;531 $this->digramRules['n']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;532 $this->digramRules['n']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;533 $this->digramRules['n']['n'] = self::NOT_BEGIN;534 $this->digramRules['n']['o'] = self::ANY_COMBINATION;535 $this->digramRules['n']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;536 $this->digramRules['n']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;537 $this->digramRules['n']['s'] = self::NOT_BEGIN;538 $this->digramRules['n']['t'] = self::NOT_BEGIN;539 $this->digramRules['n']['u'] = self::ANY_COMBINATION;540 $this->digramRules['n']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;541 $this->digramRules['n']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;542 $this->digramRules['n']['x'] = self::ILLEGAL_PAIR;543 $this->digramRules['n']['y'] = self::NOT_BEGIN;544 $this->digramRules['n']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;545 $this->digramRules['n']['ch'] = self::NOT_BEGIN | self::PREFIX;546 $this->digramRules['n']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;547 $this->digramRules['n']['ph'] = self::NOT_BEGIN | self::PREFIX;548 $this->digramRules['n']['rh'] = self::ILLEGAL_PAIR;549 $this->digramRules['n']['sh'] = self::NOT_BEGIN;550 $this->digramRules['n']['th'] = self::NOT_BEGIN;551 $this->digramRules['n']['wh'] = self::ILLEGAL_PAIR;552 $this->digramRules['n']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;553 $this->digramRules['n']['ck'] = self::NOT_BEGIN | self::PREFIX;554 $this->digramRules['o'] = [];555 $this->digramRules['o']['a'] = self::ANY_COMBINATION;556 $this->digramRules['o']['b'] = self::ANY_COMBINATION;557 $this->digramRules['o']['c'] = self::ANY_COMBINATION;558 $this->digramRules['o']['d'] = self::ANY_COMBINATION;559 $this->digramRules['o']['e'] = self::ILLEGAL_PAIR;560 $this->digramRules['o']['f'] = self::ANY_COMBINATION;561 $this->digramRules['o']['g'] = self::ANY_COMBINATION;562 $this->digramRules['o']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;563 $this->digramRules['o']['i'] = self::ANY_COMBINATION;564 $this->digramRules['o']['j'] = self::ANY_COMBINATION;565 $this->digramRules['o']['k'] = self::ANY_COMBINATION;566 $this->digramRules['o']['l'] = self::ANY_COMBINATION;567 $this->digramRules['o']['m'] = self::ANY_COMBINATION;568 $this->digramRules['o']['n'] = self::ANY_COMBINATION;569 $this->digramRules['o']['o'] = self::ANY_COMBINATION;570 $this->digramRules['o']['p'] = self::ANY_COMBINATION;571 $this->digramRules['o']['r'] = self::ANY_COMBINATION;572 $this->digramRules['o']['s'] = self::ANY_COMBINATION;573 $this->digramRules['o']['t'] = self::ANY_COMBINATION;574 $this->digramRules['o']['u'] = self::ANY_COMBINATION;575 $this->digramRules['o']['v'] = self::ANY_COMBINATION;576 $this->digramRules['o']['w'] = self::ANY_COMBINATION;577 $this->digramRules['o']['x'] = self::ANY_COMBINATION;578 $this->digramRules['o']['y'] = self::ANY_COMBINATION;579 $this->digramRules['o']['z'] = self::ANY_COMBINATION;580 $this->digramRules['o']['ch'] = self::ANY_COMBINATION;581 $this->digramRules['o']['gh'] = self::NOT_BEGIN;582 $this->digramRules['o']['ph'] = self::ANY_COMBINATION;583 $this->digramRules['o']['rh'] = self::ILLEGAL_PAIR;584 $this->digramRules['o']['sh'] = self::ANY_COMBINATION;585 $this->digramRules['o']['th'] = self::ANY_COMBINATION;586 $this->digramRules['o']['wh'] = self::ILLEGAL_PAIR;587 $this->digramRules['o']['qu'] = self::BREAK_GRAM | self::NOT_END;588 $this->digramRules['o']['ck'] = self::ANY_COMBINATION;589 $this->digramRules['p'] = [];590 $this->digramRules['p']['a'] = self::ANY_COMBINATION;591 $this->digramRules['p']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;592 $this->digramRules['p']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;593 $this->digramRules['p']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;594 $this->digramRules['p']['e'] = self::ANY_COMBINATION;595 $this->digramRules['p']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;596 $this->digramRules['p']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;597 $this->digramRules['p']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;598 $this->digramRules['p']['i'] = self::ANY_COMBINATION;599 $this->digramRules['p']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;600 $this->digramRules['p']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;601 $this->digramRules['p']['l'] = self::SUFFIX | self::NOT_END;602 $this->digramRules['p']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;603 $this->digramRules['p']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;604 $this->digramRules['p']['o'] = self::ANY_COMBINATION;605 $this->digramRules['p']['p'] = self::NOT_BEGIN | self::PREFIX;606 $this->digramRules['p']['r'] = self::NOT_END;607 $this->digramRules['p']['s'] = self::NOT_BEGIN | self::END;608 $this->digramRules['p']['t'] = self::NOT_BEGIN | self::END;609 $this->digramRules['p']['u'] = self::NOT_BEGIN | self::END;610 $this->digramRules['p']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;611 $this->digramRules['p']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;612 $this->digramRules['p']['x'] = self::ILLEGAL_PAIR;613 $this->digramRules['p']['y'] = self::ANY_COMBINATION;614 $this->digramRules['p']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;615 $this->digramRules['p']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;616 $this->digramRules['p']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;617 $this->digramRules['p']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;618 $this->digramRules['p']['rh'] = self::ILLEGAL_PAIR;619 $this->digramRules['p']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;620 $this->digramRules['p']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;621 $this->digramRules['p']['wh'] = self::ILLEGAL_PAIR;622 $this->digramRules['p']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;623 $this->digramRules['p']['ck'] = self::ILLEGAL_PAIR;624 $this->digramRules['r'] = [];625 $this->digramRules['r']['a'] = self::ANY_COMBINATION;626 $this->digramRules['r']['b'] = self::NOT_BEGIN | self::PREFIX;627 $this->digramRules['r']['c'] = self::NOT_BEGIN | self::PREFIX;628 $this->digramRules['r']['d'] = self::NOT_BEGIN | self::PREFIX;629 $this->digramRules['r']['e'] = self::ANY_COMBINATION;630 $this->digramRules['r']['f'] = self::NOT_BEGIN | self::PREFIX;631 $this->digramRules['r']['g'] = self::NOT_BEGIN | self::PREFIX;632 $this->digramRules['r']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;633 $this->digramRules['r']['i'] = self::ANY_COMBINATION;634 $this->digramRules['r']['j'] = self::NOT_BEGIN | self::PREFIX;635 $this->digramRules['r']['k'] = self::NOT_BEGIN | self::PREFIX;636 $this->digramRules['r']['l'] = self::NOT_BEGIN | self::PREFIX;637 $this->digramRules['r']['m'] = self::NOT_BEGIN | self::PREFIX;638 $this->digramRules['r']['n'] = self::NOT_BEGIN | self::PREFIX;639 $this->digramRules['r']['o'] = self::ANY_COMBINATION;640 $this->digramRules['r']['p'] = self::NOT_BEGIN | self::PREFIX;641 $this->digramRules['r']['r'] = self::NOT_BEGIN | self::PREFIX;642 $this->digramRules['r']['s'] = self::NOT_BEGIN | self::PREFIX;643 $this->digramRules['r']['t'] = self::NOT_BEGIN | self::PREFIX;644 $this->digramRules['r']['u'] = self::ANY_COMBINATION;645 $this->digramRules['r']['v'] = self::NOT_BEGIN | self::PREFIX;646 $this->digramRules['r']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;647 $this->digramRules['r']['x'] = self::ILLEGAL_PAIR;648 $this->digramRules['r']['y'] = self::ANY_COMBINATION;649 $this->digramRules['r']['z'] = self::NOT_BEGIN | self::PREFIX;650 $this->digramRules['r']['ch'] = self::NOT_BEGIN | self::PREFIX;651 $this->digramRules['r']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;652 $this->digramRules['r']['ph'] = self::NOT_BEGIN | self::PREFIX;653 $this->digramRules['r']['rh'] = self::ILLEGAL_PAIR;654 $this->digramRules['r']['sh'] = self::NOT_BEGIN | self::PREFIX;655 $this->digramRules['r']['th'] = self::NOT_BEGIN | self::PREFIX;656 $this->digramRules['r']['wh'] = self::ILLEGAL_PAIR;657 $this->digramRules['r']['qu'] = self::NOT_BEGIN | self::PREFIX | self::NOT_END;658 $this->digramRules['r']['ck'] = self::NOT_BEGIN | self::PREFIX;659 $this->digramRules['s'] = [];660 $this->digramRules['s']['a'] = self::ANY_COMBINATION;661 $this->digramRules['s']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;662 $this->digramRules['s']['c'] = self::NOT_END;663 $this->digramRules['s']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;664 $this->digramRules['s']['e'] = self::ANY_COMBINATION;665 $this->digramRules['s']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;666 $this->digramRules['s']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;667 $this->digramRules['s']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;668 $this->digramRules['s']['i'] = self::ANY_COMBINATION;669 $this->digramRules['s']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;670 $this->digramRules['s']['k'] = self::ANY_COMBINATION;671 $this->digramRules['s']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;672 $this->digramRules['s']['m'] = self::SUFFIX | self::NOT_END;673 $this->digramRules['s']['n'] = self::PREFIX | self::SUFFIX | self::NOT_END;674 $this->digramRules['s']['o'] = self::ANY_COMBINATION;675 $this->digramRules['s']['p'] = self::ANY_COMBINATION;676 $this->digramRules['s']['r'] = self::NOT_BEGIN | self::NOT_END;677 $this->digramRules['s']['s'] = self::NOT_BEGIN | self::PREFIX;678 $this->digramRules['s']['t'] = self::ANY_COMBINATION;679 $this->digramRules['s']['u'] = self::ANY_COMBINATION;680 $this->digramRules['s']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;681 $this->digramRules['s']['w'] = self::BEGIN | self::SUFFIX | self::NOT_END;682 $this->digramRules['s']['x'] = self::ILLEGAL_PAIR;683 $this->digramRules['s']['y'] = self::ANY_COMBINATION;684 $this->digramRules['s']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;685 $this->digramRules['s']['ch'] = self::BEGIN | self::SUFFIX | self::NOT_END;686 $this->digramRules['s']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;687 $this->digramRules['s']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;688 $this->digramRules['s']['rh'] = self::ILLEGAL_PAIR;689 $this->digramRules['s']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;690 $this->digramRules['s']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;691 $this->digramRules['s']['wh'] = self::ILLEGAL_PAIR;692 $this->digramRules['s']['qu'] = self::SUFFIX | self::NOT_END;693 $this->digramRules['s']['ck'] = self::NOT_BEGIN;694 $this->digramRules['t'] = [];695 $this->digramRules['t']['a'] = self::ANY_COMBINATION;696 $this->digramRules['t']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;697 $this->digramRules['t']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;698 $this->digramRules['t']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;699 $this->digramRules['t']['e'] = self::ANY_COMBINATION;700 $this->digramRules['t']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;701 $this->digramRules['t']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;702 $this->digramRules['t']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;703 $this->digramRules['t']['i'] = self::ANY_COMBINATION;704 $this->digramRules['t']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;705 $this->digramRules['t']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;706 $this->digramRules['t']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;707 $this->digramRules['t']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;708 $this->digramRules['t']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;709 $this->digramRules['t']['o'] = self::ANY_COMBINATION;710 $this->digramRules['t']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;711 $this->digramRules['t']['r'] = self::NOT_END;712 $this->digramRules['t']['s'] = self::NOT_BEGIN | self::END;713 $this->digramRules['t']['t'] = self::NOT_BEGIN | self::PREFIX;714 $this->digramRules['t']['u'] = self::ANY_COMBINATION;715 $this->digramRules['t']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;716 $this->digramRules['t']['w'] = self::BEGIN | self::SUFFIX | self::NOT_END;717 $this->digramRules['t']['x'] = self::ILLEGAL_PAIR;718 $this->digramRules['t']['y'] = self::ANY_COMBINATION;719 $this->digramRules['t']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;720 $this->digramRules['t']['ch'] = self::NOT_BEGIN;721 $this->digramRules['t']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;722 $this->digramRules['t']['ph'] = self::NOT_BEGIN | self::END;723 $this->digramRules['t']['rh'] = self::ILLEGAL_PAIR;724 $this->digramRules['t']['sh'] = self::NOT_BEGIN | self::END;725 $this->digramRules['t']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;726 $this->digramRules['t']['wh'] = self::ILLEGAL_PAIR;727 $this->digramRules['t']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;728 $this->digramRules['t']['ck'] = self::ILLEGAL_PAIR;729 $this->digramRules['u'] = [];730 $this->digramRules['u']['a'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;731 $this->digramRules['u']['b'] = self::ANY_COMBINATION;732 $this->digramRules['u']['c'] = self::ANY_COMBINATION;733 $this->digramRules['u']['d'] = self::ANY_COMBINATION;734 $this->digramRules['u']['e'] = self::NOT_BEGIN;735 $this->digramRules['u']['f'] = self::ANY_COMBINATION;736 $this->digramRules['u']['g'] = self::ANY_COMBINATION;737 $this->digramRules['u']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;738 $this->digramRules['u']['i'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;739 $this->digramRules['u']['j'] = self::ANY_COMBINATION;740 $this->digramRules['u']['k'] = self::ANY_COMBINATION;741 $this->digramRules['u']['l'] = self::ANY_COMBINATION;742 $this->digramRules['u']['m'] = self::ANY_COMBINATION;743 $this->digramRules['u']['n'] = self::ANY_COMBINATION;744 $this->digramRules['u']['o'] = self::NOT_BEGIN | self::BREAK_GRAM;745 $this->digramRules['u']['p'] = self::ANY_COMBINATION;746 $this->digramRules['u']['r'] = self::ANY_COMBINATION;747 $this->digramRules['u']['s'] = self::ANY_COMBINATION;748 $this->digramRules['u']['t'] = self::ANY_COMBINATION;749 $this->digramRules['u']['u'] = self::ILLEGAL_PAIR;750 $this->digramRules['u']['v'] = self::ANY_COMBINATION;751 $this->digramRules['u']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;752 $this->digramRules['u']['x'] = self::ANY_COMBINATION;753 $this->digramRules['u']['y'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;754 $this->digramRules['u']['z'] = self::ANY_COMBINATION;755 $this->digramRules['u']['ch'] = self::ANY_COMBINATION;756 $this->digramRules['u']['gh'] = self::NOT_BEGIN | self::PREFIX;757 $this->digramRules['u']['ph'] = self::ANY_COMBINATION;758 $this->digramRules['u']['rh'] = self::ILLEGAL_PAIR;759 $this->digramRules['u']['sh'] = self::ANY_COMBINATION;760 $this->digramRules['u']['th'] = self::ANY_COMBINATION;761 $this->digramRules['u']['wh'] = self::ILLEGAL_PAIR;762 $this->digramRules['u']['qu'] = self::BREAK_GRAM | self::NOT_END;763 $this->digramRules['u']['ck'] = self::ANY_COMBINATION;764 $this->digramRules['v'] = [];765 $this->digramRules['v']['a'] = self::ANY_COMBINATION;766 $this->digramRules['v']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;767 $this->digramRules['v']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;768 $this->digramRules['v']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;769 $this->digramRules['v']['e'] = self::ANY_COMBINATION;770 $this->digramRules['v']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;771 $this->digramRules['v']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;772 $this->digramRules['v']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;773 $this->digramRules['v']['i'] = self::ANY_COMBINATION;774 $this->digramRules['v']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;775 $this->digramRules['v']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;776 $this->digramRules['v']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;777 $this->digramRules['v']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;778 $this->digramRules['v']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;779 $this->digramRules['v']['o'] = self::ANY_COMBINATION;780 $this->digramRules['v']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;781 $this->digramRules['v']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;782 $this->digramRules['v']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;783 $this->digramRules['v']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;784 $this->digramRules['v']['u'] = self::ANY_COMBINATION;785 $this->digramRules['v']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;786 $this->digramRules['v']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;787 $this->digramRules['v']['x'] = self::ILLEGAL_PAIR;788 $this->digramRules['v']['y'] = self::NOT_BEGIN;789 $this->digramRules['v']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;790 $this->digramRules['v']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;791 $this->digramRules['v']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;792 $this->digramRules['v']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;793 $this->digramRules['v']['rh'] = self::ILLEGAL_PAIR;794 $this->digramRules['v']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;795 $this->digramRules['v']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;796 $this->digramRules['v']['wh'] = self::ILLEGAL_PAIR;797 $this->digramRules['v']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;798 $this->digramRules['v']['ck'] = self::ILLEGAL_PAIR;799 $this->digramRules['w'] = [];800 $this->digramRules['w']['a'] = self::ANY_COMBINATION;801 $this->digramRules['w']['b'] = self::NOT_BEGIN | self::PREFIX;802 $this->digramRules['w']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;803 $this->digramRules['w']['d'] = self::NOT_BEGIN | self::PREFIX | self::END;804 $this->digramRules['w']['e'] = self::ANY_COMBINATION;805 $this->digramRules['w']['f'] = self::NOT_BEGIN | self::PREFIX;806 $this->digramRules['w']['g'] = self::NOT_BEGIN | self::PREFIX | self::END;807 $this->digramRules['w']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;808 $this->digramRules['w']['i'] = self::ANY_COMBINATION;809 $this->digramRules['w']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;810 $this->digramRules['w']['k'] = self::NOT_BEGIN | self::PREFIX;811 $this->digramRules['w']['l'] = self::NOT_BEGIN | self::PREFIX | self::SUFFIX;812 $this->digramRules['w']['m'] = self::NOT_BEGIN | self::PREFIX;813 $this->digramRules['w']['n'] = self::NOT_BEGIN | self::PREFIX;814 $this->digramRules['w']['o'] = self::ANY_COMBINATION;815 $this->digramRules['w']['p'] = self::NOT_BEGIN | self::PREFIX;816 $this->digramRules['w']['r'] = self::BEGIN | self::SUFFIX | self::NOT_END;817 $this->digramRules['w']['s'] = self::NOT_BEGIN | self::PREFIX;818 $this->digramRules['w']['t'] = self::NOT_BEGIN | self::PREFIX;819 $this->digramRules['w']['u'] = self::ANY_COMBINATION;820 $this->digramRules['w']['v'] = self::NOT_BEGIN | self::PREFIX;821 $this->digramRules['w']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;822 $this->digramRules['w']['x'] = self::NOT_BEGIN | self::PREFIX;823 $this->digramRules['w']['y'] = self::ANY_COMBINATION;824 $this->digramRules['w']['z'] = self::NOT_BEGIN | self::PREFIX;825 $this->digramRules['w']['ch'] = self::NOT_BEGIN;826 $this->digramRules['w']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;827 $this->digramRules['w']['ph'] = self::NOT_BEGIN;828 $this->digramRules['w']['rh'] = self::ILLEGAL_PAIR;829 $this->digramRules['w']['sh'] = self::NOT_BEGIN;830 $this->digramRules['w']['th'] = self::NOT_BEGIN;831 $this->digramRules['w']['wh'] = self::ILLEGAL_PAIR;832 $this->digramRules['w']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;833 $this->digramRules['w']['ck'] = self::NOT_BEGIN;834 $this->digramRules['x'] = [];835 $this->digramRules['x']['a'] = self::NOT_BEGIN;836 $this->digramRules['x']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;837 $this->digramRules['x']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;838 $this->digramRules['x']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;839 $this->digramRules['x']['e'] = self::NOT_BEGIN;840 $this->digramRules['x']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;841 $this->digramRules['x']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;842 $this->digramRules['x']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;843 $this->digramRules['x']['i'] = self::NOT_BEGIN;844 $this->digramRules['x']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;845 $this->digramRules['x']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;846 $this->digramRules['x']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;847 $this->digramRules['x']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;848 $this->digramRules['x']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;849 $this->digramRules['x']['o'] = self::NOT_BEGIN;850 $this->digramRules['x']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;851 $this->digramRules['x']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;852 $this->digramRules['x']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;853 $this->digramRules['x']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;854 $this->digramRules['x']['u'] = self::NOT_BEGIN;855 $this->digramRules['x']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;856 $this->digramRules['x']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;857 $this->digramRules['x']['x'] = self::ILLEGAL_PAIR;858 $this->digramRules['x']['y'] = self::NOT_BEGIN;859 $this->digramRules['x']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;860 $this->digramRules['x']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;861 $this->digramRules['x']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;862 $this->digramRules['x']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;863 $this->digramRules['x']['rh'] = self::ILLEGAL_PAIR;864 $this->digramRules['x']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;865 $this->digramRules['x']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;866 $this->digramRules['x']['wh'] = self::ILLEGAL_PAIR;867 $this->digramRules['x']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;868 $this->digramRules['x']['ck'] = self::ILLEGAL_PAIR;869 $this->digramRules['y'] = [];870 $this->digramRules['y']['a'] = self::ANY_COMBINATION;871 $this->digramRules['y']['b'] = self::NOT_BEGIN;872 $this->digramRules['y']['c'] = self::NOT_BEGIN | self::NOT_END;873 $this->digramRules['y']['d'] = self::NOT_BEGIN;874 $this->digramRules['y']['e'] = self::ANY_COMBINATION;875 $this->digramRules['y']['f'] = self::NOT_BEGIN | self::NOT_END;876 $this->digramRules['y']['g'] = self::NOT_BEGIN;877 $this->digramRules['y']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;878 $this->digramRules['y']['i'] = self::BEGIN | self::NOT_END;879 $this->digramRules['y']['j'] = self::NOT_BEGIN | self::NOT_END;880 $this->digramRules['y']['k'] = self::NOT_BEGIN;881 $this->digramRules['y']['l'] = self::NOT_BEGIN | self::NOT_END;882 $this->digramRules['y']['m'] = self::NOT_BEGIN;883 $this->digramRules['y']['n'] = self::NOT_BEGIN;884 $this->digramRules['y']['o'] = self::ANY_COMBINATION;885 $this->digramRules['y']['p'] = self::NOT_BEGIN;886 $this->digramRules['y']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;887 $this->digramRules['y']['s'] = self::NOT_BEGIN;888 $this->digramRules['y']['t'] = self::NOT_BEGIN;889 $this->digramRules['y']['u'] = self::ANY_COMBINATION;890 $this->digramRules['y']['v'] = self::NOT_BEGIN | self::NOT_END;891 $this->digramRules['y']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;892 $this->digramRules['y']['x'] = self::NOT_BEGIN;893 $this->digramRules['y']['y'] = self::ILLEGAL_PAIR;894 $this->digramRules['y']['z'] = self::NOT_BEGIN;895 $this->digramRules['y']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;896 $this->digramRules['y']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;897 $this->digramRules['y']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;898 $this->digramRules['y']['rh'] = self::ILLEGAL_PAIR;899 $this->digramRules['y']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;900 $this->digramRules['y']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;901 $this->digramRules['y']['wh'] = self::ILLEGAL_PAIR;902 $this->digramRules['y']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;903 $this->digramRules['y']['ck'] = self::ILLEGAL_PAIR;904 $this->digramRules['z'] = [];905 $this->digramRules['z']['a'] = self::ANY_COMBINATION;906 $this->digramRules['z']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;907 $this->digramRules['z']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;908 $this->digramRules['z']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;909 $this->digramRules['z']['e'] = self::ANY_COMBINATION;910 $this->digramRules['z']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;911 $this->digramRules['z']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;912 $this->digramRules['z']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;913 $this->digramRules['z']['i'] = self::ANY_COMBINATION;914 $this->digramRules['z']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;915 $this->digramRules['z']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;916 $this->digramRules['z']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;917 $this->digramRules['z']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;918 $this->digramRules['z']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;919 $this->digramRules['z']['o'] = self::ANY_COMBINATION;920 $this->digramRules['z']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;921 $this->digramRules['z']['r'] = self::NOT_BEGIN | self::NOT_END;922 $this->digramRules['z']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;923 $this->digramRules['z']['t'] = self::NOT_BEGIN;924 $this->digramRules['z']['u'] = self::ANY_COMBINATION;925 $this->digramRules['z']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;926 $this->digramRules['z']['w'] = self::SUFFIX | self::NOT_END;927 $this->digramRules['z']['x'] = self::ILLEGAL_PAIR;928 $this->digramRules['z']['y'] = self::ANY_COMBINATION;929 $this->digramRules['z']['z'] = self::NOT_BEGIN;930 $this->digramRules['z']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;931 $this->digramRules['z']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;932 $this->digramRules['z']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;933 $this->digramRules['z']['rh'] = self::ILLEGAL_PAIR;934 $this->digramRules['z']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;935 $this->digramRules['z']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;936 $this->digramRules['z']['wh'] = self::ILLEGAL_PAIR;937 $this->digramRules['z']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;938 $this->digramRules['z']['ck'] = self::ILLEGAL_PAIR;939 $this->digramRules['ch'] = [];940 $this->digramRules['ch']['a'] = self::ANY_COMBINATION;941 $this->digramRules['ch']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;942 $this->digramRules['ch']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;943 $this->digramRules['ch']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;944 $this->digramRules['ch']['e'] = self::ANY_COMBINATION;945 $this->digramRules['ch']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;946 $this->digramRules['ch']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;947 $this->digramRules['ch']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;948 $this->digramRules['ch']['i'] = self::ANY_COMBINATION;949 $this->digramRules['ch']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;950 $this->digramRules['ch']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;951 $this->digramRules['ch']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;952 $this->digramRules['ch']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;953 $this->digramRules['ch']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;954 $this->digramRules['ch']['o'] = self::ANY_COMBINATION;955 $this->digramRules['ch']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;956 $this->digramRules['ch']['r'] = self::NOT_END;957 $this->digramRules['ch']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;958 $this->digramRules['ch']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;959 $this->digramRules['ch']['u'] = self::ANY_COMBINATION;960 $this->digramRules['ch']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;961 $this->digramRules['ch']['w'] = self::NOT_BEGIN | self::NOT_END;962 $this->digramRules['ch']['x'] = self::ILLEGAL_PAIR;963 $this->digramRules['ch']['y'] = self::ANY_COMBINATION;964 $this->digramRules['ch']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;965 $this->digramRules['ch']['ch'] = self::ILLEGAL_PAIR;966 $this->digramRules['ch']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;967 $this->digramRules['ch']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;968 $this->digramRules['ch']['rh'] = self::ILLEGAL_PAIR;969 $this->digramRules['ch']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;970 $this->digramRules['ch']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;971 $this->digramRules['ch']['wh'] = self::ILLEGAL_PAIR;972 $this->digramRules['ch']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;973 $this->digramRules['ch']['ck'] = self::ILLEGAL_PAIR;974 $this->digramRules['gh'] = [];975 $this->digramRules['gh']['a'] = self::ANY_COMBINATION;976 $this->digramRules['gh']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;977 $this->digramRules['gh']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;978 $this->digramRules['gh']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;979 $this->digramRules['gh']['e'] = self::ANY_COMBINATION;980 $this->digramRules['gh']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;981 $this->digramRules['gh']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;982 $this->digramRules['gh']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;983 $this->digramRules['gh']['i'] = self::BEGIN | self::NOT_END;984 $this->digramRules['gh']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;985 $this->digramRules['gh']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;986 $this->digramRules['gh']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;987 $this->digramRules['gh']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;988 $this->digramRules['gh']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;989 $this->digramRules['gh']['o'] = self::BEGIN | self::NOT_END;990 $this->digramRules['gh']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;991 $this->digramRules['gh']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;992 $this->digramRules['gh']['s'] = self::NOT_BEGIN | self::PREFIX;993 $this->digramRules['gh']['t'] = self::NOT_BEGIN | self::PREFIX;994 $this->digramRules['gh']['u'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;995 $this->digramRules['gh']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;996 $this->digramRules['gh']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;997 $this->digramRules['gh']['x'] = self::ILLEGAL_PAIR;998 $this->digramRules['gh']['y'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;999 $this->digramRules['gh']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1000 $this->digramRules['gh']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1001 $this->digramRules['gh']['gh'] = self::ILLEGAL_PAIR;1002 $this->digramRules['gh']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1003 $this->digramRules['gh']['rh'] = self::ILLEGAL_PAIR;1004 $this->digramRules['gh']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1005 $this->digramRules['gh']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1006 $this->digramRules['gh']['wh'] = self::ILLEGAL_PAIR;1007 $this->digramRules['gh']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::PREFIX | self::NOT_END;1008 $this->digramRules['gh']['ck'] = self::ILLEGAL_PAIR;1009 $this->digramRules['ph'] = [];1010 $this->digramRules['ph']['a'] = self::ANY_COMBINATION;1011 $this->digramRules['ph']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1012 $this->digramRules['ph']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1013 $this->digramRules['ph']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1014 $this->digramRules['ph']['e'] = self::ANY_COMBINATION;1015 $this->digramRules['ph']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1016 $this->digramRules['ph']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1017 $this->digramRules['ph']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1018 $this->digramRules['ph']['i'] = self::ANY_COMBINATION;1019 $this->digramRules['ph']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1020 $this->digramRules['ph']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1021 $this->digramRules['ph']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;1022 $this->digramRules['ph']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1023 $this->digramRules['ph']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1024 $this->digramRules['ph']['o'] = self::ANY_COMBINATION;1025 $this->digramRules['ph']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1026 $this->digramRules['ph']['r'] = self::NOT_END;1027 $this->digramRules['ph']['s'] = self::NOT_BEGIN;1028 $this->digramRules['ph']['t'] = self::NOT_BEGIN;1029 $this->digramRules['ph']['u'] = self::ANY_COMBINATION;1030 $this->digramRules['ph']['v'] = self::NOT_BEGIN | self::NOT_END;1031 $this->digramRules['ph']['w'] = self::NOT_BEGIN | self::NOT_END;1032 $this->digramRules['ph']['x'] = self::ILLEGAL_PAIR;1033 $this->digramRules['ph']['y'] = self::NOT_BEGIN;1034 $this->digramRules['ph']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1035 $this->digramRules['ph']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1036 $this->digramRules['ph']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1037 $this->digramRules['ph']['ph'] = self::ILLEGAL_PAIR;1038 $this->digramRules['ph']['rh'] = self::ILLEGAL_PAIR;1039 $this->digramRules['ph']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1040 $this->digramRules['ph']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1041 $this->digramRules['ph']['wh'] = self::ILLEGAL_PAIR;1042 $this->digramRules['ph']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1043 $this->digramRules['ph']['ck'] = self::ILLEGAL_PAIR;1044 $this->digramRules['rh'] = [];1045 $this->digramRules['rh']['a'] = self::BEGIN | self::NOT_END;1046 $this->digramRules['rh']['b'] = self::ILLEGAL_PAIR;1047 $this->digramRules['rh']['c'] = self::ILLEGAL_PAIR;1048 $this->digramRules['rh']['d'] = self::ILLEGAL_PAIR;1049 $this->digramRules['rh']['e'] = self::BEGIN | self::NOT_END;1050 $this->digramRules['rh']['f'] = self::ILLEGAL_PAIR;1051 $this->digramRules['rh']['g'] = self::ILLEGAL_PAIR;1052 $this->digramRules['rh']['h'] = self::ILLEGAL_PAIR;1053 $this->digramRules['rh']['i'] = self::BEGIN | self::NOT_END;1054 $this->digramRules['rh']['j'] = self::ILLEGAL_PAIR;1055 $this->digramRules['rh']['k'] = self::ILLEGAL_PAIR;1056 $this->digramRules['rh']['l'] = self::ILLEGAL_PAIR;1057 $this->digramRules['rh']['m'] = self::ILLEGAL_PAIR;1058 $this->digramRules['rh']['n'] = self::ILLEGAL_PAIR;1059 $this->digramRules['rh']['o'] = self::BEGIN | self::NOT_END;1060 $this->digramRules['rh']['p'] = self::ILLEGAL_PAIR;1061 $this->digramRules['rh']['r'] = self::ILLEGAL_PAIR;1062 $this->digramRules['rh']['s'] = self::ILLEGAL_PAIR;1063 $this->digramRules['rh']['t'] = self::ILLEGAL_PAIR;1064 $this->digramRules['rh']['u'] = self::BEGIN | self::NOT_END;1065 $this->digramRules['rh']['v'] = self::ILLEGAL_PAIR;1066 $this->digramRules['rh']['w'] = self::ILLEGAL_PAIR;1067 $this->digramRules['rh']['x'] = self::ILLEGAL_PAIR;1068 $this->digramRules['rh']['y'] = self::BEGIN | self::NOT_END;1069 $this->digramRules['rh']['z'] = self::ILLEGAL_PAIR;1070 $this->digramRules['rh']['ch'] = self::ILLEGAL_PAIR;1071 $this->digramRules['rh']['gh'] = self::ILLEGAL_PAIR;1072 $this->digramRules['rh']['ph'] = self::ILLEGAL_PAIR;1073 $this->digramRules['rh']['rh'] = self::ILLEGAL_PAIR;1074 $this->digramRules['rh']['sh'] = self::ILLEGAL_PAIR;1075 $this->digramRules['rh']['th'] = self::ILLEGAL_PAIR;1076 $this->digramRules['rh']['wh'] = self::ILLEGAL_PAIR;1077 $this->digramRules['rh']['qu'] = self::ILLEGAL_PAIR;1078 $this->digramRules['rh']['ck'] = self::ILLEGAL_PAIR;1079 $this->digramRules['sh'] = [];1080 $this->digramRules['sh']['a'] = self::ANY_COMBINATION;1081 $this->digramRules['sh']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1082 $this->digramRules['sh']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1083 $this->digramRules['sh']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1084 $this->digramRules['sh']['e'] = self::ANY_COMBINATION;1085 $this->digramRules['sh']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1086 $this->digramRules['sh']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1087 $this->digramRules['sh']['h'] = self::ILLEGAL_PAIR;1088 $this->digramRules['sh']['i'] = self::ANY_COMBINATION;1089 $this->digramRules['sh']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1090 $this->digramRules['sh']['k'] = self::NOT_BEGIN;1091 $this->digramRules['sh']['l'] = self::BEGIN | self::SUFFIX | self::NOT_END;1092 $this->digramRules['sh']['m'] = self::BEGIN | self::SUFFIX | self::NOT_END;1093 $this->digramRules['sh']['n'] = self::BEGIN | self::SUFFIX | self::NOT_END;1094 $this->digramRules['sh']['o'] = self::ANY_COMBINATION;1095 $this->digramRules['sh']['p'] = self::NOT_BEGIN;1096 $this->digramRules['sh']['r'] = self::BEGIN | self::SUFFIX | self::NOT_END;1097 $this->digramRules['sh']['s'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1098 $this->digramRules['sh']['t'] = self::SUFFIX;1099 $this->digramRules['sh']['u'] = self::ANY_COMBINATION;1100 $this->digramRules['sh']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1101 $this->digramRules['sh']['w'] = self::SUFFIX | self::NOT_END;1102 $this->digramRules['sh']['x'] = self::ILLEGAL_PAIR;1103 $this->digramRules['sh']['y'] = self::ANY_COMBINATION;1104 $this->digramRules['sh']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1105 $this->digramRules['sh']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1106 $this->digramRules['sh']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1107 $this->digramRules['sh']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1108 $this->digramRules['sh']['rh'] = self::ILLEGAL_PAIR;1109 $this->digramRules['sh']['sh'] = self::ILLEGAL_PAIR;1110 $this->digramRules['sh']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1111 $this->digramRules['sh']['wh'] = self::ILLEGAL_PAIR;1112 $this->digramRules['sh']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1113 $this->digramRules['sh']['ck'] = self::ILLEGAL_PAIR;1114 $this->digramRules['th'] = [];1115 $this->digramRules['th']['a'] = self::ANY_COMBINATION;1116 $this->digramRules['th']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1117 $this->digramRules['th']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1118 $this->digramRules['th']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1119 $this->digramRules['th']['e'] = self::ANY_COMBINATION;1120 $this->digramRules['th']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1121 $this->digramRules['th']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1122 $this->digramRules['th']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1123 $this->digramRules['th']['i'] = self::ANY_COMBINATION;1124 $this->digramRules['th']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1125 $this->digramRules['th']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1126 $this->digramRules['th']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1127 $this->digramRules['th']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1128 $this->digramRules['th']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1129 $this->digramRules['th']['o'] = self::ANY_COMBINATION;1130 $this->digramRules['th']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1131 $this->digramRules['th']['r'] = self::NOT_END;1132 $this->digramRules['th']['s'] = self::NOT_BEGIN | self::END;1133 $this->digramRules['th']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1134 $this->digramRules['th']['u'] = self::ANY_COMBINATION;1135 $this->digramRules['th']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1136 $this->digramRules['th']['w'] = self::SUFFIX | self::NOT_END;1137 $this->digramRules['th']['x'] = self::ILLEGAL_PAIR;1138 $this->digramRules['th']['y'] = self::ANY_COMBINATION;1139 $this->digramRules['th']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1140 $this->digramRules['th']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1141 $this->digramRules['th']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1142 $this->digramRules['th']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1143 $this->digramRules['th']['rh'] = self::ILLEGAL_PAIR;1144 $this->digramRules['th']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1145 $this->digramRules['th']['th'] = self::ILLEGAL_PAIR;1146 $this->digramRules['th']['wh'] = self::ILLEGAL_PAIR;1147 $this->digramRules['th']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1148 $this->digramRules['th']['ck'] = self::ILLEGAL_PAIR;1149 $this->digramRules['wh'] = [];1150 $this->digramRules['wh']['a'] = self::BEGIN | self::NOT_END;1151 $this->digramRules['wh']['b'] = self::ILLEGAL_PAIR;1152 $this->digramRules['wh']['c'] = self::ILLEGAL_PAIR;1153 $this->digramRules['wh']['d'] = self::ILLEGAL_PAIR;1154 $this->digramRules['wh']['e'] = self::BEGIN | self::NOT_END;1155 $this->digramRules['wh']['f'] = self::ILLEGAL_PAIR;1156 $this->digramRules['wh']['g'] = self::ILLEGAL_PAIR;1157 $this->digramRules['wh']['h'] = self::ILLEGAL_PAIR;1158 $this->digramRules['wh']['i'] = self::BEGIN | self::NOT_END;1159 $this->digramRules['wh']['j'] = self::ILLEGAL_PAIR;1160 $this->digramRules['wh']['k'] = self::ILLEGAL_PAIR;1161 $this->digramRules['wh']['l'] = self::ILLEGAL_PAIR;1162 $this->digramRules['wh']['m'] = self::ILLEGAL_PAIR;1163 $this->digramRules['wh']['n'] = self::ILLEGAL_PAIR;1164 $this->digramRules['wh']['o'] = self::BEGIN | self::NOT_END;1165 $this->digramRules['wh']['p'] = self::ILLEGAL_PAIR;1166 $this->digramRules['wh']['r'] = self::ILLEGAL_PAIR;1167 $this->digramRules['wh']['s'] = self::ILLEGAL_PAIR;1168 $this->digramRules['wh']['t'] = self::ILLEGAL_PAIR;1169 $this->digramRules['wh']['u'] = self::ILLEGAL_PAIR;1170 $this->digramRules['wh']['v'] = self::ILLEGAL_PAIR;1171 $this->digramRules['wh']['w'] = self::ILLEGAL_PAIR;1172 $this->digramRules['wh']['x'] = self::ILLEGAL_PAIR;1173 $this->digramRules['wh']['y'] = self::BEGIN | self::NOT_END;1174 $this->digramRules['wh']['z'] = self::ILLEGAL_PAIR;1175 $this->digramRules['wh']['ch'] = self::ILLEGAL_PAIR;1176 $this->digramRules['wh']['gh'] = self::ILLEGAL_PAIR;1177 $this->digramRules['wh']['ph'] = self::ILLEGAL_PAIR;1178 $this->digramRules['wh']['rh'] = self::ILLEGAL_PAIR;1179 $this->digramRules['wh']['sh'] = self::ILLEGAL_PAIR;1180 $this->digramRules['wh']['th'] = self::ILLEGAL_PAIR;1181 $this->digramRules['wh']['wh'] = self::ILLEGAL_PAIR;1182 $this->digramRules['wh']['qu'] = self::ILLEGAL_PAIR;1183 $this->digramRules['wh']['ck'] = self::ILLEGAL_PAIR;1184 $this->digramRules['qu'] = [];1185 $this->digramRules['qu']['a'] = self::ANY_COMBINATION;1186 $this->digramRules['qu']['b'] = self::ILLEGAL_PAIR;1187 $this->digramRules['qu']['c'] = self::ILLEGAL_PAIR;1188 $this->digramRules['qu']['d'] = self::ILLEGAL_PAIR;1189 $this->digramRules['qu']['e'] = self::ANY_COMBINATION;1190 $this->digramRules['qu']['f'] = self::ILLEGAL_PAIR;1191 $this->digramRules['qu']['g'] = self::ILLEGAL_PAIR;1192 $this->digramRules['qu']['h'] = self::ILLEGAL_PAIR;1193 $this->digramRules['qu']['i'] = self::ANY_COMBINATION;1194 $this->digramRules['qu']['j'] = self::ILLEGAL_PAIR;1195 $this->digramRules['qu']['k'] = self::ILLEGAL_PAIR;1196 $this->digramRules['qu']['l'] = self::ILLEGAL_PAIR;1197 $this->digramRules['qu']['m'] = self::ILLEGAL_PAIR;1198 $this->digramRules['qu']['n'] = self::ILLEGAL_PAIR;1199 $this->digramRules['qu']['o'] = self::ANY_COMBINATION;1200 $this->digramRules['qu']['p'] = self::ILLEGAL_PAIR;1201 $this->digramRules['qu']['r'] = self::ILLEGAL_PAIR;1202 $this->digramRules['qu']['s'] = self::ILLEGAL_PAIR;1203 $this->digramRules['qu']['t'] = self::ILLEGAL_PAIR;1204 $this->digramRules['qu']['u'] = self::ILLEGAL_PAIR;1205 $this->digramRules['qu']['v'] = self::ILLEGAL_PAIR;1206 $this->digramRules['qu']['w'] = self::ILLEGAL_PAIR;1207 $this->digramRules['qu']['x'] = self::ILLEGAL_PAIR;1208 $this->digramRules['qu']['y'] = self::ILLEGAL_PAIR;1209 $this->digramRules['qu']['z'] = self::ILLEGAL_PAIR;1210 $this->digramRules['qu']['ch'] = self::ILLEGAL_PAIR;1211 $this->digramRules['qu']['gh'] = self::ILLEGAL_PAIR;1212 $this->digramRules['qu']['ph'] = self::ILLEGAL_PAIR;1213 $this->digramRules['qu']['rh'] = self::ILLEGAL_PAIR;1214 $this->digramRules['qu']['sh'] = self::ILLEGAL_PAIR;1215 $this->digramRules['qu']['th'] = self::ILLEGAL_PAIR;1216 $this->digramRules['qu']['wh'] = self::ILLEGAL_PAIR;1217 $this->digramRules['qu']['qu'] = self::ILLEGAL_PAIR;1218 $this->digramRules['qu']['ck'] = self::ILLEGAL_PAIR;1219 $this->digramRules['ck'] = [];1220 $this->digramRules['ck']['a'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1221 $this->digramRules['ck']['b'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1222 $this->digramRules['ck']['c'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1223 $this->digramRules['ck']['d'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1224 $this->digramRules['ck']['e'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1225 $this->digramRules['ck']['f'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1226 $this->digramRules['ck']['g'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1227 $this->digramRules['ck']['h'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1228 $this->digramRules['ck']['i'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1229 $this->digramRules['ck']['j'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1230 $this->digramRules['ck']['k'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1231 $this->digramRules['ck']['l'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1232 $this->digramRules['ck']['m'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1233 $this->digramRules['ck']['n'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1234 $this->digramRules['ck']['o'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1235 $this->digramRules['ck']['p'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1236 $this->digramRules['ck']['r'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1237 $this->digramRules['ck']['s'] = self::NOT_BEGIN;1238 $this->digramRules['ck']['t'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1239 $this->digramRules['ck']['u'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1240 $this->digramRules['ck']['v'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1241 $this->digramRules['ck']['w'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1242 $this->digramRules['ck']['x'] = self::ILLEGAL_PAIR;1243 $this->digramRules['ck']['y'] = self::NOT_BEGIN;1244 $this->digramRules['ck']['z'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1245 $this->digramRules['ck']['ch'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1246 $this->digramRules['ck']['gh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1247 $this->digramRules['ck']['ph'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1248 $this->digramRules['ck']['rh'] = self::ILLEGAL_PAIR;1249 $this->digramRules['ck']['sh'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1250 $this->digramRules['ck']['th'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1251 $this->digramRules['ck']['wh'] = self::ILLEGAL_PAIR;1252 $this->digramRules['ck']['qu'] = self::NOT_BEGIN | self::BREAK_GRAM | self::NOT_END;1253 $this->digramRules['ck']['ck'] = self::ILLEGAL_PAIR;1254 }1255 public function setSeparator($sep)1256 {1257 $this->separator = $sep;1258 }1259 public function generate($length)1260 {1261 return $this->generateWord($length);1262 }1263 private function generateWord($length)1264 {1265 $word = '';1266 $syllables = [];1267 $maxRetries = (4 * $length) + count($this->grams);1268 $tries = 0;1269 $wordUnits = [];1270 $savedPair = [];1271 while (strlen($word) < $length) {1272 list($new, $units, $savedPair) = $this->getSyllable($length - strlen($word), $savedPair);1273 $wordUnits = array_merge($wordUnits, $units);1274 if (!($this->isImproperWord($wordUnits) || ($word === '' && $this->haveInitialY($units)) || (strlen($word . $new) === $length && $this->haveFinalSplit($units)))) {1275 $word = $word . $new;1276 $syllables[] = $new;1277 }1278 $tries += 1;1279 if ($tries > $maxRetries) {1280 $tries = 0;1281 $word = '';1282 $syllables = [];1283 $wordUnits = [];1284 }1285 }1286 return implode($this->separator, $syllables);1287 }1288 private function getSyllable($length, $savedPair)1289 {1290 $holdSavedPair = $savedPair;1291 $maxRetries = (4 * $length) + count($this->grams);1292 do {1293 $tries = 0;1294 $lastUnit = '';1295 $savedPair = $holdSavedPair;1296 $syllable = '';1297 $unitsInSyllable = [];1298 $vowelCount = 0;1299 $currentUnit = 0;1300 $lengthLeft = $length;1301 $wantAnotherUnit = true;1302 do {1303 $wantVowel = false;1304 do {1305 if (count($savedPair) === 2) {1306 $syllable = array_pop($savedPair);1307 $unitsInSyllable[0] = $syllable;1308 $currentUnit += 1;1309 $lengthLeft -= strlen($syllable);1310 if ($this->gramRules[$syllable] & self::VOWEL) {1311 $vowelCount += 1;1312 }1313 }1314 if (count($savedPair) > 0) {1315 $unit = array_pop($savedPair);1316 } else {1317 if ($wantVowel) {1318 $unit = $this->getRandomUnit(self::VOWEL);1319 } else {1320 $unit = $this->getRandomUnit(self::NO_SPECIAL_RULE);1321 }1322 }1323 $lengthLeft -= strlen($unit);1324 $ruleBroken = $lengthLeft < 0;1325 if ($currentUnit === 0) {1326 if ($this->gramRules[$unit] & self::NOT_BEGIN_SYLLABLE) {1327 $ruleBroken = true;1328 } elseif ($lengthLeft === 0) {1329 if ($this->gramRules[$unit] & self::VOWEL) {1330 $wantAnotherUnit = false;1331 } else {1332 $ruleBroken = true;1333 }1334 }1335 } else {1336 $digrams = $this->digramRules;1337 $allowed = function ($flag) use ($digrams, $unitsInSyllable, $currentUnit, $unit) {1338 return $digrams[$unitsInSyllable[$currentUnit - 1]][$unit] & $flag;1339 };1340 if (1341 $allowed(self::ILLEGAL_PAIR) ||1342 ($allowed(self::BREAK_GRAM) && $vowelCount === 0) ||1343 ($allowed(self::END) && $vowelCount === 0 && !($this->gramRules[$unit] & self::VOWEL))1344 ) {1345 $ruleBroken = true;1346 }1347 if ($currentUnit === 1) {1348 if ($allowed(self::NOT_BEGIN)) {1349 $ruleBroken = true;1350 }1351 } else {1352 $lastUnit = $unitsInSyllable[$currentUnit - 1];1353 if (1354 ($currentUnit === 2 && $allowed(self::BEGIN) && ($this->gramRules[$unitsInSyllable[0]] & self::ALTERNATE_VOWEL)) ||1355 ($allowed(self::NOT_END) && $lengthLeft === 0) ||1356 ($allowed(self::BREAK_GRAM) || $this->digramRules[$unitsInSyllable[$currentUnit - 2]][$lastUnit] & self::NOT_END) ||1357 ($allowed(self::PREFIX) && !($this->gramRules[$unitsInSyllable[$currentUnit - 2]] & self::VOWEL))1358 ) {1359 $ruleBroken = true;1360 }1361 if (1362 !$ruleBroken &&1363 $this->gramRules[$unit] & self::VOWEL &&1364 ($lengthLeft > 0 || !($this->gramRules[$lastUnit] & self::NO_FINAL_SPLIT))1365 ) {1366 if ($vowelCount > 0 && $this->gramRules[$lastUnit] & self::VOWEL) {1367 $ruleBroken = true;1368 } elseif ($vowelCount !== 0 && !($this->gramRules[$lastUnit] && self::VOWEL)) {1369 if ($this->digramRules[$unitsInSyllable[$currentUnit - 2]][$lastUnit] & self::NOT_END) {1370 $ruleBroken = true;1371 } else {1372 $savedPair = [$unit];1373 $wantAnotherUnit = false;1374 }1375 }1376 }1377 }1378 if (!$ruleBroken && $wantAnotherUnit) {1379 if (1380 (1381 $vowelCount !== 0 &&1382 ($this->gramRules[$unit] & self::NO_FINAL_SPLIT) &&1383 $lengthLeft === 0 &&1384 ($lastUnit && !($this->gramRules[$lastUnit] & self::VOWEL))1385 ) || ($allowed(self::END) || $lengthLeft === 0)1386 ) {1387 $wantAnotherUnit = false;1388 } elseif ($vowelCount !== 0 && $lengthLeft > 0) {1389 if (1390 $allowed(self::BEGIN) &&1391 $currentUnit > 1 &&1392 !($vowelCount === 1 && $this->gramRules[$lastUnit] & self::VOWEL)1393 ) {1394 $savedPair = [$unit, $lastUnit];1395 $wantAnotherUnit = false;1396 } elseif ($allowed(self::BREAK_GRAM)) {1397 $savedPair = [$unit];1398 $wantAnotherUnit = false;1399 }1400 } elseif ($allowed(self::SUFFIX)) {1401 $wantVowel = true;1402 }1403 }1404 }1405 $tries += 1;1406 if ($ruleBroken) {1407 $lengthLeft += strlen($unit);1408 }1409 } while ($ruleBroken && $tries < $maxRetries);1410 if ($tries <= $maxRetries) {1411 if (1412 ($this->gramRules[$unit] & self::VOWEL) &&1413 ($currentUnit > 0 || !($this->gramRules[$unit] & self::ALTERNATE_VOWEL))1414 ) {1415 $vowelCount += 1;1416 }1417 if (count($savedPair) === 2) {1418 $syllable = substr($syllable, 0, strlen($syllable) - strlen($lastUnit));1419 $lengthLeft += strlen($lastUnit);1420 $currentUnit -= 2;1421 } elseif (count($savedPair) === 1) {1422 $currentUnit -= 1;1423 } else {1424 $unitsInSyllable[$currentUnit] = $unit;1425 $syllable .= $unit;1426 }1427 }1428 $currentUnit += 1;1429 } while ($tries <= $maxRetries && $wantAnotherUnit);1430 } while ($ruleBroken || $this->isIllegalPlacement($unitsInSyllable));1431 return [$syllable, $unitsInSyllable, $savedPair];1432 }1433 private function isIllegalPlacement($units)1434 {1435 $vowelCount = 0;1436 $failure = false;1437 foreach ($units as $unitCount => $unit) {1438 if ($failure) {1439 break;1440 }1441 if ($unitCount >= 1) {1442 if (1443 (1444 !($this->gramRules[$units[$unitCount - 1]] & self::VOWEL) &&1445 ($this->gramRules[$unit] & self::VOWEL) &&1446 !($this->gramRules[$unit] & self::NO_FINAL_SPLIT && $unitCount === count($unit)) &&1447 $vowelCount > 01448 )1449 ||1450 (1451 $unitCount >= 2 &&1452 (1453 (1454 !($this->gramRules[$units[$unitCount - 2]] & self::VOWEL) &&1455 !($this->gramRules[$units[$unitCount - 1]] & self::VOWEL) &&1456 !($this->gramRules[$unit] & self::VOWEL)1457 )1458 ||1459 (1460 ($this->gramRules[$units[$unitCount - 2]] & self::VOWEL) &&1461 !(($this->gramRules[$units[0]] & self::ALTERNATE_VOWEL) && $unitCount === 2) &&1462 ($this->gramRules[$units[$unitCount - 1]] & self::VOWEL) &&1463 ($this->gramRules[$unit] & self::VOWEL)1464 )1465 )1466 )1467 ) {1468 $failure = true;1469 }1470 }1471 if (1472 $this->gramRules[$unit] & self::VOWEL &&1473 !(1474 $this->gramRules[$units[0]] & self::ALTERNATE_VOWEL &&1475 $unitCount === 0 &&1476 count($units) > 11477 )1478 ) {1479 $vowelCount += 1;1480 }1481 }1482 return $failure;1483 }1484 private function getRandomUnit($type)1485 {1486 if ($type & self::VOWEL) {1487 return $this->chooseRandom($this->vowelGrams);1488 } else {1489 return $this->chooseRandom($this->grams);1490 }1491 }1492 private function isImproperWord($units)1493 {1494 foreach ($units as $unitCount => $unit) {1495 if ($unitCount > 0 && $this->digramRules[$units[$unitCount - 1]][$unit] & self::ILLEGAL_PAIR) {1496 return true;1497 }1498 if ($unitCount >= 2) {1499 if (1500 (1501 ($this->gramRules[$units[$unitCount - 2]] & self::VOWEL) &&1502 !($this->gramRules[$units[$unitCount - 2]] & self::ALTERNATE_VOWEL) &&1503 ($this->gramRules[$units[$unitCount - 1]] & self::VOWEL) &&1504 ($this->gramRules[$unit] & self::VOWEL)1505 )1506 ||1507 (1508 !($this->gramRules[$units[$unitCount - 2]] & self::VOWEL) &&1509 !($this->gramRules[$units[$unitCount - 1]] & self::VOWEL) &&1510 !($this->gramRules[$units[$unitCount]] & self::VOWEL)1511 )1512 ) {1513 return true;1514 }1515 }1516 }1517 return false;1518 }1519 private function haveInitialY($units)1520 {1521 $vowelCount = 0;1522 $normalVowelCount = 0;1523 foreach ($units as $unitCount => $unit) {1524 if ($this->gramRules[$unit] & self::VOWEL) {1525 $vowelCount += 1;1526 if (!($this->gramRules[$unit] && self::ALTERNATE_VOWEL) || $unitCount > 0) {1527 $normalVowelCount += 1;1528 }1529 }1530 }1531 return $vowelCount <= 1 && $normalVowelCount === 0;1532 }1533 private function haveFinalSplit($units)1534 {1535 $vowelCount = 0;1536 foreach ($units as $unit) {1537 if ($this->gramRules[$unit] & self::VOWEL) {1538 $vowelCount += 1;1539 }1540 }1541 return $vowelCount === 1 && ($this->gramRules[$units[count($units) - 1]] & self::NO_FINAL_SPLIT);1542 }1543}...

Full Screen

Full Screen

bd.php

Source:bd.php Github

copy

Full Screen

1<?php2if( !defined( 'ABSPATH')){ exit(); } 3 4/* 5Создаем таблицы, необходимые нам 6*/ 7 8global $wpdb;9$prefix = $wpdb->prefix;10 $table_name = $wpdb->prefix ."change";11 $sql = "CREATE TABLE IF NOT EXISTS $table_name(12 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,13 `meta_key` varchar(250) NOT NULL,14 `meta_key2` varchar(250) NOT NULL,15 `meta_value` longtext NOT NULL,16 PRIMARY KEY ( `id` ) 17 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";18 $wpdb->query($sql);19 $table_name = $wpdb->prefix ."login_check";20 $sql = "CREATE TABLE IF NOT EXISTS $table_name(21 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,22 `datelogin` datetime NOT NULL,23 `user_id` bigint(20) NOT NULL,24 `user_login` varchar(250) NOT NULL,25 `user_ip` varchar(250) NOT NULL,26 `user_browser` varchar(250) NOT NULL,27 PRIMARY KEY ( `id` ) 28 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";29 $wpdb->query($sql); 30 31 /* безопасность */32 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'sec_lostpass'");33 if ($query == 0){34 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `sec_lostpass` int(1) NOT NULL default '1'");35 }36 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'sec_login'");37 if ($query == 0){38 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `sec_login` int(1) NOT NULL default '0'");39 }40 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'email_login'");41 if ($query == 0){42 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `email_login` int(1) NOT NULL default '0'");43 }44 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'enable_ips'");45 if ($query == 0) {46 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `enable_ips` longtext NOT NULL");47 } 48 /* end безопаность */49 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'auto_login1'");50 if ($query == 0){51 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `auto_login1` varchar(250) NOT NULL");52 }53 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'auto_login2'");54 if ($query == 0){55 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `auto_login2` varchar(250) NOT NULL");56 }57 $query = $wpdb->query("SHOW COLUMNS FROM ".$wpdb->prefix ."users LIKE 'user_discount'");58 if ($query == 0){59 $wpdb->query("ALTER TABLE ".$wpdb->prefix ."users ADD `user_discount` varchar(50) NOT NULL default '0'");60 } 61/* архив */62 $table_name= $wpdb->prefix ."archive_data";63 $sql = "CREATE TABLE IF NOT EXISTS $table_name(64 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,65 `meta_key` varchar(250) NOT NULL,66 `meta_key2` varchar(250) NOT NULL,67 `meta_key3` varchar(250) NOT NULL,68 `item_id` bigint(20) NOT NULL default '0',69 `meta_value` varchar(20) NOT NULL default '0',70 PRIMARY KEY ( `id` ) 71 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";72 $wpdb->query($sql);73/*74платежные системы75psys_title - значение76psys_logo - логотип77*/78 $table_name = $wpdb->prefix ."psys";79 $sql = "CREATE TABLE IF NOT EXISTS $table_name(80 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,81 `psys_title` longtext NOT NULL,82 `psys_logo` longtext NOT NULL,83 PRIMARY KEY ( `id` ) 84 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";85 $wpdb->query($sql);86/* end платежные системы */87/*88коды валют89vtype_title - значение90vncurs - внутренний курс за 1 доллар91parser - id парсера92nums - число93elem - 0-сумма, 1-процент94*/95 $table_name = $wpdb->prefix ."vtypes";96 $sql = "CREATE TABLE IF NOT EXISTS $table_name(97 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,98 `vtype_title` longtext NOT NULL,99 `vncurs` varchar(50) NOT NULL default '0',100 `parser` bigint(20) NOT NULL default '0',101 `nums` varchar(50) NOT NULL default '0',102 `elem` int(2) NOT NULL default '0',103 PRIMARY KEY ( `id` ) 104 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";105 $wpdb->query($sql);106/* end коды валют */107/* создаем коды валют */108 $vtypes = array('RUB','EUR','USD','UAH','AMD','KZT','GLD','BYN','UZS','BTC','TRY');109 if(is_array($vtypes)){110 foreach($vtypes as $type){111 $cc = $wpdb->query("SELECT id FROM ". $wpdb->prefix ."vtypes WHERE vtype_title='$type'");112 if($cc == 0){113 $wpdb->insert($wpdb->prefix ."vtypes", array('vtype_title'=>$type, 'vncurs'=>'1'));114 }115 }116 }117/* end создаем коды валют */118/*119Расписание оператора120status - статус121*/122 $table_name= $wpdb->prefix ."operator_schedules";123 $sql = "CREATE TABLE IF NOT EXISTS $table_name(124 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,125 `status` int(5) NOT NULL default '0',126 `h1` varchar(5) NOT NULL default '0',127 `m1` varchar(5) NOT NULL default '0',128 `h2` varchar(5) NOT NULL default '0',129 `m2` varchar(5) NOT NULL default '0', 130 `d1` int(1) NOT NULL default '0',131 `d2` int(1) NOT NULL default '0',132 `d3` int(1) NOT NULL default '0',133 `d4` int(1) NOT NULL default '0',134 `d5` int(1) NOT NULL default '0',135 `d6` int(1) NOT NULL default '0',136 `d7` int(1) NOT NULL default '0',137 `save_order` bigint(20) NOT NULL default '0',138 PRIMARY KEY ( `id` ) 139 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";140 $wpdb->query($sql); 141/*142валюты143valut_logo - логотип валюты144psys_logo - лого платежки145psys_id - id ПС146psys_title - название ПС147vtype_id - id кода валюты148vtype_title - название кода валюты149valut_decimal - знаков после запятой150xml_value - значение для XML151valut_status - активность валюты (1 - активна, 0 - не активна)152valut_reserv - резерв (автосумма)153reserv_place - откуда брать резерв (0-считать)154minzn - минимальное кол-во символов155maxzn - максимальное кол-во символов156firstzn - первые буквы157cifrzn - что используется (0-буквы и цифры, 1-только цифры, 2-только буквы, 3-email, 4-все символы, 5-телефон)158vidzn - вид счета (0-счет, 1-карта, 2-номер телефона)159helps - подсказка при заполнении (отдаю)160helps2 - подсказка при заполнении (получаю)161txt1 - название отдаете162show1 - выводить при отдаете163txt2 - название получаете164show2 - выводить при получаете165lead_num - число приведения166cf_hidden - видимость на сайте167check_text - текст проверенного кошелька168check_purse - интерфейс проверки кошелька169*/170 $table_name= $wpdb->prefix ."valuts";171 $sql = "CREATE TABLE IF NOT EXISTS $table_name(172 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,173 `valut_logo` longtext NOT NULL,174 `psys_logo` longtext NOT NULL, 175 `valut_decimal` int(2) NOT NULL default '2',176 `valut_status` int(1) NOT NULL default '1',177 `valut_reserv` varchar(50) NOT NULL default '0',178 `reserv_place` varchar(150) NOT NULL default '0',179 `xml_value` varchar(250) NOT NULL, 180 `minzn` int(5) NOT NULL default '0',181 `maxzn` int(5) NOT NULL default '100',182 `firstzn` varchar(20) NOT NULL,183 `cifrzn` int(2) NOT NULL default '0',184 `vidzn` int(2) NOT NULL default '0',185 `lead_num` varchar(20) NOT NULL default '0',186 `helps` longtext NOT NULL,187 `helps2` longtext NOT NULL,188 `txt1` longtext NOT NULL,189 `txt2` longtext NOT NULL,190 `show1` int(2) NOT NULL default '1',191 `show2` int(2) NOT NULL default '1',192 `psys_id` bigint(20) NOT NULL default '0',193 `psys_title` longtext NOT NULL, 194 `vtype_id` bigint(20) NOT NULL default '0',195 `vtype_title` longtext NOT NULL,196 `cf_hidden` int(2) NOT NULL default '0',197 `site_order` bigint(20) NOT NULL default '0',198 `reserv_order` bigint(20) NOT NULL default '0',199 `check_text` longtext NOT NULL,200 `check_purse` varchar(150) NOT NULL default '0',201 PRIMARY KEY ( `id` ) 202 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";203 $wpdb->query($sql);204 $table_name= $wpdb->prefix ."valuts_meta";205 $sql = "CREATE TABLE IF NOT EXISTS $table_name(206 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,207 `item_id` bigint(20) NOT NULL default '0',208 `meta_key` longtext NOT NULL,209 `meta_value` longtext NOT NULL,210 PRIMARY KEY ( `id` ) 211 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";212 $wpdb->query($sql);213/*214транзакции резерва215trans_title - название транзакции216trans_create - дата создания транзакции217trans_edit - дата изменения транзакции218user_creator - id юзера создавшего транзакцию219user_editor - id юзера отредактировавшего транзакцию220trans_summ - сумма221valut_id - id валюты222vtype_id - id типа валюты223vtype_title - название типа валюты224*/225 $table_name= $wpdb->prefix ."trans_reserv";226 $sql = "CREATE TABLE IF NOT EXISTS $table_name(227 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,228 `trans_title` longtext NOT NULL,229 `trans_create` datetime NOT NULL,230 `trans_edit` datetime NOT NULL,231 `user_creator` bigint(20) NOT NULL default '0',232 `user_editor` bigint(20) NOT NULL default '0',233 `trans_summ` varchar(50) NOT NULL default '0',234 `valut_id` bigint(20) NOT NULL default '0',235 `vtype_id` bigint(20) NOT NULL default '0',236 `vtype_title` longtext NOT NULL,237 PRIMARY KEY ( `id` ) 238 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";239 $wpdb->query($sql);240/*241Дополнительные поля валют242tech_name - техническое название243cf_name - название244vid - 0 текст, 1- select245cf_req - 0-не обязательно, 1-обязательно246minzn - мин.длинна247maxzn - макс длинна248firstzn - начальное значение249helps - подсказка отдаете250datas - если селект, то массив выборки251cf_hidden - видимость на сайте252valut_id - id валюты253place_id - 0 - и там и там, 1 - отдаете, 2 - получаете254uniqueid - идентификатор для автовыплат и прочего255*/ 256 $table_name= $wpdb->prefix ."custom_fields_valut";257 $sql = "CREATE TABLE IF NOT EXISTS $table_name(258 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,259 `tech_name` longtext NOT NULL,260 `cf_name` longtext NOT NULL,261 `vid` int(1) NOT NULL default '0',262 `valut_id` bigint(20) NOT NULL default '0',263 `cf_req` int(1) NOT NULL default '0',264 `place_id` int(1) NOT NULL default '0',265 `minzn` int(2) NOT NULL default '0',266 `maxzn` int(5) NOT NULL default '100',267 `firstzn` varchar(20) NOT NULL,268 `uniqueid` varchar(250) NOT NULL,269 `helps` longtext NOT NULL,270 `datas` longtext NOT NULL,271 `status` int(2) NOT NULL default '1',272 `cf_hidden` int(2) NOT NULL default '0',273 `cf_order` bigint(20) NOT NULL default '0',274 PRIMARY KEY ( `id` ) 275 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";276 $wpdb->query($sql);277/*278Дополнительные поля направлений279tech_name - техническое название280cf_name - название281vid - 0 текст, 1- select282cf_req - 0-не обязательно, 1-обязательно283cf_hidden - видимость на сайте284minzn - мин.длинна285maxzn - макс длинна286firstzn - начальное значение287helps - подсказка288datas - если селект, то массив выборки289*/ 290 $table_name= $wpdb->prefix ."custom_fields";291 $sql = "CREATE TABLE IF NOT EXISTS $table_name(292 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,293 `tech_name` longtext NOT NULL,294 `cf_name` longtext NOT NULL,295 `vid` int(1) NOT NULL default '0',296 `cf_req` int(1) NOT NULL default '0',297 `minzn` int(2) NOT NULL default '0',298 `maxzn` int(5) NOT NULL default '100',299 `firstzn` varchar(20) NOT NULL,300 `uniqueid` varchar(250) NOT NULL,301 `helps` longtext NOT NULL,302 `cf_auto` varchar(250) NOT NULL,303 `datas` longtext NOT NULL,304 `status` int(2) NOT NULL default '1',305 `cf_hidden` int(2) NOT NULL default '0',306 `cf_order` bigint(20) NOT NULL default '0',307 PRIMARY KEY ( `id` ) 308 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";309 $wpdb->query($sql); 310 311 $table_name= $wpdb->prefix ."cf_naps";312 $sql = "CREATE TABLE IF NOT EXISTS $table_name(313 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,314 `naps_id` bigint(20) NOT NULL default '0',315 `cf_id` bigint(20) NOT NULL default '0',316 `place_id` bigint(20) NOT NULL default '0',317 PRIMARY KEY ( `id` ) 318 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";319 $wpdb->query($sql);320/*321направления обменов322valut_id1 - валюта отдаете323valut_id2 - валюта получаете324psys_id1 - id платежной системы отдаете325psys_id2 - id платежной системы получаете326naps_status - статус направления (1-активно, 0-неактивно)327show_file - 0-не выводить в файлах, 1-выводить в файлах328curs1 - курс 1329curs2 - курс 2330minsumm1 - Мин. сумма обмена (для Отдаю)331minsumm2 - Мин. сумма обмена (для Получаю)332maxsumm1 - Макс. сумма обмена (для Отдаю)333maxsumm2 - Макс. сумма обмена (для Получаю)334com_summ1 - сумма коммисси 1335com_pers1 - процент коммисси 1336com_summ2 - сумма коммисси 2337com_pers2 - процент коммисси 2338profit_summ1 - сумма прибыли 1339profit_pers1 - процент прибыли 1340profit_summ2 - сумма прибыли 2341profit_pers2 - процент прибыли 2342minsumm1com - минимальная сумма комиссии343maxsumm1com - максимальная сумма комиссии344pay_com1 - оплата комиссии (0-юзер, 1-обменник)345pay_com2 - оплата комиссии (0-юзер, 1-обменник)346nscom1 - нестандартная комиссия (0-нет, 1-да)347nscom2 - нестандартная комиссия (0-нет, 1-да)348com_box_summ1 - доп.комиссия с отправителя сумма349com_box_pers1 - доп.комиссия с отправителя процент350com_box_min1 - доп.комиссия с отправителя351com_box_summ2 - доп.комиссия с получателя сумма352com_box_pers2 - доп.комиссия с получателя процент353com_box_min2 - доп.комиссия с получателя354user_sk - скидка пользователей355max_user_sk - максимальная скидка356maxnaps - ограничение резерва по направлению обмена357not_ip - запрещенные ip или маски, массив358m_in - мертчант приема оплаты 359m_out - мерчант автовыплаты360naps_name - ЧПУ направления361site_order1 - сортировка для тарифов и карты сайта362*/363 $table_name = $wpdb->prefix ."naps";364 $sql = "CREATE TABLE IF NOT EXISTS $table_name(365 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,366 `createdate` datetime NOT NULL,367 `editdate` datetime NOT NULL,368 `autostatus` int(1) NOT NULL default '1',369 `valut_id1` bigint(20) NOT NULL default '0',370 `valut_id2` bigint(20) NOT NULL default '0',371 `psys_id1` bigint(20) NOT NULL default '0',372 `psys_id2` bigint(20) NOT NULL default '0', 373 `tech_name` longtext NOT NULL,374 `curs1` varchar(50) NOT NULL default '0',375 `curs2` varchar(50) NOT NULL default '0',376 `profit_summ1` varchar(50) NOT NULL default '0',377 `profit_summ2` varchar(50) NOT NULL default '0',378 `profit_pers1` varchar(20) NOT NULL default '0',379 `profit_pers2` varchar(20) NOT NULL default '0', 380 `com_summ1` varchar(50) NOT NULL default '0',381 `com_summ2` varchar(50) NOT NULL default '0', 382 `com_pers1` varchar(20) NOT NULL default '0',383 `com_pers2` varchar(20) NOT NULL default '0', 384 `com_summ1_check` varchar(50) NOT NULL default '0',385 `com_summ2_check` varchar(50) NOT NULL default '0',386 `com_pers1_check` varchar(20) NOT NULL default '0',387 `com_pers2_check` varchar(20) NOT NULL default '0',388 `pay_com1` int(1) NOT NULL default '0',389 `pay_com2` int(1) NOT NULL default '0',390 `nscom1` int(1) NOT NULL default '0',391 `nscom2` int(1) NOT NULL default '0', 392 `maxsumm1com` varchar(250) NOT NULL default '0', 393 `maxsumm2com` varchar(250) NOT NULL default '0',394 `minsumm1com` varchar(50) NOT NULL default '0', 395 `minsumm2com` varchar(50) NOT NULL default '0', 396 `minsumm1` varchar(250) NOT NULL default '0',397 `minsumm2` varchar(250) NOT NULL default '0',398 `maxsumm1` varchar(250) NOT NULL default '0',399 `maxsumm2` varchar(250) NOT NULL default '0',400 `com_box_summ1` varchar(250) NOT NULL default '0',401 `com_box_pers1` varchar(250) NOT NULL default '0',402 `com_box_min1` varchar(250) NOT NULL default '0',403 `com_box_summ2` varchar(250) NOT NULL default '0',404 `com_box_pers2` varchar(250) NOT NULL default '0',405 `com_box_min2` varchar(250) NOT NULL default '0',406 `m_in` varchar(150) NOT NULL default '0',407 `m_out` varchar(150) NOT NULL default '0', 408 `user_sk` int(1) NOT NULL default '1',409 `max_user_sk` varchar(5) NOT NULL default '50', 410 `check_purse` int(1) NOT NULL default '0',411 `req_check_purse` int(1) NOT NULL default '0', 412 `naps_name` varchar(250) NOT NULL,413 `naps_status` int(2) NOT NULL default '1',414 `site_order1` bigint(20) NOT NULL default '0',415 `to1` bigint(20) NOT NULL default '0',416 `to2_1` bigint(20) NOT NULL default '0',417 `to2_2` bigint(20) NOT NULL default '0',418 `to3_1` bigint(20) NOT NULL default '0', 419 PRIMARY KEY ( `id` ) 420 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";421 $wpdb->query($sql); 422 423 $table_name = $wpdb->prefix ."naps_meta";424 $sql = "CREATE TABLE IF NOT EXISTS $table_name(425 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,426 `item_id` bigint(20) NOT NULL default '0',427 `meta_key` longtext NOT NULL,428 `meta_value` longtext NOT NULL,429 PRIMARY KEY ( `id` ) 430 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";431 $wpdb->query($sql);432 $table_name = $wpdb->prefix ."naps_order";433 $sql = "CREATE TABLE IF NOT EXISTS $table_name(434 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,435 `naps_id` bigint(20) NOT NULL default '0',436 `v_id` bigint(20) NOT NULL default '0',437 `order1` bigint(20) NOT NULL default '0',438 PRIMARY KEY ( `id` ) 439 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";440 $wpdb->query($sql);441/* обмены 442createdate - дата создания443editdate - дата смены статуса444naps_id - id направления445curs1 - курс 1446curs2 - курс 2447valut1 - название валюты 1448valut2 - название валюты 2449valut1i - id валюты 1450valut2i - id валюты 2451vtype1 - тип валюты 1452vtype2 - тип валюты 1453vtype1i - id тип валюты 1454vtype2i - id тип валюты 2455psys1i - id платежной системы 1456psys2i - id платежной системы 2457user_id - id юзера458user_sk - скидка пользователя в момент обмена459user_sksumm - сумма скидки юзера460user_country - страна461user_ip - ip462first_name463last_name464second_name465user_phone466user_skype467user_email468account1 - счет 1469account2 - счет 2470metas - обычные поля471dmetas - доп.поля валют472ref_id - id реферала473profit - сумма прибыли($)474summp - сумма партнера($)475partpr - партнерский процент476pcalc - партнерское начисление (0-не насчитано, 1-насчитано) 477 защита от изменения условий начисления по юзерам.478exsum - сумма обмена в валюте479summ1 - сумма отдаете480dop_com1 - сумма доп.комиссии481summ1_dc - сумма отдаете с доп.комиссией482com_ps1 - комисия платежной системы по отдаете483summ1c - сумма с комиссией для юзера484summ1cr - сумма с комиссией для резерва обменника485dop_com2 - сумма доп.комиссии486com_ps2 - комисия платежной системы по получаете487summ2t - сумма получаете по курсу488summ2 - сумма получаете по курсу (учтена скидка)489summ2_dc - сумма получаете с доп.комиссией490summ2c - сумма с комиссией для юзера491summ2cr - сумма с комиссией для резерва обменника492mystatus - id пользовательского статуса493status - статус 494 auto - автоматически(не заявка)495 new - новая заявка496 cancel - отменена пользователем497 delete - удалена498 techpay - техническая оплата499 payed - юзер сказал что оплачена(я оплатил!)500 realpay - реально оплачена501 verify - оплачена с другого кошелька 502 error - ошибка503 success - выполненая504 505 realdelete - условно(фильтр)506 autodelete507 508hashed - хэш509user_hash - хэш пользователя510bid_locale - локализация511naschet - счет для оплаты512m_in - мертчант приема оплаты513m_out - мерчант автовыплаты514exceed_pay - превышена оплата или нет515hashdata - данные в хэше516*/517 $table_name= $wpdb->prefix ."bids";518 $sql = "CREATE TABLE IF NOT EXISTS $table_name(519 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,520 `createdate` datetime NOT NULL,521 `editdate` datetime NOT NULL, 522 `naps_id` bigint(20) NOT NULL default '0',523 `curs1` varchar(50) NOT NULL default '0',524 `curs2` varchar(50) NOT NULL default '0', 525 `valut1` longtext NOT NULL,526 `valut2` longtext NOT NULL,527 `valut1i` bigint(20) NOT NULL default '0',528 `valut2i` bigint(20) NOT NULL default '0',529 `vtype1` varchar(35) NOT NULL,530 `vtype2` varchar(35) NOT NULL,531 `vtype1i` bigint(20) NOT NULL default '0',532 `vtype2i` bigint(20) NOT NULL default '0',533 `psys1i` bigint(20) NOT NULL default '0',534 `psys2i` bigint(20) NOT NULL default '0', 535 `exsum` varchar(50) NOT NULL default '0',536 `summ1` varchar(50) NOT NULL default '0',537 `dop_com1` varchar(50) NOT NULL default '0',538 `summ1_dc` varchar(50) NOT NULL default '0',539 `com_ps1` varchar(50) NOT NULL default '0',540 `summ1c` varchar(50) NOT NULL default '0',541 `summ1cr` varchar(50) NOT NULL default '0',542 `summ2t` varchar(50) NOT NULL default '0',543 `summ2` varchar(50) NOT NULL default '0',544 `dop_com2` varchar(50) NOT NULL default '0',545 `com_ps2` varchar(50) NOT NULL default '0',546 `summ2_dc` varchar(50) NOT NULL default '0',547 `summ2c` varchar(50) NOT NULL default '0',548 `summ2cr` varchar(50) NOT NULL default '0',549 `profit` varchar(50) NOT NULL default '0',550 `user_id` bigint(20) NOT NULL default '0',551 `user_sk` varchar(10) NOT NULL default '0',552 `user_sksumm` varchar(50) NOT NULL default '0',553 `user_ip` varchar(150) NOT NULL,554 `first_name` varchar(150) NOT NULL,555 `last_name` varchar(150) NOT NULL,556 `second_name` varchar(150) NOT NULL,557 `user_phone` varchar(150) NOT NULL,558 `user_skype` varchar(150) NOT NULL,559 `user_email` varchar(150) NOT NULL,560 `user_passport` varchar(250) NOT NULL,561 `metas` longtext NOT NULL,562 `dmetas` longtext NOT NULL,563 `unmetas` longtext NOT NULL,564 `account1` varchar(250) NOT NULL,565 `account2` varchar(250) NOT NULL, 566 `naschet` varchar(250) NOT NULL,567 `soschet` varchar(250) NOT NULL,568 `trans_in` varchar(250) NOT NULL default '0',569 `trans_out` varchar(250) NOT NULL default '0', 570 `status` varchar(35) NOT NULL,571 `hashed` varchar(35) NOT NULL,572 `user_hash` varchar(150) NOT NULL,573 `bid_locale` varchar(10) NOT NULL,574 `m_in` varchar(150) NOT NULL default '0',575 `m_out` varchar(150) NOT NULL default '0',576 `check_purse1` varchar(20) NOT NULL default '0',577 `check_purse2` varchar(20) NOT NULL default '0',578 `exceed_pay` int(1) NOT NULL default '0',579 `hashdata` longtext NOT NULL,580 `touap_date` datetime NOT NULL,581 PRIMARY KEY ( `id` ) 582 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";583 $wpdb->query($sql); 584 585/*586мета587comment_user - комментарий для юзера588comment_admin - комментарий для админа589device - 0-веб, 1-мобильная версия590new - новичок или нет591pay_sum - сумма оплаты592pay_ac - аккаунт с которого оплатили593*/ 594 $table_name= $wpdb->prefix ."bids_meta";595 $sql = "CREATE TABLE IF NOT EXISTS $table_name(596 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT ,597 `item_id` bigint(20) NOT NULL default '0',598 `meta_key` longtext NOT NULL,599 `meta_value` longtext NOT NULL,600 PRIMARY KEY ( `id` ) 601 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";602 $wpdb->query($sql); 603 do_action('pn_bd_activated'); ...

Full Screen

Full Screen

RedBeanModelToTableSchemaAdapterTest.php

Source:RedBeanModelToTableSchemaAdapterTest.php Github

copy

Full Screen

...23 * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive24 * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.25 *26 * The interactive user interfaces in original and modified versions27 * of this program must display Appropriate Legal Notices, as required under28 * Section 5 of the GNU Affero General Public License version 3.29 *30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,31 * these Appropriate Legal Notices must retain the display of the Zurmo32 * logo and Zurmo copyright notice. If the display of the logo is not reasonably33 * feasible for technical reasons, the Appropriate Legal Notices must display the words34 * "Copyright Zurmo Inc. 2014. All rights reserved".35 ********************************************************************************/36 class RedBeanModelToTableSchemaAdapterTest extends BaseTest37 {38 protected static $messageLogger;39 public static function setUpBeforeClass()40 {41 parent::setUpBeforeClass();42 SecurityTestHelper::createSuperAdmin();43 $super = User::getByUsername('super');44 Yii::app()->user->userModel = $super;45 static::$messageLogger = new MessageLogger();46 }47 public function testResolveWithEmptyModelClassName()48 {49 $modelClassName = null;50 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);51 $this->assertFalse($schema);52 }53 /**54 * @depends testResolveWithEmptyModelClassName55 */56 public function testResolveWithInexistentModelClassName()57 {58 $modelClassName = 'ModelClass';59 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);60 $this->assertFalse($schema);61 }62 /**63 * @depends testResolveWithInexistentModelClassName64 */65 public function testResolveForModelClassWithNoOwnMetadataAndCannotHaveBean()66 {67 $modelClassName = 'MashableActivity';68 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);69 $this->assertFalse($schema);70 }71 /**72 * @depends testResolveForModelClassWithNoOwnMetadataAndCannotHaveBean73 */74 public function testResolveForModelClassWithNoOwnMetadataAndCanHaveBean()75 {76 $modelClassName = 'OwnedSecurableItem';77 $expectedSchema = array(78 'ownedsecurableitem' => array(79 'columns' => array(80 array(81 'name' => 'securableitem_id',82 'type' => 'INT(11)',83 'unsigned' => 'UNSIGNED',84 'notNull' => 'NULL', // Not Coding Standard85 'collation' => null,86 'default' => 'DEFAULT NULL', // Not Coding Standard87 ),88 array(89 'name' => 'owner__user_id',90 'type' => 'INT(11)',91 'unsigned' => 'UNSIGNED',92 'notNull' => 'NULL', // Not Coding Standard93 'collation' => null,94 'default' => 'DEFAULT NULL', // Not Coding Standard95 ),96 ),97 'indexes' => array(98 'owner__user_id' => array('columns' => array('owner__user_id'),99 'unique' => false),100 ),101 ),102 );103 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);104 $this->assertNotEmpty($schema);105 $this->assertEquals($expectedSchema, $schema);106 }107 /**108 * @depends testResolveForModelClassWithNoOwnMetadataAndCanHaveBean109 */110 public function testResolve()111 {112 $expectedSchema = array('_user' =>113 array('columns' =>114 array(115 array(116 'name' => 'hash',117 'type' => 'VARCHAR(60)',118 'unsigned' => null,119 'notNull' => 'NULL', // Not Coding Standard120 'collation' => 'COLLATE utf8_unicode_ci',121 'default' => 'DEFAULT NULL', // Not Coding Standard122 ),123 array(124 'name' => 'language',125 'type' => 'VARCHAR(10)',126 'unsigned' => null,127 'notNull' => 'NULL', // Not Coding Standard128 'collation' => 'COLLATE utf8_unicode_ci',129 'default' => 'DEFAULT NULL', // Not Coding Standard130 ),131 array(132 'name' => 'locale',133 'type' => 'VARCHAR(10)',134 'unsigned' => null,135 'notNull' => 'NULL', // Not Coding Standard136 'collation' => 'COLLATE utf8_unicode_ci',137 'default' => 'DEFAULT NULL', // Not Coding Standard138 ),139 array(140 'name' => 'timezone',141 'type' => 'VARCHAR(64)',142 'unsigned' => null,143 'notNull' => 'NULL', // Not Coding Standard144 'collation' => 'COLLATE utf8_unicode_ci',145 'default' => 'DEFAULT NULL', // Not Coding Standard146 ),147 array(148 'name' => 'username',149 'type' => 'VARCHAR(64)',150 'unsigned' => null,151 'notNull' => 'NULL', // Not Coding Standard152 'collation' => 'COLLATE utf8_unicode_ci',153 'default' => 'DEFAULT NULL', // Not Coding Standard154 ),155 array(156 'name' => 'serializedavatardata',157 'type' => 'TEXT',158 'unsigned' => null,159 'notNull' => 'NULL', // Not Coding Standard160 'collation' => 'COLLATE utf8_unicode_ci',161 'default' => 'DEFAULT NULL', // Not Coding Standard162 ),163 array(164 'name' => 'isactive',165 'type' => 'TINYINT(1) UNSIGNED',166 'unsigned' => null,167 'notNull' => 'NULL', // Not Coding Standard168 'collation' => null,169 'default' => 'DEFAULT NULL', // Not Coding Standard170 ),171 array(172 'name' => 'isrootuser',173 'type' => 'TINYINT(1) UNSIGNED',174 'unsigned' => null,175 'notNull' => 'NULL', // Not Coding Standard176 'collation' => null,177 'default' => 'DEFAULT NULL', // Not Coding Standard178 ),179 array(180 'name' => 'hidefromselecting',181 'type' => 'TINYINT(1) UNSIGNED',182 'unsigned' => null,183 'notNull' => 'NULL', // Not Coding Standard184 'collation' => null,185 'default' => 'DEFAULT NULL', // Not Coding Standard186 ),187 array(188 'name' => 'issystemuser',189 'type' => 'TINYINT(1) UNSIGNED',190 'unsigned' => null,191 'notNull' => 'NULL', // Not Coding Standard192 'collation' => null,193 'default' => 'DEFAULT NULL', // Not Coding Standard194 ),195 array(196 'name' => 'hidefromleaderboard',197 'type' => 'TINYINT(1) UNSIGNED',198 'unsigned' => null,199 'notNull' => 'NULL', // Not Coding Standard200 'collation' => null,201 'default' => 'DEFAULT NULL', // Not Coding Standard202 ),203 array(204 'name' => 'lastlogindatetime',205 'type' => 'DATETIME',206 'unsigned' => null,207 'notNull' => 'NULL', // Not Coding Standard208 'collation' => null,209 'default' => 'DEFAULT NULL', // Not Coding Standard210 ),211 array(212 'name' => 'permitable_id',213 'type' => 'INT(11)',214 'unsigned' => 'UNSIGNED',215 'notNull' => 'NULL', // Not Coding Standard216 'collation' => null,217 'default' => 'DEFAULT NULL', // Not Coding Standard218 ),219 array(220 'name' => 'person_id',221 'type' => 'INT(11)',222 'unsigned' => 'UNSIGNED',223 'notNull' => 'NULL', // Not Coding Standard224 'collation' => null,225 'default' => 'DEFAULT NULL', // Not Coding Standard226 ),227 array(228 'name' => 'currency_id',229 'type' => 'INT(11)',230 'unsigned' => 'UNSIGNED',231 'notNull' => 'NULL', // Not Coding Standard232 'collation' => null,233 'default' => 'DEFAULT NULL', // Not Coding Standard234 ),235 array(236 'name' => 'manager__user_id',237 'type' => 'INT(11)',238 'unsigned' => 'UNSIGNED',239 'notNull' => 'NULL', // Not Coding Standard240 'collation' => null,241 'default' => 'DEFAULT NULL', // Not Coding Standard242 ),243 array(244 'name' => 'role_id',245 'type' => 'INT(11)',246 'unsigned' => 'UNSIGNED',247 'notNull' => 'NULL', // Not Coding Standard248 'collation' => null,249 'default' => 'DEFAULT NULL', // Not Coding Standard250 ),251 ),252 'indexes' => array(253 'unique_emanresu' => array(254 'columns' => array('username'),255 'unique' => true,256 ),257 'permitable_id' => array('columns' => array('permitable_id'),258 'unique' => false),259 ),260 ),261 );262 $modelClassName = 'User';263 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);264 $this->assertNotEmpty($schema);265 $this->assertEquals($expectedSchema, $schema);266 }267 /**268 * @depends testResolve269 */270 public function testResolveForTestModel()271 {272 $expectedSchema = array('emailtemplatemodeltestitem' => array(273 'columns' => array(274 array(275 'name' => 'firstname',276 'type' => 'VARCHAR(32)',277 'unsigned' => null,278 'notNull' => 'NULL', // Not Coding Standard279 'collation' => 'COLLATE utf8_unicode_ci',280 'default' => 'DEFAULT NULL', // Not Coding Standard281 ),282 array(283 'name' => 'lastname',284 'type' => 'VARCHAR(32)',285 'unsigned' => null,286 'notNull' => 'NULL', // Not Coding Standard287 'collation' => 'COLLATE utf8_unicode_ci',288 'default' => 'DEFAULT NULL', // Not Coding Standard289 ),290 array(291 'name' => 'boolean',292 'type' => 'TINYINT(1) UNSIGNED',293 'unsigned' => null,294 'notNull' => 'NULL', // Not Coding Standard295 'collation' => null,296 'default' => 'DEFAULT NULL', // Not Coding Standard297 ),298 array(299 'name' => 'boolean2',300 'type' => 'TINYINT(1) UNSIGNED',301 'unsigned' => null,302 'notNull' => 'NULL', // Not Coding Standard303 'collation' => null,304 'default' => 'DEFAULT NULL', // Not Coding Standard305 ),306 array(307 'name' => 'date',308 'type' => 'DATE',309 'unsigned' => null,310 'notNull' => 'NULL', // Not Coding Standard311 'collation' => null,312 'default' => 'DEFAULT NULL', // Not Coding Standard313 ),314 array(315 'name' => 'date2',316 'type' => 'DATE',317 'unsigned' => null,318 'notNull' => 'NULL', // Not Coding Standard319 'collation' => null,320 'default' => 'DEFAULT NULL', // Not Coding Standard321 ),322 array(323 'name' => 'date3',324 'type' => 'DATE',325 'unsigned' => null,326 'notNull' => 'NULL', // Not Coding Standard327 'collation' => null,328 'default' => 'DEFAULT NULL', // Not Coding Standard329 ),330 array(331 'name' => 'date4',332 'type' => 'DATE',333 'unsigned' => null,334 'notNull' => 'NULL', // Not Coding Standard335 'collation' => null,336 'default' => 'DEFAULT NULL', // Not Coding Standard337 ),338 array(339 'name' => 'datetime',340 'type' => 'DATETIME',341 'unsigned' => null,342 'notNull' => 'NULL', // Not Coding Standard343 'collation' => null,344 'default' => 'DEFAULT NULL', // Not Coding Standard345 ),346 array(347 'name' => 'datetime2',348 'type' => 'DATETIME',349 'unsigned' => null,350 'notNull' => 'NULL', // Not Coding Standard351 'collation' => null,352 'default' => 'DEFAULT NULL', // Not Coding Standard353 ),354 array(355 'name' => 'datetime3',356 'type' => 'DATETIME',357 'unsigned' => null,358 'notNull' => 'NULL', // Not Coding Standard359 'collation' => null,360 'default' => 'DEFAULT NULL', // Not Coding Standard361 ),362 array(363 'name' => 'datetime4',364 'type' => 'DATETIME',365 'unsigned' => null,366 'notNull' => 'NULL', // Not Coding Standard367 'collation' => null,368 'default' => 'DEFAULT NULL', // Not Coding Standard369 ),370 array(371 'name' => 'float',372 'type' => 'DOUBLE',373 'unsigned' => null,374 'notNull' => 'NULL', // Not Coding Standard375 'collation' => null,376 'default' => 'DEFAULT NULL', // Not Coding Standard377 ),378 array(379 'name' => 'integer',380 'type' => 'INT(11)',381 'unsigned' => null,382 'notNull' => 'NULL', // Not Coding Standard383 'collation' => null,384 'default' => 'DEFAULT NULL', // Not Coding Standard385 ),386 array(387 'name' => 'phone',388 'type' => 'VARCHAR(14)',389 'unsigned' => null,390 'notNull' => 'NULL', // Not Coding Standard391 'collation' => 'COLLATE utf8_unicode_ci',392 'default' => 'DEFAULT NULL', // Not Coding Standard393 ),394 array(395 'name' => 'string',396 'type' => 'VARCHAR(64)',397 'unsigned' => null,398 'notNull' => 'NULL', // Not Coding Standard399 'collation' => 'COLLATE utf8_unicode_ci',400 'default' => 'DEFAULT NULL', // Not Coding Standard401 ),402 array(403 'name' => 'textarea',404 'type' => 'TEXT',405 'unsigned' => null,406 'notNull' => 'NULL', // Not Coding Standard407 'collation' => 'COLLATE utf8_unicode_ci',408 'default' => 'DEFAULT NULL', // Not Coding Standard409 ),410 array(411 'name' => 'url',412 'type' => 'VARCHAR(255)',413 'unsigned' => null,414 'notNull' => 'NULL', // Not Coding Standard415 'collation' => 'COLLATE utf8_unicode_ci',416 'default' => 'DEFAULT NULL', // Not Coding Standard417 ),418 array(419 'name' => 'ownedsecurableitem_id',420 'type' => 'INT(11)',421 'unsigned' => 'UNSIGNED',422 'notNull' => 'NULL', // Not Coding Standard423 'collation' => null,424 'default' => 'DEFAULT NULL', // Not Coding Standard425 ),426 array(427 'name' => 'currencyvalue_id',428 'type' => 'INT(11)',429 'unsigned' => 'UNSIGNED',430 'notNull' => 'NULL', // Not Coding Standard431 'collation' => null,432 'default' => 'DEFAULT NULL', // Not Coding Standard433 ),434 array(435 'name' => 'dropdown_customfield_id',436 'type' => 'INT(11)',437 'unsigned' => 'UNSIGNED',438 'notNull' => 'NULL', // Not Coding Standard439 'collation' => null,440 'default' => 'DEFAULT NULL', // Not Coding Standard441 ),442 array(443 'name' => 'dropdown2_customfield_id',444 'type' => 'INT(11)',445 'unsigned' => 'UNSIGNED',446 'notNull' => 'NULL', // Not Coding Standard447 'collation' => null,448 'default' => 'DEFAULT NULL', // Not Coding Standard449 ),450 array(451 'name' => 'radiodropdown_customfield_id',452 'type' => 'INT(11)',453 'unsigned' => 'UNSIGNED',454 'notNull' => 'NULL', // Not Coding Standard455 'collation' => null,456 'default' => 'DEFAULT NULL', // Not Coding Standard457 ),458 array(459 'name' => 'multidropdown_multiplevaluescustomfield_id',460 'type' => 'INT(11)',461 'unsigned' => 'UNSIGNED',462 'notNull' => 'NULL', // Not Coding Standard463 'collation' => null,464 'default' => 'DEFAULT NULL', // Not Coding Standard465 ),466 array(467 'name' => 'tagcloud_multiplevaluescustomfield_id',468 'type' => 'INT(11)',469 'unsigned' => 'UNSIGNED',470 'notNull' => 'NULL', // Not Coding Standard471 'collation' => null,472 'default' => 'DEFAULT NULL', // Not Coding Standard473 ),474 array(475 'name' => 'primaryemail_email_id',476 'type' => 'INT(11)',477 'unsigned' => 'UNSIGNED',478 'notNull' => 'NULL', // Not Coding Standard479 'collation' => null,480 'default' => 'DEFAULT NULL', // Not Coding Standard481 ),482 array(483 'name' => 'primaryaddress_address_id',484 'type' => 'INT(11)',485 'unsigned' => 'UNSIGNED',486 'notNull' => 'NULL', // Not Coding Standard487 'collation' => null,488 'default' => 'DEFAULT NULL', // Not Coding Standard489 ),490 array(491 'name' => 'secondaryemail_email_id',492 'type' => 'INT(11)',493 'unsigned' => 'UNSIGNED',494 'notNull' => 'NULL', // Not Coding Standard495 'collation' => null,496 'default' => 'DEFAULT NULL', // Not Coding Standard497 ),498 array(499 'name' => 'likecontactstate_contactstate_id',500 'type' => 'INT(11)',501 'unsigned' => 'UNSIGNED',502 'notNull' => 'NULL', // Not Coding Standard503 'collation' => null,504 'default' => 'DEFAULT NULL', // Not Coding Standard505 ),506 array(507 'name' => '_user_id',508 'type' => 'INT(11)',509 'unsigned' => 'UNSIGNED',510 'notNull' => 'NULL', // Not Coding Standard511 'collation' => null,512 'default' => 'DEFAULT NULL', // Not Coding Standard513 ),514 array(515 'name' => 'user2__user_id',516 'type' => 'INT(11)',517 'unsigned' => 'UNSIGNED',518 'notNull' => 'NULL', // Not Coding Standard519 'collation' => null,520 'default' => 'DEFAULT NULL', // Not Coding Standard521 ),522 ),523 'indexes' => array(),524 ),525 );526 $modelClassName = 'EmailTemplateModelTestItem';527 $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger);528 $this->assertNotEmpty($schema);529 $this->assertEquals($expectedSchema, $schema);530 }531 }532?>...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Mockery automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used methods in Not

Run Selenium Automation Tests on LambdaTest Cloud Grid

Trigger Selenium automation tests on a cloud-based Grid of 3000+ real browsers and operating systems.

Test now for Free

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful