Committed this version.

Bernhard Roider wrote:
> there is an error in the previous patch. of course i would suggest
> this one.
>
> bernhard
> ------------------------------------------------------------------------
>
> Index: insetbibtex.C
> ===================================================================
> --- insetbibtex.C     (revision 17723)
> +++ insetbibtex.C     (working copy)
> @@ -373,13 +373,20 @@
>               return true;
>       }
>  
> +
> +     enum charCase {
> +             makeLowerCase,
> +             keepCase
> +     };
> +
>       /// remove whitespace characters, read characer sequence
>       /// not containing whitespace characters or characters in
>       /// delimChars, and remove further whitespace characters.
>       ///
>       /// @return true if a string of length > 0 could be read.
>       /// 
> -     bool readTypeOrKey(docstring & val, idocfstream & ifs, docstring const 
> & delimChars) {
> +     bool readTypeOrKey(docstring & val, idocfstream & ifs, 
> +             docstring const & delimChars, charCase chCase) {
>  
>               char_type ch;
>  
> @@ -398,7 +405,11 @@
>  
>               // read value 
>               while (ifs && !isSpace(ch) && delimChars.find(ch) == 
> docstring::npos) {
> -                     val += lowercase(ch);
> +                     if (chCase == makeLowerCase) {
> +                             val += lowercase(ch);
> +                     } else {
> +                             val += ch;
> +                     }
>                       ifs.get(ch);
>               }
>  
> @@ -533,7 +544,7 @@
>       vector<FileName> const files = getFiles(buffer);
>       for (vector<FileName>::const_iterator it = files.begin();
>            it != files.end(); ++ it) {
> -         // This bibtex parser is a first step to parse bibtex files
> +             // This bibtex parser is a first step to parse bibtex files
>               // more precisely. 
>               // 
>               // - it reads the whole bibtex entry and does a syntax check
> @@ -578,7 +589,7 @@
>  
>                       docstring entryType;
>  
> -                     if (!readTypeOrKey(entryType, ifs, from_ascii("{(")) || 
> !ifs)
> +                     if (!readTypeOrKey(entryType, ifs, from_ascii("{("), 
> makeLowerCase) || !ifs)
>                               continue;
>  
>                       if (entryType == from_ascii("comment")) {
> @@ -587,16 +598,11 @@
>                               continue;
>                       } 
>  
> -                     // check entry delimiter
> -                     char_type entryDelim;
> -
>                       ifs.get(ch);
>                       if (!ifs) 
>                               break;
>  
> -                     if (ch == '(') entryDelim = ')';
> -                     else if (ch == '{') entryDelim = ')';
> -                     else {
> +                     if ((ch != '(') && (ch != '{')) {
>                               // invalid entry delimiter
>                               ifs.putback(ch);
>                               continue;
> @@ -610,7 +616,7 @@
>                               docstring name;
>                               docstring value;
>  
> -                             if (!readTypeOrKey(name, ifs, 
> from_ascii("#=}),")) || !ifs)
> +                             if (!readTypeOrKey(name, ifs, 
> from_ascii("#=}),"), makeLowerCase) || !ifs)
>                                       continue;
>  
>                               ifs.get(ch);
> @@ -640,7 +646,7 @@
>                               docstring value;
>                               docstring commaNewline;
>  
> -                             if (!readTypeOrKey(key, ifs, from_ascii(",})")) 
> || !ifs)
> +                             if (!readTypeOrKey(key, ifs, from_ascii(",})"), 
> keepCase) || !ifs)
>                                       continue;
>  
>                               // now we have a key, so we will add an entry 
> @@ -654,7 +660,7 @@
>                               while (ifs && readNext) {
>  
>                                       // read field name
> -                                     if (!readTypeOrKey(name, ifs, 
> from_ascii("=}),")) || !ifs)
> +                                     if (!readTypeOrKey(name, ifs, 
> from_ascii("=}),"), makeLowerCase) || !ifs)
>                                               break;
>  
>                                       // next char must be an equal sign
>   


-- 
==================================================================
Richard G Heck, Jr
Professor of Philosophy
Brown University
http://frege.brown.edu/heck/
==================================================================
Get my public key from http://sks.keyserver.penguin.de
Hash: 0x1DE91F1E66FFBDEC
Learn how to sign your email using Thunderbird and GnuPG at:
http://dudu.dyn.2-h.org/nist/gpg-enigmail-howto

Reply via email to