diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-03-01 17:06:26 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-03-03 21:58:31 +0100 |
| commit | e375fdddf7cc608eefdc054d74e90bb95d573172 (patch) | |
| tree | eca3e5b384efdafa184610fae0f30f1898076f98 | |
| parent | e61267217a8ca7e65ad42bf34b6488b92eca6389 (diff) | |
Add lists of ratings.v1.8.9
| -rw-r--r-- | ratings | 1092 | ||||
| -rwxr-xr-x | scripts/update-ratings | 29 | ||||
| -rw-r--r-- | src/rating.cc | 73 | ||||
| -rw-r--r-- | src/rating.h | 27 | ||||
| -rw-r--r-- | src/util.cc | 18 | ||||
| -rw-r--r-- | wscript | 2 |
6 files changed, 1234 insertions, 7 deletions
diff --git a/ratings b/ratings new file mode 100644 index 00000000..32bc3b9b --- /dev/null +++ b/ratings @@ -0,0 +1,1092 @@ +http://www.movielabs.com/md/ratings/AE/NMC-G/0 +MOI-G +United Arab Emirates +AE +7 +12 +18 +21 +3 +16 +http://www.movielabs.com/md/ratings/AE/NMC/0 +MOI +United Arab Emirates +AE +PG +G +PG13 +PG15 +15+ +18+ +http://www.movielabs.com/md/ratings/AR/INCAA/0 +INCAA +Argentina +AR +Todo público +mayores de 13 +mayores de 16 +mayores de 18 +condicionada +http://www.movielabs.com/md/ratings/AT/BMUKK/2 +BMUKK +Austria +AT +Freigaben für alle Altersstufen +Freigaben ab 6 Jahren +Freigaben ab 8 Jahren +Freigaben ab 10 Jahren +Freigaben ab 12 Jahren +Freigaben ab 14 Jahren +Freigaben ab 16 Jahren +http://www.movielabs.com/md/ratings/AU/ACMA/1 +ACMA +Australia +AU +The General (G) Classification +The Parental Guidance Recommended (PG) Classification +Children +Preschool +The Mature (M) Classification +The Mature Audience (MA) Classification +http://www.movielabs.com/md/ratings/AU/NCS/1 +NCS +Australia +AU +General (G) +Parental Guidance (PG) +Mature (M) +Mature Accompanied (MA 15+) +Restricted (R 18+) +Check the Classification (CTC) +Restricted (X 18+) +Refused Classification (RC) +http://www.movielabs.com/md/ratings/BE/CICF/1 +CICF +Belgium +BE +Exempt +Kinderen Toegelaten +Kinderen Niet Toegelaten +http://www.movielabs.com/md/ratings/BE/CSA/1 +CSA +Belgium/Wallonie +BE +déconseillés aux moins de 10 ans +déconseillés aux moins de 12 ans +déconseillés aux moins de 16 ans +déconseillés aux moins de 18 ans +interdits +http://www.movielabs.com/md/ratings/BE/PEGI/0 +PEGI +Belgium +BE +PEGI OK +PEGI 3 +PEGI 7 +PEGI 12 +PEGI 16 +PEGI 18 +http://www.movielabs.com/md/ratings/BG/NFRC/3 +NFRC +Bulgaria +BG +A +B +C +D +X +http://www.movielabs.com/md/ratings/BH/MIA/0 +MIA +Bahrain +BH +PG +G +PG-13 +PG-15 +15+ +18+ +http://www.movielabs.com/md/ratings/BN/Film/0 +Film +Brunei Darussalam +BN +U +A/PG +X +http://www.movielabs.com/md/ratings/BO/Film/0 +Film +Bolivia +BO +Todo público +14 +16 +18 +http://www.movielabs.com/md/ratings/BR/DJCTQ/5 +DJCTQ +Brazil +BR +Especialmente recomendado para crianças e adolescentes +Conteúdo varia de Livre a 14 anos +Conteúdo varia de Livre a 16 anos +Conteúdo varia de Livre a 18 anos +Conteúdo varia de Livre a 10 anos +Livre para todos os públicos +Livre a 12 anos +10 a 14 anos +10 a 12 anos +Não recomendado para menores de 10 anos +10 a 18 anos +10 a 16 anos +12 a 18 anos +12 a 16 anos +12 a 14 anos +Não recomendado para menores de 12 anos +Não recomendado para menores de 14 anos +14 a 18 anos +14 a 16 anos +Não recomendado para menores de 16 anos +16 a 18 anos +Não recomendado para menores de 18 anos +http://www.movielabs.com/md/ratings/BY/IBC/0 +MKRF +Belarus +BY +16+ +18+ +0 +6+ +12+ +http://www.movielabs.com/md/ratings/CA/AFC/2 +AFC +Canada/Alberta +CA +General +Parental Guidance +14 Accompaniment +18 Accompaniment +Restricted +http://www.movielabs.com/md/ratings/CA/CBSC-F/1 +CBSC-F +Canada/Quebec +CA +General +Exempt +8 years and over +13 years and over +16 years and over +18 years and over +Refusal of classification +http://www.movielabs.com/md/ratings/CA/CBSC/2 +CBSC +Canada/Ontario +CA +Children +Exempt +C8 +General +Parental Guidance +Over 14 Years +18 years and older. +http://www.movielabs.com/md/ratings/CA/CHVRS/1 +CHVRS +Canada +CA +E +G +PG +14A +18A +R +http://www.movielabs.com/md/ratings/CA/CPBC-T/2 +CPBC-T +Canada/British Columbia +CA +AP +SP +Restricted +Adult +http://www.movielabs.com/md/ratings/CA/CPBC/2 +CPBC +Canada/British Columbia +CA +General +Parental Guidance +14 Accompaniment +18 Accompaniment +Restricted +Adult +http://www.movielabs.com/md/ratings/CA/MFCB/2 +MFCB +Canada/Prince Edward Island +CA +General +Parental Guidance +14 Accompaniment +18 Accompaniment +Restricted +Adult +Explicit Material +Adult Accompaniment +http://www.movielabs.com/md/ratings/CA/OFRB/2 +OFRB +Canada/Ontario +CA +All +Parental Guidance +14 Accompanied +14 Accompanied +RESTRICTED +http://www.movielabs.com/md/ratings/CA/RCQ/2 +RCQ +Canada/Quebec +CA +General +13 years and over +16 years and over +18 years and over +Refusal of classification +http://www.movielabs.com/md/ratings/CH/Film/2 +Film +Switzerland +CH +Freigegeben ohne Altersbeschränkung (d.h. ab 0 Jahren) +Freigegeben ab 6 Jahren +Accès légal dès 8 ans (cinéma) +Freigegeben ab 10 Jahren (Kino) +Freigegeben ab 12 Jahren +Freigegeben ab 14 Jahren (Kino) +Freigegeben ab 16 Jahren +Freigegeben ab 18 Jahren +http://www.movielabs.com/md/ratings/CL/ANATEL/0 +ANATEL +Chile +CL +Familiar +Infantil +Infantil para mayores de 7 años +Infantil para mayores de 10 años +Infantil para mayores de 12 años +Responsabilidad compartida +Adulto +http://www.movielabs.com/md/ratings/CL/CCC/1 +CCC +Chile +CL +Todo espectador +Mayores de 6 años +Mayores de 14 años +Mayores de 18 años +http://www.movielabs.com/md/ratings/CO/MOC/1 +MOC +Colombia +CO +Exempt +T +7 +12 +15 +18 +X +Banned +http://www.movielabs.com/md/ratings/CR/CCEP/0 +CCEP +Costa Rica +CR +15 +18 +I +TP +TP12 +12 +http://www.movielabs.com/md/ratings/CZ/Film/1 +Film +Czech Republic +CZ +U +12 +14 +15 +18 +http://www.movielabs.com/md/ratings/DE/FSF/1 +FSF +Germany +DE +0 +6 +12 + +16 +18 +X +http://www.movielabs.com/md/ratings/DE/FSK/1 +FSK +Germany +DE +FSK ab 0 freigegeben/Freigegeben ohne Altersbeschränkung +FSK ab 6 freigegeben +FSK ab 12 freigegeben +FSK ab 16 freigegeben +FSK ab 18/Keine Jugendfreigabe +Keine Kennzeichnung +http://www.movielabs.com/md/ratings/DK/MCCYP/1 +MCCYP +Denmark +DK +A +7 +Approval of the film for admittance of children from the age of 11 +Approval of the film for admittance of children from the age of 15 +http://www.movielabs.com/md/ratings/EC/CNE/0 +CNE +Ecuador +EC +Todo público +12 años +15 años +18 años +21 años +http://www.movielabs.com/md/ratings/EC/TV/0 +TV +Ecuador +EC +C +A +B +http://www.movielabs.com/md/ratings/EE/Film/1 +Film +Estonia +EE +PERE +L +MS-6 +K-6 +MS-12 +K-12 +K-14 +K-16 +http://www.movielabs.com/md/ratings/EG/Film/2 +Film +Egypt +EG +16 +GN +12+ +18 +BANNED +http://www.movielabs.com/md/ratings/ES/ICAA/2 +ICAA +Spain +ES +APTA +ER +7 +12 +13 +16 +18 +X +http://www.movielabs.com/md/ratings/FI/MEKU/2 +MEKU +Finland +FI +Sallittu kaikenikäisille +Sallittu yli 7-vuotiaille +Sallittu yli 12-vuotiaille +Förbjudet under 18 år +Förbjudet under 18 år +http://www.movielabs.com/md/ratings/FR/CNC/3 +CNC +France +FR +visa autorisant, pour tous publics, la représentation de l'œuvre +visa comportant interdiction de représentation aux mineurs de douze ans +visa comportant interdiction de représentation aux mineurs de seize ans +visa comportant interdiction de représentation aux mineurs de dix-huit ans +visa comportant interdiction totale de l'œuvre +http://www.movielabs.com/md/ratings/FR/CSA/3 +CSA +France +FR +déconseillés aux moins de 10 ans +déconseillés aux moins de 12 ans +déconseillés aux moins de 16 ans +déconseillés aux moins de 18 ans +interdits +http://www.movielabs.com/md/ratings/GB/BBFC/1 +BBFC +United Kingdom +GB +Universal +Parental Guidance +Accompanied under 12 +12 and Older +15 and Older +18 and Older +RESTRICTED 18 and Older +http://www.movielabs.com/md/ratings/GR/Film/0 +Film +Greece +GR +K +Exempt +K-12 +K-13 +K-15 +K-17 +18+ +http://www.movielabs.com/md/ratings/HK/FCO/1 +FCO +Hong Kong +HK +Category I +Category IIA +Category IIB +Category III +http://www.movielabs.com/md/ratings/HN/Film/0 +Film +Honduras +HN +G +12 años +15 años +18 años +http://www.movielabs.com/md/ratings/HR/HAVC/0 +HAVC +Croatia +HR +SU +12 +15 +18 +http://www.movielabs.com/md/ratings/HU/RCNOF/2 +RCNOF +Hungary +HU +I +II +III +IV +V +VI +http://www.movielabs.com/md/ratings/ID/LSF/1 +LSF +Indonesia +ID +Semua Umur +Anak-anak +13+ +17+ +21+ +http://www.movielabs.com/md/ratings/IE/IFCOF/1 +IFCOF +Ireland +IE +General Audiences +Parental Guidance +12A +15A +16 +18 +http://www.movielabs.com/md/ratings/IE/IFCO/1 +IFCO +Ireland +IE +General +PARENTAL GUIDANCE +12 +15 +18 +http://www.movielabs.com/md/ratings/IE/RTE/0 +RTE +Ireland +IE +Children +General Audience +Parental supervision +Suggested for mature audience +http://www.movielabs.com/md/ratings/IL/Film/0 +Film +Israel +IL +לכל +12 +14 +16 +18 +http://www.movielabs.com/md/ratings/IN/CBFC/2 +CBFC +India +IN +Unrestricted +Unrestricted - Parental Discretion +Adults +S +Unrestricted for 7+- Parental Discretion +Unrestricted for 13+- Parental Discretion +Unrestricted for 16+- Parental Discretion +http://www.movielabs.com/md/ratings/IS/FRISK/0 +FRISK +Iceland +IS +L +6 +9 +12 +16 +18 +http://www.movielabs.com/md/ratings/IS/SMAIS/2 +SMAIS +Iceland +IS +L +7 +12 +14 +16 +18 +http://www.movielabs.com/md/ratings/IT/AGCOM/1 +AGCOM +Italy +IT +Pellicola per tutti +14 anni +18 anni +6 and Over +http://www.movielabs.com/md/ratings/IT/MBACT/2 +MBACT +Italy +IT +T +VM14 +VM16 +VM18 +http://www.movielabs.com/md/ratings/JO/MC-JO/0 +MC-JO +Jordan +JO +PG +General Audiences +PG13 +PG15 +15+ +18+ +http://www.movielabs.com/md/ratings/JP/ERIN/1 +EIRIN +Japan +JP +General +Parental guidance - 12 and Above +15 and above only +18 and above only +http://www.movielabs.com/md/ratings/KE/KFCB/1 +KFCB +Kenya +KE +General Exhibition +Parental Guidance Recommended +16+ +R +http://www.movielabs.com/md/ratings/KH/MCFA-KH/0 +MCFA-KH +Cambodia +KH +G +PG-13 +NC-15 +R-18 +http://www.movielabs.com/md/ratings/KR/KCC/1 +KCC +Korea, Rep +KR +All +7+ +12+ +15+ +19+ +http://www.movielabs.com/md/ratings/KR/KMRB/4 +KMRB +Korea, Rep +KR +전체 관람가 +12세 이상 관람가 +15세 이상 관람가 +청소년 관람불가 +제한관람가 +http://www.movielabs.com/md/ratings/KW/KCB/0 +KCB +Kuwait +KW +PG +G +12+ +13+ +15+ +18+ +http://www.movielabs.com/md/ratings/KZ/KCB/0 +KCB +Kazakhstan +KZ +K +12 +14 +16 +18 +HA +http://www.movielabs.com/md/ratings/LB/LCB/0 +LCB +Lebanon +LB +PG +G +PG13 +PG16 +18+ +R21 +http://www.movielabs.com/md/ratings/LT/LKC/0 +LKC +Lithuania +LT +V +N-7 +N-13 +N-16 +N-18 +http://www.movielabs.com/md/ratings/LU/CSCF/1 +CSCF +Luxembourg +LU +T +Tous +6 +12 +16 +18 +http://www.movielabs.com/md/ratings/LV/NKC-LV/1 +NKC-LV +Latvia +LV +U +7+ +12+ +16+ +18+ +http://www.movielabs.com/md/ratings/MT/MCCAA/1 +MCCAA +Malta +MT +Universal +PG +12A +12 +14 +15 +16 +18 +http://www.movielabs.com/md/ratings/MV/NBC/1 +NBC +Maldives +MV +General +Parental Guidance +12+ +15+ +18+ +18+R +PU +http://www.movielabs.com/md/ratings/MX/RTC/1 +RTC +Mexico +MX +AA +A +B +B15 +C +D +http://www.movielabs.com/md/ratings/MY/FCBM/1 +FCBM +Malaysia +MY +U +P13 +18 +18SX +18PA +18SG +18PL +http://www.movielabs.com/md/ratings/NG/NFVCB/1 +NFVCB +Nigeria +NG +G +PG +12 +12A +15 +18 +RE +http://www.movielabs.com/md/ratings/NL/Kijkwijzer/2 +Kijkwijzer +Netherlands +NL +AL +6 +9 +12 +14 jaar +16 +18 jaar +http://www.movielabs.com/md/ratings/NO/Medietilsynet/3 +Medietilsynet +Norway +NO +Tillaten for alle +6 +7 +9 +11 år +12 +15 +18 +http://www.movielabs.com/md/ratings/NZ/OFLC/3 +OFLC +New Zealand +NZ +Suitable for general audiences +Parental guidance recommended for younger viewers +Restricted to persons 13 years of age and over unless accompanied by parent/guardian +Restricted to persons 13 years of age and over +Restricted to persons 15 years of age and over +Suitable for (but not restricted to) mature audiences 16 years and up +Restricted to persons 16 years of age and over unless accomp[anied by Parent/Guardian +Restricted to persons 16 years of age and over +Restricted to persons 18 years of age and over unless accomp[anied by Parent/Guardian +Restricted to persons 18 years of age and over +Restricted to a particular class of persons, or for particular purposes, or both, specified by the Office of Film and Literature Classification +Unsuitable for Audiences under 13 years of age. +Unsuitable for Audiences under 16 years of age. +Unsuitable for Audiences under 18 years of age. +http://www.movielabs.com/md/ratings/PE/Film/0 +Film +Peru +PE +PT +PG +14 +18 +http://www.movielabs.com/md/ratings/PH/MTRCB/1 +MTRCB +Philippines +PH +GENERAL PATRONAGE +GENERAL AUDIENCE +PARENTAL GUIDANCE +PARENTAL GUIDANCE +STRONG PARENTAL GUIDANCE +RESTRICTED–13 +RESTRICTED–16 +RESTRICTED–18 +X: NOT FOR PUBLIC EXHIBITION +http://www.movielabs.com/md/ratings/PL/NBC-PL/1 +NBC-PL +Poland +PL +All / I +7 / II +12 / III +16 / IV +inne przekazy dozwolone od lat 18 +http://www.movielabs.com/md/ratings/PT/CCE/0 +CCE +Portugal +PT +A +M/3 +M/4 +M/6 +M/12 +M/16 +M/18 +M/18-P +http://www.movielabs.com/md/ratings/RO/CNA/1 +CNA +Romania +RO +AP +12 +15 +18 +18+ +G +http://www.movielabs.com/md/ratings/RU/MKRF/1 +MKRF +Russia +RU +0+ +6+ +12+ +14 +16+ +18+ +http://www.movielabs.com/md/ratings/SA/GCAM/0 +CIC-SA +Saudi Arabia +SA +G +PG +PG12 +R12 +R15 +R18 +http://www.movielabs.com/md/ratings/SE/SM-SA/1 +SM-SA +Sweden +SE +Barntillåten +7-årsgränsen +11-årsgränsen +15-årsgränsen +http://www.movielabs.com/md/ratings/SG/MDA-VG/1 +MDA-VG +Singapore +SG +Advisory 16 +Mature 18 +http://www.movielabs.com/md/ratings/SG/MDA/2 +MDA +Singapore +SG +General +Parental Guidance +Parental Guidance 13 +No Children Under 16 +Mature 18 +Restricted 21 +http://www.movielabs.com/md/ratings/SK/Film/1 +Film +Slovakia +SK +G +7 +PG-12 +PG-15 +PG-18 +http://www.movielabs.com/md/ratings/SK/SK_TV/0 +TV +Slovakia +SK +15 +18 +G +U +E7- +E7+ +E12 +E15 +7 +12 +http://www.movielabs.com/md/ratings/SV/Film/0 +Film +El Salvador +SV +AA +A +B +C +D +E +http://www.movielabs.com/md/ratings/TH/BFVC/0 +BFVC +Thailand +TH +General audience +Educational +13 +15 +18 +20 +BANNED +http://www.movielabs.com/md/ratings/TR/AI/1 +AI +Turkey +TR +General Audience +For Ages 7 and Up +For Ages 13 and Up +For Ages 18 and Up +http://www.movielabs.com/md/ratings/TR/IBMCT/0 +IBMCT +Turkey +TR +GA +7A +7+ +13A +13+ +15A +15+ +18+ +http://www.movielabs.com/md/ratings/TW/MOC-TW-TV/0 +MOC-TW-TV +Taiwan +TW +G +P +PG-12 +PG-15 +R +http://www.movielabs.com/md/ratings/TW/MOC-TW/2 +MOC-TW +Taiwan +TW +General audiences +Protected +Parental guidance +Restricted-12 +Restricted-15 +Restricted +http://www.movielabs.com/md/ratings/UA/Ukraine/2 +Ukraine +Ukraine +UA +ДА +12 +ЗА +14 +16 +18 +Х21 +Відмовлено +http://www.movielabs.com/md/ratings/US/ESRB/0 +ESRB +United States +US +Pending +Early Childhood +Everyone +Everyone 10+ +Teen +Mature +Adults Only +http://www.movielabs.com/md/ratings/US/FAB/3 +FAB +United States +US +FAMILY +CHILDREN +PARENTAL DESCRETION +PARENTAL DESCRETION MATURE +MATURE +VERY MATURE +EXTREMELY MATURE +ADULTS ONLY +http://www.movielabs.com/md/ratings/US/MPAAT/1 +MPAAT +United States +US +Green Band +Red Band +http://www.movielabs.com/md/ratings/US/MPAA/2 +MPAA +United States +US +General Audiences +Parental Guidance Suggested +Mature Audiences +Parental Guidance Suggested +Parents Strongly Cautioned +Restricted +No One 17 and Under Admitted +No One 17 and Under Admitted +http://www.movielabs.com/md/ratings/US/RIAA/0 +RIAA +United States +US +Parental Advisory +http://www.movielabs.com/md/ratings/US/TVPG/2 +TVPG +United States +US +All Children +General Audience +Directed to Older Children +Directed to Older Children- Fantasy Violence +Parental Guidance Suggested +Parents Strongly Cautioned +Mature Audience Only +http://www.movielabs.com/md/ratings/-t.b.d.-/-t.b.d.-/0 +INAU +Uruguay +UY +6 +9 +12 +15 +18 +TP +http://www.movielabs.com/md/ratings/VE/RESORTE-Health/1 +RESORTE-Health +Venezuela +VE +Salud Type-A +Salud Type-B +Salud Type-C +Salud Type-D +http://www.movielabs.com/md/ratings/VE/RESORTE-Language/1 +RESORTE-Language +Venezuela +VE +Language Type-A +Language Type-B +Lenguaje Type-C +http://www.movielabs.com/md/ratings/VE/RESORTE-Sexo/1 +RESORTE-Sexo +Venezuela +VE +>Sexo Type-A +>Sexo Type-B +>Sexo Type-C +>Sexo Type-D +>Sexo Type-E +http://www.movielabs.com/md/ratings/VE/RESORTE-Violencia/1 +RESORTE-Violencia +Venezuela +VE +Violencia Type-A +Violencia Type-B +Violencia Type-C +Violencia Type-D +Violencia Type-E +http://www.movielabs.com/md/ratings/VN/MCST/2 +MCST +Viet Nam +VN +P +0 +C13 +C16 +16+ +C18 +NYR +http://www.movielabs.com/md/ratings/ZA/FPB/4 +FPB +South Africa +ZA +A +PG +7-9-PG +10 +10M +10-12-PG +13 +16 +18 +X18 +XX +http://www.movielabs.com/md/ratings/ZZ/UNRATED/0 +UNRATED +Global +ZZ +All Audiences +UNRATED +Adults +PROSCRIBED diff --git a/scripts/update-ratings b/scripts/update-ratings new file mode 100755 index 00000000..5e692235 --- /dev/null +++ b/scripts/update-ratings @@ -0,0 +1,29 @@ +#!/usr/bin/python3 + +import sys +import urllib.request + +import bs4 + +# Output is +# URI (for DCP metadata) +# Name/ID of rating system +# Country[/Region] +# Country code +# Rating label + + +with urllib.request.urlopen('https://www.movielabs.com/md/ratings/v2.4.8/CMR_Ratings_v2.4.8.xml') as f, open('ratings', 'w') as g: +#with open('CMR_Ratings_v2.4.8.xml') as f, open('ratings', 'w') as g: + soup = bs4.BeautifulSoup(f.read(), 'xml') + for system in soup.find_all('mdcr:RatingSystem'): + print(system.URI.get_text(), file=g) + print(system.RatingSystemID.System.get_text(), file=g) + if system.AdoptiveRegion.SubRegion: + print(system.Region.RegionName.get_text().title() + "/" + system.AdoptiveRegion.SubRegion.get_text(), file=g) + else: + print(system.Region.RegionName.get_text().title(), file=g) + print(system.Region.country.get_text(), file=g) + for rating in system("Rating"): + print(rating.Descriptor.Label.get_text(), file=g) + diff --git a/src/rating.cc b/src/rating.cc index 2064c644..0ba9f2b8 100644 --- a/src/rating.cc +++ b/src/rating.cc @@ -32,13 +32,23 @@ */ +#include "exceptions.h" #include "rating.h" +#include "util.h" #include <libcxml/cxml.h> +#include <boost/algorithm/string.hpp> +using std::string; +using std::vector; +using boost::algorithm::trim; +using boost::optional; using namespace dcp; +static vector<RatingSystem> rating_systems_list; + + Rating::Rating (cxml::ConstNodePtr node) : agency(node->string_child("Agency")) , label(node->string_child("Label")) @@ -62,3 +72,66 @@ dcp::operator== (Rating const & a, Rating const & b) } +vector<RatingSystem> +dcp::rating_systems() +{ + return rating_systems_list; +} + + +void +dcp::load_rating_list(boost::filesystem::path ratings_file) +{ + auto f = fopen_boost (ratings_file, "r"); + if (!f) { + throw FileError ("Could not open ratings file", ratings_file, errno); + } + + auto get_line_no_throw = [f, ratings_file]() -> optional<string> { + char buffer[512]; + char* r = fgets(buffer, sizeof(buffer), f); + if (r == 0) { + return {}; + } + string a = buffer; + trim(a); + return a; + }; + + auto get_line = [f, ratings_file, &get_line_no_throw]() { + auto line = get_line_no_throw(); + if (!line) { + throw FileError("Bad ratings file", ratings_file, -1); + } + return *line; + }; + + optional<string> agency; + + while (!feof(f)) { + if (!agency) { + agency = get_line(); + } + auto name = get_line(); + auto country_and_region_names = get_line(); + auto country_code = get_line(); + + RatingSystem system(*agency, name, country_and_region_names, country_code); + while (!feof(f)) { + auto rating = get_line_no_throw(); + if (!rating) { + /* End of the file */ + break; + } + if (rating->substr(0, 4) == "http") { + /* End of the system */ + agency = rating; + break; + } + system.ratings.push_back(dcp::Rating(*agency, *rating)); + } + + rating_systems_list.push_back(system); + } +} + diff --git a/src/rating.h b/src/rating.h index 0fb912b3..cd6ce520 100644 --- a/src/rating.h +++ b/src/rating.h @@ -69,6 +69,33 @@ public: extern bool operator== (Rating const & a, Rating const & b); +class RatingSystem +{ +public: + RatingSystem (std::string agency_, std::string name_, std::string country_and_region_names_, std::string country_code_) + : agency(agency_) + , name(name_) + , country_and_region_names(country_and_region_names_) + , country_code(country_code_) + {} + + /** URI of the agency issuing the rating */ + std::string agency; + /** Name of the rating system */ + std::string name; + /** Country name, possibly followed by a slash and a region name */ + std::string country_and_region_names; + /** Country code */ + std::string country_code; + + std::vector<Rating> ratings; +}; + + +std::vector<RatingSystem> rating_systems(); + +void load_rating_list(boost::filesystem::path ratings_file); + } diff --git a/src/util.cc b/src/util.cc index 7a5733c2..ed3fb772 100644 --- a/src/util.cc +++ b/src/util.cc @@ -37,14 +37,15 @@ */ -#include "util.h" -#include "language_tag.h" -#include "exceptions.h" -#include "types.h" #include "certificate.h" -#include "openjpeg_image.h" -#include "dcp_assert.h" #include "compose.hpp" +#include "dcp_assert.h" +#include "exceptions.h" +#include "language_tag.h" +#include "openjpeg_image.h" +#include "rating.h" +#include "types.h" +#include "util.h" #include <openjpeg.h> #include <asdcp/KM_util.h> #include <asdcp/KM_fileio.h> @@ -194,7 +195,10 @@ dcp::init (optional<boost::filesystem::path> given_resources_directory) asdcp_smpte_dict = &ASDCP::DefaultSMPTEDict(); - load_language_tag_lists (given_resources_directory.get_value_or(resources_directory()) / "tags"); + auto res = given_resources_directory.get_value_or(resources_directory()); + + load_language_tag_lists (res / "tags"); + load_rating_list (res / "ratings"); } @@ -262,6 +262,8 @@ def build(bld): for i in ['language', 'region', 'script', 'variant', 'extlang', 'dcnc']: bld.install_files('${PREFIX}/share/libdcp/tags', os.path.join('tags', i)) + bld.install_files('${PREFIX}/share/libdcp', 'ratings') + bld.add_post_fun(post) def dist(ctx): |
