On Mon, Jan 14, 2019 at 06:43:01PM +0100, Günter Milde wrote:
> On 13.01.19, Scott Kostyshak wrote:
> > On Fri, Jan 04, 2019 at 04:24:14PM -0500, Scott Kostyshak wrote:
> > > On Wed, Jan 24, 2018 at 05:39:11PM +0100, Günter Milde wrote:
> > > > commit a151b274bfbaae965a789f2250609c9404051cb9
> > > > Author: Günter Milde <mi...@lyx.org>
> > > > Date:   Wed Jan 24 17:38:19 2018 +0100
> > > > 
> > > >     Fix lyx2lyx dash conversion and make it faster.
> > > 
> > > This commit triggers a "Malformed LyX document" terminal warning when
> > > opening beamer.16.lyx (the beamer example file exported to 1.6.x
> > > format):
> > > 
> > >   $ lyx -e lyx16x beamer.lyx && lyx beamer.16.lyx
> > >   Warning: Malformed LyX document: Can't find layout at line 5067
> > > 
> > > Günter, can you take a look?
> 
> > Günter, can you reproduce?
> 
> Yes.
> 
> Sorry for the delay, lyx2lyx is always tricky because of the many
> intermediate states.

Thanks for taking a look. Yes, I've gained some appreciation for this
trickiness while trying to work on a lyx2lyx issue.

> Now I could create a minimal example and explore the issue:
> 
> There are two reasons for the "Malformed LyX document" warning:
> 
> a) The reliance on well-formed layouts introduced in the abovementioned
>    commit a151b274bf
>   
> b) Malformed LyX documents generated by exporting beamer documents to
>    2.0 and 1.6 formats.
>   
>    The 2.0 and 1.6 exports create documents with "anonymous layouts", e.g.
> 
>      \begin_layout 
>      A frame without title.
>      \end_layout
> 
>    while a well-formed LyX document requires a layout name like
>    
>      \begin_layout Standard
>      A frame without title.
>      \end_layout
> 
> LyX itself seems to silently replace the "anonymous layout" with a Standard
> when parsing the file.
> 
> 
> I suggest to fix the issue b) 
> and make the "find_containing_layout" function more robust by accepting
> nameless layouts (because this is what LyX itself does).
> 
> The following patch solves the Warning when opening beamer.16.lyx 
> 
> Exec: git 'diff' 'parser_tools.py' 2>&1
> Dir: /usr/local/src/lyx/lib/lyx2lyx/
> 
> diff --git a/lib/lyx2lyx/parser_tools.py b/lib/lyx2lyx/parser_tools.py
> index c53dbfa1ab..0de643440e 100644
> --- a/lib/lyx2lyx/parser_tools.py
> +++ b/lib/lyx2lyx/parser_tools.py
> @@ -640,8 +640,8 @@ def get_containing_inset(lines, i):
>  def get_containing_layout(lines, i):
>    '''
>    Finds out what kind of layout line i is within. Returns a
> -  list containing what follows \begin_layout on the line
> -  on which the layout begins, plus the starting and ending line
> +  list containing what follows \begin_layout on the layout start line
> +  plus the starting and ending line
>    and the start of the paragraph (after all params). I.e, returns:
>      (layoutname, layoutstart, layoutend, startofcontent)
>    Returns False on any kind of error.
> @@ -659,10 +659,9 @@ def get_containing_layout(lines, i):
>    if endlay < i:
>        return False
>  
> -  lay = get_value(lines, "\\begin_layout", stlay)
> -  if lay == "":
> -      # shouldn't happen
> -      return False
> +  layoutname= get_value(lines, "\\begin_layout", stlay)
> +  if layoutname== "":
> +      layoutname = "Standard"
>    par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent",
>                  "\\start_of_appendix", "\\paragraph_spacing", "\\align",
>                  "\\labelwidthstring"]
> @@ -671,7 +670,7 @@ def get_containing_layout(lines, i):
>        stpar += 1
>        if lines[stpar].split(' ', 1)[0] not in par_params:
>            break
> -  return (lay, stlay, endlay, stpar)
> +  return (layoutname, stlay, endlay, stpar)
>  
>  
>  def count_pars_in_inset(lines, i):
> 
> 
> 
> But for some reason the ctests still fail:
> 
> The following tests FAILED:
>       3515 - export/examples/beamer_lyx16 (Failed)
>       4792 - export/examples/de/beamer_lyx16 (Failed)
>       5299 - export/examples/fr/beamer_lyx16 (Failed)
>       5688 - export/examples/ja/beamer_lyx16 (Failed)
>       5690 - export/examples/ja/beamer_lyx22 (Failed)
>       5691 - export/examples/ja/beamer_lyx23 (Failed)

What do the following commands give you (with your patch)?

  lyx master -e lyx16x beamer.lyx &&
  lyx master -e lyx16x beamer.16.lyx &&
  lyx master -e lyx16x beamer.16.16.lyx &&
  lyx master -e lyx16x beamer.16.16.16.lyx &&
  lyx master -e lyx16x beamer.16.16.16.16.lyx &&
  lyx master -e lyx16x beamer.16.16.16.16.16.lyx &&
  md5sum beamer*.lyx

If there is not output (e.g., warning on the terminal), then likely the
md5sum of the two last *.16.lyx files differ, which suggests a problem.
In that case, I would suggest looking at the diff of those two files.

Scott

Attachment: signature.asc
Description: PGP signature

Reply via email to