Last active
January 19, 2018 20:41
-
-
Save henriquemoody/ec404f994a87b18c7771 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -e | |
declare DIRECTORY=$(dirname "${BASH_SOURCE}") | |
declare URL="${1}" | |
declare ENTRY=$(echo "${1}" | cut -d '/' -f 4) | |
declare FILE_HTML="${DIRECTORY}/html/${ENTRY}.html" | |
declare FILE_TEXT="${DIRECTORY}/text/${ENTRY}.text" | |
declare NAME_RULE="$(echo ${ENTRY} | sed -E 's,^(.)(.)$,\1\l\2,g')SubdivisionCode" | |
declare NAME_EXCEPTION="${NAME_RULE}Exception" | |
declare FILE_RULE="library/Rules/SubdivisionCode/${NAME_RULE}.php" | |
declare FILE_EXCEPTION="library/Exceptions/SubdivisionCode/${NAME_EXCEPTION}.php" | |
mkdir -p \ | |
"${DIRECTORY}/html" \ | |
"${DIRECTORY}/text" \ | |
library/Exceptions/SubdivisionCode \ | |
library/Rules/SubdivisionCode | |
echo "${1}" >> "${DIRECTORY}/history.list" | |
html_download() | |
{ | |
curl -sl "${URL}" -o "${FILE_HTML}" | |
} | |
text_generate() | |
{ | |
egrep '(subdivtable\d|isoSpan|no longer exists|^</table>)' "${FILE_HTML}" | | |
sed -E 's,^.+(subdivtable[0-9]+).+$,\1,g; s,</table>,endtable,g;s,no longer exists:,endtable,g' | | |
sed -E 's#<td>#:#g' | | |
sed -E 's#(<[^>]+>| \;)##g' | | |
cat > "${FILE_TEXT}" | |
} | |
table1_parse() | |
{ | |
sed "1d" "${FILE_TEXT}" | | |
sed -nE "/^subdivtable1/,/^endtable/p" | | |
cut -d ':' -f 3,6 | | |
egrep -v '^(subdivtable1|endtable)$' | |
} | |
table2_parse() | |
{ | |
sed -nE "/^subdivtable2/,/^endtable/p" "${FILE_TEXT}" | | |
cut -d ':' -f 3,7 | | |
egrep -v '^(subdivtable2|endtable)$' | |
} | |
php_array_generate() | |
{ | |
{ | |
table1_parse | |
table2_parse | |
} | egrep '^[^ ]+:.+$' | | |
sed -E 's#^([^:]+):(.+)$# "\1", // \2#g' | | |
sort -u | | |
tr '"' "'" | |
} | |
php_exception_generate() | |
{ | |
echo '<?php' | |
echo | |
echo '/*' | |
echo ' * This file is part of Respect/Validation.' | |
echo ' *' | |
echo ' * (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>' | |
echo ' *' | |
echo ' * For the full copyright and license information, please view the "LICENSE.md"' | |
echo ' * file that was distributed with this source code.' | |
echo ' */' | |
echo | |
echo 'declare(strict_types=1);' | |
echo | |
echo 'namespace Respect\Validation\Exceptions\SubdivisionCode;' | |
echo | |
echo 'use Respect\Validation\Exceptions\SubdivisionCodeException;' | |
echo | |
echo '/**' | |
echo " * Exception class for subdivision codes of ${COUNTRY}." | |
echo " *" | |
echo " * ISO 3166-1 alpha-2: ${ENTRY}" | |
echo " *" | |
echo " * @author Henrique Moody <henriquemoody@gmail.com>" | |
echo " */" | |
echo "final class ${NAME_EXCEPTION} extends SubdivisionCodeException" | |
echo "{" | |
echo " /**" | |
echo " * {@inheritdoc}" | |
echo " */" | |
echo " public static \$defaultTemplates = [" | |
echo " self::MODE_DEFAULT => [" | |
echo " self::STANDARD => '{{name}} must be a subdivision code of ${COUNTRY}'," | |
echo " ]," | |
echo " self::MODE_NEGATIVE => [" | |
echo " self::STANDARD => '{{name}} must not be a subdivision code of ${COUNTRY}'," | |
echo " ]," | |
echo " ];" | |
echo "}" | |
} | |
php_rule_generate() | |
{ | |
declare haystack=""; | |
declare generated=$(php_array_generate); | |
if [[ ! -z "${generated}" ]]; then | |
haystack="\n${generated}\n " | |
fi | |
echo '<?php' | |
echo | |
echo '/*' | |
echo ' * This file is part of Respect/Validation.' | |
echo ' *' | |
echo ' * (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>' | |
echo ' *' | |
echo ' * For the full copyright and license information, please view the "LICENSE.md"' | |
echo ' * file that was distributed with this source code.' | |
echo ' */' | |
echo | |
echo 'declare(strict_types=1);' | |
echo | |
echo 'namespace Respect\Validation\Rules\SubdivisionCode;' | |
echo | |
echo 'use Respect\Validation\Rules\AbstractSearcher;' | |
echo | |
echo '/**' | |
echo " * Validates whether an input is subdivision code of ${COUNTRY} or not." | |
echo " *" | |
echo " * ISO 3166-1 alpha-2: ${ENTRY}" | |
echo " *" | |
echo " * @see ${URL}" | |
echo " *" | |
echo " * @author Henrique Moody <henriquemoody@gmail.com>" | |
echo " */" | |
echo "final class ${NAME_RULE} extends AbstractSearcher" | |
echo "{" | |
echo " /**" | |
echo " * {@inheritdoc}" | |
echo " */" | |
echo " protected function getDataSource(): array" | |
echo " {" | |
echo -e " return [${haystack}];" | |
echo " }" | |
echo "}" | |
} | |
if [[ ! -f "${FILE_HTML}" ]]; then | |
html_download | |
fi | |
declare COUNTRY=$(grep '<title>' "${FILE_HTML}" | sed -E 's,<title>Administrative Division of (.*)</title>,\1,g') | |
if [[ -z "${COUNTRY}" ]]; then | |
COUNTRY=$(echo "${1}" | sed -E 's,^.+administrative-division-([^.]+).html$,\u\1,g; s,-(.), \u\1,g') | |
fi | |
text_generate | |
php_rule_generate > "${FILE_RULE}" | |
php_exception_generate > "${FILE_EXCEPTION}" | |
php -l "${FILE_RULE}" | |
php -l "${FILE_EXCEPTION}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http://www.geonames.org/AD/administrative-division-andorra.html | |
http://www.geonames.org/AE/administrative-division-united-arab-emirates.html | |
http://www.geonames.org/AF/administrative-division-afghanistan.html | |
http://www.geonames.org/AG/administrative-division-antigua-and-barbuda.html | |
http://www.geonames.org/AI/administrative-division-anguilla.html | |
http://www.geonames.org/AL/administrative-division-albania.html | |
http://www.geonames.org/AM/administrative-division-armenia.html | |
http://www.geonames.org/AN/administrative-division-netherlands-antilles.html | |
http://www.geonames.org/AO/administrative-division-angola.html | |
http://www.geonames.org/AQ/administrative-division-antarctica.html | |
http://www.geonames.org/AR/administrative-division-argentina.html | |
http://www.geonames.org/AS/administrative-division-american-samoa.html | |
http://www.geonames.org/AT/administrative-division-austria.html | |
http://www.geonames.org/AU/administrative-division-australia.html | |
http://www.geonames.org/AW/administrative-division-aruba.html | |
http://www.geonames.org/AX/administrative-division-aland.html | |
http://www.geonames.org/AZ/administrative-division-azerbaijan.html | |
http://www.geonames.org/BA/administrative-division-bosnia-and-herzegovina.html | |
http://www.geonames.org/BB/administrative-division-barbados.html | |
http://www.geonames.org/BD/administrative-division-bangladesh.html | |
http://www.geonames.org/BE/administrative-division-belgium.html | |
http://www.geonames.org/BF/administrative-division-burkina-faso.html | |
http://www.geonames.org/BG/administrative-division-bulgaria.html | |
http://www.geonames.org/BH/administrative-division-bahrain.html | |
http://www.geonames.org/BI/administrative-division-burundi.html | |
http://www.geonames.org/BJ/administrative-division-benin.html | |
http://www.geonames.org/BL/administrative-division-saint-barthelemy.html | |
http://www.geonames.org/BM/administrative-division-bermuda.html | |
http://www.geonames.org/BN/administrative-division-brunei.html | |
http://www.geonames.org/BO/administrative-division-bolivia.html | |
http://www.geonames.org/BQ/administrative-division-bonaire.html | |
http://www.geonames.org/BR/administrative-division-brazil.html | |
http://www.geonames.org/BS/administrative-division-bahamas.html | |
http://www.geonames.org/BT/administrative-division-bhutan.html | |
http://www.geonames.org/BV/administrative-division-bouvet-island.html | |
http://www.geonames.org/BW/administrative-division-botswana.html | |
http://www.geonames.org/BY/administrative-division-belarus.html | |
http://www.geonames.org/BZ/administrative-division-belize.html | |
http://www.geonames.org/CA/administrative-division-canada.html | |
http://www.geonames.org/CC/administrative-division-cocos-islands.html | |
http://www.geonames.org/CD/administrative-division-democratic-republic-of-the-congo.html | |
http://www.geonames.org/CF/administrative-division-central-african-republic.html | |
http://www.geonames.org/CG/administrative-division-republic-of-the-congo.html | |
http://www.geonames.org/CH/administrative-division-switzerland.html | |
http://www.geonames.org/CI/administrative-division-ivory-coast.html | |
http://www.geonames.org/CK/administrative-division-cook-islands.html | |
http://www.geonames.org/CL/administrative-division-chile.html | |
http://www.geonames.org/CM/administrative-division-cameroon.html | |
http://www.geonames.org/CN/administrative-division-china.html | |
http://www.geonames.org/CO/administrative-division-colombia.html | |
http://www.geonames.org/CR/administrative-division-costa-rica.html | |
http://www.geonames.org/CS/administrative-division-serbia-and-montenegro.html | |
http://www.geonames.org/CU/administrative-division-cuba.html | |
http://www.geonames.org/CV/administrative-division-cape-verde.html | |
http://www.geonames.org/CW/administrative-division-curacao.html | |
http://www.geonames.org/CX/administrative-division-christmas-island.html | |
http://www.geonames.org/CY/administrative-division-cyprus.html | |
http://www.geonames.org/CZ/administrative-division-czech-republic.html | |
http://www.geonames.org/DE/administrative-division-germany.html | |
http://www.geonames.org/DJ/administrative-division-djibouti.html | |
http://www.geonames.org/DK/administrative-division-denmark.html | |
http://www.geonames.org/DM/administrative-division-dominica.html | |
http://www.geonames.org/DO/administrative-division-dominican-republic.html | |
http://www.geonames.org/DZ/administrative-division-algeria.html | |
http://www.geonames.org/EC/administrative-division-ecuador.html | |
http://www.geonames.org/EE/administrative-division-estonia.html | |
http://www.geonames.org/EG/administrative-division-egypt.html | |
http://www.geonames.org/EH/administrative-division-western-sahara.html | |
http://www.geonames.org/ER/administrative-division-eritrea.html | |
http://www.geonames.org/ES/administrative-division-spain.html | |
http://www.geonames.org/ET/administrative-division-ethiopia.html | |
http://www.geonames.org/FI/administrative-division-finland.html | |
http://www.geonames.org/FJ/administrative-division-fiji.html | |
http://www.geonames.org/FK/administrative-division-falkland-islands.html | |
http://www.geonames.org/FM/administrative-division-micronesia.html | |
http://www.geonames.org/FO/administrative-division-faroe-islands.html | |
http://www.geonames.org/FR/administrative-division-france.html | |
http://www.geonames.org/GA/administrative-division-gabon.html | |
http://www.geonames.org/GB/administrative-division-united-kingdom.html | |
http://www.geonames.org/GD/administrative-division-grenada.html | |
http://www.geonames.org/GE/administrative-division-georgia.html | |
http://www.geonames.org/GF/administrative-division-french-guiana.html | |
http://www.geonames.org/GG/administrative-division-guernsey.html | |
http://www.geonames.org/GH/administrative-division-ghana.html | |
http://www.geonames.org/GI/administrative-division-gibraltar.html | |
http://www.geonames.org/GL/administrative-division-greenland.html | |
http://www.geonames.org/GM/administrative-division-gambia.html | |
http://www.geonames.org/GN/administrative-division-guinea.html | |
http://www.geonames.org/GP/administrative-division-guadeloupe.html | |
http://www.geonames.org/GQ/administrative-division-equatorial-guinea.html | |
http://www.geonames.org/GR/administrative-division-greece.html | |
http://www.geonames.org/GS/administrative-division-south-georgia-and-the-south-sandwich-islands.html | |
http://www.geonames.org/GT/administrative-division-guatemala.html | |
http://www.geonames.org/GU/administrative-division-guam.html | |
http://www.geonames.org/GW/administrative-division-guinea-bissau.html | |
http://www.geonames.org/GY/administrative-division-guyana.html | |
http://www.geonames.org/HK/administrative-division-hong-kong.html | |
http://www.geonames.org/HM/administrative-division-heard-island-and-mcdonald-islands.html | |
http://www.geonames.org/HN/administrative-division-honduras.html | |
http://www.geonames.org/HR/administrative-division-croatia.html | |
http://www.geonames.org/HT/administrative-division-haiti.html | |
http://www.geonames.org/HU/administrative-division-hungary.html | |
http://www.geonames.org/ID/administrative-division-indonesia.html | |
http://www.geonames.org/IE/administrative-division-ireland.html | |
http://www.geonames.org/IL/administrative-division-israel.html | |
http://www.geonames.org/IM/administrative-division-isle-of-man.html | |
http://www.geonames.org/IN/administrative-division-india.html | |
http://www.geonames.org/IO/administrative-division-british-indian-ocean-territory.html | |
http://www.geonames.org/IQ/administrative-division-iraq.html | |
http://www.geonames.org/IR/administrative-division-iran.html | |
http://www.geonames.org/IS/administrative-division-iceland.html | |
http://www.geonames.org/IT/administrative-division-italy.html | |
http://www.geonames.org/JE/administrative-division-jersey.html | |
http://www.geonames.org/JM/administrative-division-jamaica.html | |
http://www.geonames.org/JO/administrative-division-jordan.html | |
http://www.geonames.org/JP/administrative-division-japan.html | |
http://www.geonames.org/KE/administrative-division-kenya.html | |
http://www.geonames.org/KG/administrative-division-kyrgyzstan.html | |
http://www.geonames.org/KH/administrative-division-cambodia.html | |
http://www.geonames.org/KI/administrative-division-kiribati.html | |
http://www.geonames.org/KM/administrative-division-comoros.html | |
http://www.geonames.org/KN/administrative-division-saint-kitts-and-nevis.html | |
http://www.geonames.org/KP/administrative-division-north-korea.html | |
http://www.geonames.org/KR/administrative-division-south-korea.html | |
http://www.geonames.org/KW/administrative-division-kuwait.html | |
http://www.geonames.org/KY/administrative-division-cayman-islands.html | |
http://www.geonames.org/KZ/administrative-division-kazakhstan.html | |
http://www.geonames.org/LA/administrative-division-laos.html | |
http://www.geonames.org/LB/administrative-division-lebanon.html | |
http://www.geonames.org/LC/administrative-division-saint-lucia.html | |
http://www.geonames.org/LI/administrative-division-liechtenstein.html | |
http://www.geonames.org/LK/administrative-division-sri-lanka.html | |
http://www.geonames.org/LR/administrative-division-liberia.html | |
http://www.geonames.org/LS/administrative-division-lesotho.html | |
http://www.geonames.org/LT/administrative-division-lithuania.html | |
http://www.geonames.org/LU/administrative-division-luxembourg.html | |
http://www.geonames.org/LV/administrative-division-latvia.html | |
http://www.geonames.org/LY/administrative-division-libya.html | |
http://www.geonames.org/MA/administrative-division-morocco.html | |
http://www.geonames.org/MC/administrative-division-monaco.html | |
http://www.geonames.org/MD/administrative-division-moldova.html | |
http://www.geonames.org/ME/administrative-division-montenegro.html | |
http://www.geonames.org/MF/administrative-division-saint-martin.html | |
http://www.geonames.org/MG/administrative-division-madagascar.html | |
http://www.geonames.org/MH/administrative-division-marshall-islands.html | |
http://www.geonames.org/MK/administrative-division-macedonia.html | |
http://www.geonames.org/ML/administrative-division-mali.html | |
http://www.geonames.org/MM/administrative-division-myanmar.html | |
http://www.geonames.org/MN/administrative-division-mongolia.html | |
http://www.geonames.org/MO/administrative-division-macao.html | |
http://www.geonames.org/MP/administrative-division-northern-mariana-islands.html | |
http://www.geonames.org/MQ/administrative-division-martinique.html | |
http://www.geonames.org/MR/administrative-division-mauritania.html | |
http://www.geonames.org/MS/administrative-division-montserrat.html | |
http://www.geonames.org/MT/administrative-division-malta.html | |
http://www.geonames.org/MU/administrative-division-mauritius.html | |
http://www.geonames.org/MV/administrative-division-maldives.html | |
http://www.geonames.org/MW/administrative-division-malawi.html | |
http://www.geonames.org/MX/administrative-division-mexico.html | |
http://www.geonames.org/MY/administrative-division-malaysia.html | |
http://www.geonames.org/MZ/administrative-division-mozambique.html | |
http://www.geonames.org/NA/administrative-division-namibia.html | |
http://www.geonames.org/NC/administrative-division-new-caledonia.html | |
http://www.geonames.org/NE/administrative-division-niger.html | |
http://www.geonames.org/NF/administrative-division-norfolk-island.html | |
http://www.geonames.org/NG/administrative-division-nigeria.html | |
http://www.geonames.org/NI/administrative-division-nicaragua.html | |
http://www.geonames.org/NL/administrative-division-netherlands.html | |
http://www.geonames.org/NO/administrative-division-norway.html | |
http://www.geonames.org/NP/administrative-division-nepal.html | |
http://www.geonames.org/NR/administrative-division-nauru.html | |
http://www.geonames.org/NU/administrative-division-niue.html | |
http://www.geonames.org/NZ/administrative-division-new-zealand.html | |
http://www.geonames.org/OM/administrative-division-oman.html | |
http://www.geonames.org/PA/administrative-division-panama.html | |
http://www.geonames.org/PE/administrative-division-peru.html | |
http://www.geonames.org/PF/administrative-division-french-polynesia.html | |
http://www.geonames.org/PG/administrative-division-papua-new-guinea.html | |
http://www.geonames.org/PH/administrative-division-philippines.html | |
http://www.geonames.org/PK/administrative-division-pakistan.html | |
http://www.geonames.org/PL/administrative-division-poland.html | |
http://www.geonames.org/PM/administrative-division-saint-pierre-and-miquelon.html | |
http://www.geonames.org/PN/administrative-division-pitcairn-islands.html | |
http://www.geonames.org/PR/administrative-division-puerto-rico.html | |
http://www.geonames.org/PS/administrative-division-palestine.html | |
http://www.geonames.org/PT/administrative-division-portugal.html | |
http://www.geonames.org/PW/administrative-division-palau.html | |
http://www.geonames.org/PY/administrative-division-paraguay.html | |
http://www.geonames.org/QA/administrative-division-qatar.html | |
http://www.geonames.org/RE/administrative-division-reunion.html | |
http://www.geonames.org/RO/administrative-division-romania.html | |
http://www.geonames.org/RS/administrative-division-serbia.html | |
http://www.geonames.org/RU/administrative-division-russia.html | |
http://www.geonames.org/RW/administrative-division-rwanda.html | |
http://www.geonames.org/SA/administrative-division-saudi-arabia.html | |
http://www.geonames.org/SB/administrative-division-solomon-islands.html | |
http://www.geonames.org/SC/administrative-division-seychelles.html | |
http://www.geonames.org/SD/administrative-division-sudan.html | |
http://www.geonames.org/SE/administrative-division-sweden.html | |
http://www.geonames.org/SG/administrative-division-singapore.html | |
http://www.geonames.org/SH/administrative-division-saint-helena.html | |
http://www.geonames.org/SI/administrative-division-slovenia.html | |
http://www.geonames.org/SJ/administrative-division-svalbard-and-jan-mayen.html | |
http://www.geonames.org/SK/administrative-division-slovakia.html | |
http://www.geonames.org/SL/administrative-division-sierra-leone.html | |
http://www.geonames.org/SM/administrative-division-san-marino.html | |
http://www.geonames.org/SN/administrative-division-senegal.html | |
http://www.geonames.org/SO/administrative-division-somalia.html | |
http://www.geonames.org/SR/administrative-division-suriname.html | |
http://www.geonames.org/SS/administrative-division-south-sudan.html | |
http://www.geonames.org/ST/administrative-division-sao-tome-and-principe.html | |
http://www.geonames.org/SV/administrative-division-el-salvador.html | |
http://www.geonames.org/SX/administrative-division-sint-maarten.html | |
http://www.geonames.org/SY/administrative-division-syria.html | |
http://www.geonames.org/SZ/administrative-division-swaziland.html | |
http://www.geonames.org/TC/administrative-division-turks-and-caicos-islands.html | |
http://www.geonames.org/TD/administrative-division-chad.html | |
http://www.geonames.org/TF/administrative-division-french-southern-territories.html | |
http://www.geonames.org/TG/administrative-division-togo.html | |
http://www.geonames.org/TH/administrative-division-thailand.html | |
http://www.geonames.org/TJ/administrative-division-tajikistan.html | |
http://www.geonames.org/TK/administrative-division-tokelau.html | |
http://www.geonames.org/TL/administrative-division-east-timor.html | |
http://www.geonames.org/TM/administrative-division-turkmenistan.html | |
http://www.geonames.org/TN/administrative-division-tunisia.html | |
http://www.geonames.org/TO/administrative-division-tonga.html | |
http://www.geonames.org/TR/administrative-division-turkey.html | |
http://www.geonames.org/TT/administrative-division-trinidad-and-tobago.html | |
http://www.geonames.org/TV/administrative-division-tuvalu.html | |
http://www.geonames.org/TW/administrative-division-taiwan.html | |
http://www.geonames.org/TZ/administrative-division-tanzania.html | |
http://www.geonames.org/UA/administrative-division-ukraine.html | |
http://www.geonames.org/UG/administrative-division-uganda.html | |
http://www.geonames.org/UM/administrative-division-united-states-minor-outlying-islands.html | |
http://www.geonames.org/US/administrative-division-united-states.html | |
http://www.geonames.org/UY/administrative-division-uruguay.html | |
http://www.geonames.org/UZ/administrative-division-uzbekistan.html | |
http://www.geonames.org/VA/administrative-division-vatican-city.html | |
http://www.geonames.org/VC/administrative-division-saint-vincent-and-the-grenadines.html | |
http://www.geonames.org/VE/administrative-division-venezuela.html | |
http://www.geonames.org/VG/administrative-division-british-virgin-islands.html | |
http://www.geonames.org/VI/administrative-division-u-s-virgin-islands.html | |
http://www.geonames.org/VN/administrative-division-vietnam.html | |
http://www.geonames.org/VU/administrative-division-vanuatu.html | |
http://www.geonames.org/WF/administrative-division-wallis-and-futuna.html | |
http://www.geonames.org/WS/administrative-division-samoa.html | |
http://www.geonames.org/XK/administrative-division-kosovo.html | |
http://www.geonames.org/YE/administrative-division-yemen.html | |
http://www.geonames.org/YT/administrative-division-mayotte.html | |
http://www.geonames.org/ZA/administrative-division-south-africa.html | |
http://www.geonames.org/ZM/administrative-division-zambia.html | |
http://www.geonames.org/ZW/administrative-division-zimbabwe.html |
Author
henriquemoody
commented
Apr 23, 2015
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment