r187935 - Support for double width characters.

Alexander Kornienko alexfh at google.com
Wed Aug 7 19:31:35 PDT 2013


On Thu, Aug 8, 2013 at 4:23 AM, Arnold Schwaighofer <aschwaighofer at apple.com
> wrote:

> Hi Alexander,
>
> This commit broke a bot. The build bot
> clang-x86_64-darwin11-nobootstrap-RAincremental was broken for over two
> hours.
>
>
> http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-nobootstrap-RAincremental/builds/5486
>
> I have reverted it in r187957.
>

Thanks! Will take a look when wake up tomorrow.


>
> Thanks,
> Arnold
>
>
> On Aug 7, 2013, at 6:29 PM, Alexander Kornienko <alexfh at google.com> wrote:
>
> > Author: alexfh
> > Date: Wed Aug  7 18:29:01 2013
> > New Revision: 187935
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=187935&view=rev
> > Log:
> > Support for double width characters.
> >
> > Summary: Only works for UTF-8-encoded files.
> >
> > Reviewers: djasper
> >
> > Reviewed By: djasper
> >
> > CC: cfe-commits, klimek
> >
> > Differential Revision: http://llvm-reviews.chandlerc.com/D1311
> >
> > Modified:
> >    cfe/trunk/lib/Format/BreakableToken.cpp
> >    cfe/trunk/unittests/Format/FormatTest.cpp
> >
> > Modified: cfe/trunk/lib/Format/BreakableToken.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/BreakableToken.cpp?rev=187935&r1=187934&r2=187935&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Format/BreakableToken.cpp (original)
> > +++ cfe/trunk/lib/Format/BreakableToken.cpp Wed Aug  7 18:29:01 2013
> > @@ -20,6 +20,7 @@
> > #include "clang/Format/Format.h"
> > #include "llvm/ADT/STLExtras.h"
> > #include "llvm/Support/Debug.h"
> > +#include "llvm/Support/Locale.h"
> > #include <algorithm>
> >
> > namespace clang {
> > @@ -38,6 +39,15 @@ static bool IsBlank(char C) {
> >   }
> > }
> >
> > +static unsigned columnWidth(StringRef Text, encoding::Encoding
> Encoding) {
> > +  if (Encoding == encoding::Encoding_UTF8) {
> > +    int ContentWidth = llvm::sys::locale::columnWidth(Text);
> > +    if (ContentWidth >= 0)
> > +      return ContentWidth;
> > +  }
> > +  return encoding::getCodePointCount(Text, Encoding);
> > +}
> > +
> > static BreakableToken::Split getCommentSplit(StringRef Text,
> >                                              unsigned ContentStartColumn,
> >                                              unsigned ColumnLimit,
> > @@ -49,9 +59,12 @@ static BreakableToken::Split getCommentS
> >   unsigned MaxSplitBytes = 0;
> >
> >   for (unsigned NumChars = 0;
> > -       NumChars < MaxSplit && MaxSplitBytes < Text.size(); ++NumChars)
> > -    MaxSplitBytes +=
> > +       NumChars < MaxSplit && MaxSplitBytes < Text.size();) {
> > +    unsigned NumBytes =
> >         encoding::getCodePointNumBytes(Text[MaxSplitBytes], Encoding);
> > +    NumChars += columnWidth(Text.substr(MaxSplitBytes, NumBytes),
> Encoding);
> > +    MaxSplitBytes += NumBytes;
> > +  }
> >
> >   StringRef::size_type SpaceOffset = Text.find_last_of(Blanks,
> MaxSplitBytes);
> >   if (SpaceOffset == StringRef::npos ||
> > @@ -84,9 +97,8 @@ static BreakableToken::Split getStringSp
> >     return BreakableToken::Split(StringRef::npos, 0);
> >   if (ColumnLimit <= ContentStartColumn)
> >     return BreakableToken::Split(StringRef::npos, 0);
> > -  unsigned MaxSplit =
> > -      std::min<unsigned>(ColumnLimit - ContentStartColumn,
> > -                         encoding::getCodePointCount(Text, Encoding) -
> 1);
> > +  unsigned MaxSplit = std::min<unsigned>(ColumnLimit -
> ContentStartColumn,
> > +                                         columnWidth(Text, Encoding) -
> 1);
> >   StringRef::size_type SpaceOffset = 0;
> >   StringRef::size_type SlashOffset = 0;
> >   StringRef::size_type WordStartOffset = 0;
> > @@ -98,7 +110,7 @@ static BreakableToken::Split getStringSp
> >       Chars += Advance;
> >     } else {
> >       Advance = encoding::getCodePointNumBytes(Text[0], Encoding);
> > -      Chars += 1;
> > +      Chars += columnWidth(Text.substr(0, Advance), Encoding);
> >     }
> >
> >     if (Chars > MaxSplit)
> > @@ -131,7 +143,7 @@ unsigned BreakableSingleLineToken::getLi
> > unsigned BreakableSingleLineToken::getLineLengthAfterSplit(
> >     unsigned LineIndex, unsigned Offset, StringRef::size_type Length)
> const {
> >   return StartColumn + Prefix.size() + Postfix.size() +
> > -         encoding::getCodePointCount(Line.substr(Offset, Length),
> Encoding);
> > +         columnWidth(Line.substr(Offset, Length), Encoding);
> > }
> >
> > BreakableSingleLineToken::BreakableSingleLineToken(
> > @@ -329,8 +341,7 @@ unsigned BreakableBlockComment::getLineC
> > unsigned BreakableBlockComment::getLineLengthAfterSplit(
> >     unsigned LineIndex, unsigned Offset, StringRef::size_type Length)
> const {
> >   return getContentStartColumn(LineIndex, Offset) +
> > -         encoding::getCodePointCount(Lines[LineIndex].substr(Offset,
> Length),
> > -                                     Encoding) +
> > +         columnWidth(Lines[LineIndex].substr(Offset, Length), Encoding)
> +
> >          // The last line gets a "*/" postfix.
> >          (LineIndex + 1 == Lines.size() ? 2 : 0);
> > }
> >
> > Modified: cfe/trunk/unittests/Format/FormatTest.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=187935&r1=187934&r2=187935&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
> > +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Aug  7 18:29:01 2013
> > @@ -5704,15 +5704,15 @@ TEST_F(FormatTest, CountsUTF8CharactersP
> >   verifyFormat("\"Однажды в Ñ Ñ‚ÑƒÐ´Ñ‘Ð½ÑƒÑŽ зимнюю
> пору...\"",
> >                getLLVMStyleWithColumns(35));
> >   verifyFormat("\"一 二 三 å›› 五 å
> > 七 å
> > « ä¹  å  \"",
> > -               getLLVMStyleWithColumns(21));
> > +               getLLVMStyleWithColumns(31));
> >   verifyFormat("// Однажды в Ñ Ñ‚ÑƒÐ´Ñ‘Ð½ÑƒÑŽ зимнюю
> пору...",
> >                getLLVMStyleWithColumns(36));
> >   verifyFormat("// 一 二 三 å›› 五 å
> > 七 å
> > « ä¹  å  ",
> > -               getLLVMStyleWithColumns(22));
> > +               getLLVMStyleWithColumns(32));
> >   verifyFormat("/* Однажды в Ñ Ñ‚ÑƒÐ´Ñ‘Ð½ÑƒÑŽ зимнюю
> пору... */",
> >                getLLVMStyleWithColumns(39));
> >   verifyFormat("/* 一 二 三 å›› 五 å
> > 七 å
> > « ä¹  å   */",
> > -               getLLVMStyleWithColumns(25));
> > +               getLLVMStyleWithColumns(35));
> > }
> >
> > TEST_F(FormatTest, SplitsUTF8Strings) {
> > @@ -5723,11 +5723,12 @@ TEST_F(FormatTest, SplitsUTF8Strings) {
> >       "\"пору,\"",
> >       format("\"Однажды, в Ñ Ñ‚ÑƒÐ´Ñ‘Ð½ÑƒÑŽ зимнюю
> пору,\"",
> >              getLLVMStyleWithColumns(13)));
> > -  EXPECT_EQ("\"一 二 三 四 \"\n"
> > -            "\"五 å
> > 七 å
> > « \"\n"
> > -            "\"ä¹  å  \"",
> > -            format("\"一 二 三 å›› 五 å
> > 七 å
> > « ä¹  å  \"",
> > -                   getLLVMStyleWithColumns(10)));
> > +  EXPECT_EQ("\"一 二 三 \"\n"
> > +            "\"å›› 五å
> > \"\n"
> > +            "\"七 å
> > « ä¹  \"\n"
> > +            "\"å  \"",
> > +            format("\"一 二 三 å›› 五å
> > 七 å
> > « ä¹  å  \"",
> > +                   getLLVMStyleWithColumns(11)));
> > }
> >
> > TEST_F(FormatTest, SplitsUTF8LineComments) {
> > @@ -5739,9 +5740,9 @@ TEST_F(FormatTest, SplitsUTF8LineComment
> >                    getLLVMStyleWithColumns(13)));
> >   EXPECT_EQ("// 一二三\n"
> >             "// 四五å
> > 七\n"
> > -            "// å
> > «\n"
> > -            "// ä¹  å  ",
> > -            format("// 一二三 四五å
> > 七 å
> > «  ä¹  å  ", getLLVMStyleWithColumns(6)));
> > +            "// å
> > «  ä¹ \n"
> > +            "// å  ",
> > +            format("// 一二三 四五å
> > 七 å
> > «  ä¹  å  ", getLLVMStyleWithColumns(9)));
> > }
> >
> > TEST_F(FormatTest, SplitsUTF8BlockComments) {
> > @@ -5758,16 +5759,17 @@ TEST_F(FormatTest, SplitsUTF8BlockCommen
> >                    getLLVMStyleWithColumns(13)));
> >   EXPECT_EQ("/* 一二三\n"
> >             " * 四五å
> > 七\n"
> > -            " * å
> > «\n"
> > -            " * ä¹  å  \n"
> > -            " */",
> > -            format("/* 一二三 四五å
> > 七 å
> > «  ä¹  å   */", getLLVMStyleWithColumns(6)));
> > +            " * å
> > «  ä¹ \n"
> > +            " * å    */",
> > +            format("/* 一二三 四五å
> > 七 å
> > «  ä¹  å    */", getLLVMStyleWithColumns(9)));
> >   EXPECT_EQ("/* 𠓣𠓮𠓼𠓽 𠔣𠔬𠔲𠔯\n"
> >             " * 𠕓𠕪𠕥𠕖\n"
> >             " * 𠖀𠕿𠕱-ð Ÿ  */",
> >             format("/* 𠓣𠓮𠓼𠓽 𠔣𠔬𠔲𠔯 𠕓𠕪𠕥ð
> •– 𠖀𠕿𠕱-ð Ÿ  */", getLLVMStyleWithColumns(12)));
> > }
> >
> > +#endif // _MSC_VER
> > +
> > TEST_F(FormatTest, FormatsWithWebKitStyle) {
> >   FormatStyle Style = getWebKitStyle();
> >
> > @@ -5847,7 +5849,5 @@ TEST_F(FormatTest, FormatsWithWebKitStyl
> >             format("if (aaaaaaaaaaaaaaa || bbbbbbbbbbbbbbb) { i++; }",
> Style));
> > }
> >
> > -#endif
> > -
> > } // end namespace tooling
> > } // end namespace clang
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130808/ae20be07/attachment.html>


More information about the cfe-commits mailing list