Re: Is rst2odt -l cs supposed to work?

Dave Kuhlman <[email protected]>
Newsgroups gmane.text.docutils.user
Message-ID <[email protected]>
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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/docutils-users
> 
> Please use "Reply All" to reply to the list.

-- 

Dave Kuhlman
http://www.davekuhlman.org

------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/docutils-users

Please use "Reply All" to reply to the list.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.