>>>>> "Uwe" == Uwe Stöhr <[EMAIL PROTECTED]> writes:

Uwe> You have to clear lang_pack in this case. otherwise you will
Uwe> return "\\usepackage{babel}" although babel shouldn't be called.

I'd be interested if you could test the latest patch I posted. With
it, you will see that since we return an empty string when lang_opts
is empty, there is no need to clear anything. 

Uwe> lang_opts is the full list of languages to pass to babel but it
Uwe> has NOT to contain the document language. That is the point. If
Uwe> you have a Chinses document, the document language doesn't appear
Uwe> in the lang_opts list as Chinese defined an empty babel language
Uwe> in lib/languages. That is new since Georgs support for the
Uwe> CJK-languages.

I know that. But the full logic of the code is that we do not want to
call babel when there are no languages to pass to babel, right?

>>> + lang_pack.clear();
>>  or directly "return string()", since you know nothing is going to
>> happen.

Uwe> Now I'm confused as Abdel stated two days ago I should better use
Uwe> the .clear() method and not string().

I think Abdel referred to something like
  tmp = string();
this is a bit different. I think there is no need to modify the
lang_pack variable (actually, there is no need for this variable,
but I did not remove it in my patch because I do not care much about it).

>>> + if (!lyxrc.language_global_options && !lang_opts.empty())
>>  we know that !lang_opts.empty() (because of the change above)

Uwe> No we don't: For a Chinese document you would then get
Uwe> "\usepackage[]{babel}" and this is wrong.

No, because when lang_opts is empty, we already exited the function
and returned string(). The whole idea of my code is to test this (we
do not want to output \usepackage[]{babel}, indeed), instead of the
possible reasons that may lead to this condition.

>>> + if (lyxrc.language_global_options)
>>  or just a "else" instead.

Uwe> Not possible because of the needed !lang_opts.empty() check in
Uwe> the if case before.

No (again :), because if we are here lang_opts is not empty.

>> The logic of your above code is really weird. I think it works, but
>> it is somewhat by chance.

Uwe> I hope I could explain that it is not weird. And hey, it doesn't
Uwe> work by chance, I hardly tested this before I committed it! I
Uwe> have 8 different testcases with mixed languages to cover all
Uwe> cases.

I know that, I do not want to hurt your feelings. What I mean is that
the code paths are a bit weird, like for example in this case:

1418                    if (!lyxrc.language_global_options && 
!lang_opts.empty())
1419                            lang_pack = string("\\usepackage[") + lang_opts 
+ "]{babel}";
1420                    if (lyxrc.language_global_options)
1421                            return lang_pack;
1422            }
1423            return lang_pack;

The if() of line 1418 leads to change lang_pack, and the value is
returned in line 1423. On the contrary, the if() of line 1420 directly
returns a value. That is what I mean by weird.

So I would be very pleased if you could test my lang2.diff patch and
tell me what does not work.

Uwe> As you know know the problematic, do you perhaps have an idea how
Uwe> to fix bug 3571?: When the document language uses an empty babel
Uwe> language, \selectlanguage may not be used.

I depends: what is the latex output you'd like to have? The best is to
ask a CJK user what we want to obtain, and then see how to implement
it.

JMarc

Reply via email to