From: Dave K. <dku...@da...> - 2017-05-19 18:22:57
|
Günter, I did the following: 1. Merged your changes (patch file below) into my local repository. 2. Did a bit of testing. I had an exception when a document contained an admonition. I fixed that. 3. Committed these changes to the central repository. Thank you for your help with this. Let me know if/when there is something more I can do. Dave K On Thu, May 18, 2017 at 07:42:35PM +0000, Guenter Milde wrote: > Dear Dave, > > On 2017-05-16, Dave Kuhlman wrote: > > > I did the commit. > > > And, before I did so, I took Matěj's suggestion about using > > ``locale.normalize(lang), so now you can use:: > > > $ rst2odt.py -l cs somedoc.txt somedoc.odt > > $ rst2odt.py -l es somedoc.txt somedoc.odt > > > to get Czech and Spanish (Spain). > > Fine. > > > And, of course, you can override the region, for example:: > > > $ rst2odt.py -l cs-GB somedoc.txt somedoc.odt > > $ rst2odt.py -l es-mx somedoc.txt somedoc.odt > > > to get British English and Mexican Spanish. > > > I suggest the patch below to allow for BCP 47 tags like > > de-Latf-AT # second tag is script, region in 3rd position > de-latf # second tag is script, no region given > de-1901 # second tag is variant (here: spelling), no region given > > > Further changes: > > The RuntimeError if locale.normalize fails to find a region tag is > replaced with a Warning: a missing region tag does not prevent export > of a functional output document. > > The RuntimeError for empty "self.visitor.language_code" is removed on the > assumption that if a user calls ``--language=""``, this indicates that no > language should be written into the output --- which is exactly what happens > in this case. > > From the function "languages.normalize_language_tag()", we only need the > replacement of "_" by "-". This is better done with a string method. > > > Günter > > > Dir: /home/milde/Code/Python/docutils-svn/docutils/docutils/writers/odf_odt/ > > Index: __init__.py > =================================================================== > --- __init__.py (Revision 8069) > +++ __init__.py (Arbeitskopie) > @@ -572,38 +572,35 @@ > s1 = self.get_stylesheet() > # Set default language in document to be generated. > # Language is specified by the -l/--language command line option. > - # Allowed values are "ll", "ll-rr" or "ll_rr", where ll is language > - # and rr is region. If region is omitted, we use > + # The format is described in BCP 47. If region is omitted, we use > # local.normalize(ll) to obtain a region. > language_code = None > region_code = None > - if len(self.visitor.normalized_language_code) > 0: > - language_ids = self.visitor.normalized_language_code[0].split('-') > - if len(language_ids) == 2: > - language_code = language_ids[0] > - region_code = language_ids[1] > - elif len(language_ids) == 1: > - language_code = language_ids[0] > + if self.visitor.language_code: > + language_ids = self.visitor.language_code.replace('_','-') > + language_ids = language_ids.split('-') > + # first tag is primary language tag > + language_code = language_ids[0].lower() > + # 2-letter region subtag may follow in 2nd or 3rd position > + for subtag in language_ids[1:]: > + if len(subtag) == 2 and subtag.isalpha(): > + region_code = subtag.upper() > + break > + elif len(subtag) == 1: > + break # 1-letter tag is never before valid region tag > + if region_code is None: > rcode = locale.normalize(language_code) > rcode = rcode.split('_') > if len(rcode) > 1: > - rcode = rcode[1] > - rcode = rcode.split('.') > - if len(rcode) >= 1: > - region_code = rcode[0] > + rcode = rcode[1].split('.') > + region_code = rcode[0] > if region_code is None: > - raise RuntimeError( > + self.document.reporter.warning( > 'invalid language-region. ' > 'Could not find region with locale.normalize(). ' > 'If language is supplied, then you must specify ' > - 'both lanauge and region (ll-rr). Examples: ' > - 'es-mx (Spanish, Mexico), en-au (English, Australia).') > - else: > - raise RuntimeError( > - 'invalid language-region. ' > - 'Format must be "ll-rr" or "ll_rr", where ll is language ' > - 'and rr is region. ' > - 'See https://en.wikipedia.org/wiki/IETF_language_tag') > + 'both language and region (ll-RR). Examples: ' > + 'es-MX (Spanish, Mexico), en-AU (English, Australia).') > # Update the style ElementTree with the language and region. > # Note that we keep a reference to the modified node because > # it is possible that ElementTree will throw away the Python > @@ -888,8 +885,6 @@ > self.language = languages.get_language( > self.language_code, > document.reporter) > - self.normalized_language_code = languages.normalize_language_tag( > - self.language_code) > self.format_map = {} > if self.settings.odf_config_file: > from ConfigParser import ConfigParser > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Docutils-users mailing list > Doc...@li... > https://lists.sourceforge.net/lists/listinfo/docutils-users > > Please use "Reply All" to reply to the list. -- Dave Kuhlman http://www.davekuhlman.org |