[pango/log-attr-tweaks: 19/23] break-thai: Fix up word break handling




commit 4f1686d8d41a702cc91088dc9fd1134c46edd859
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Aug 21 18:48:22 2021 -0400

    break-thai: Fix up word break handling
    
    We want to insert word start+end if libthai
    hands us line breaks between letters. But must
    be careful not to overwrite existing word boundaries,
    or we end up with a nonsense sequence.
    
    This was found by checking log attr invariants.
    
    Regenerate affected test outputs.

 pango/break-thai.c         | 28 ++++++++++++++++++++--------
 tests/breaks/four.expected | 12 ++++++------
 2 files changed, 26 insertions(+), 14 deletions(-)
---
diff --git a/pango/break-thai.c b/pango/break-thai.c
index 871c0869..02a18cc5 100644
--- a/pango/break-thai.c
+++ b/pango/break-thai.c
@@ -92,15 +92,27 @@ break_thai (const char          *text,
   G_UNLOCK (thai_brk);
 
   for (cnt = 0; cnt < len; cnt++)
-    if (attrs[brk_pnts[cnt]].is_char_break)
     {
-      /* Only allow additional line breaks if line-breaking is NOT
-       * prohibited. (The alternative would be to set is_char_break to
-       * TRUE as well.  NOT setting it will break invariants that any
-       * line break opportunity is also a char break opportunity. */
-      attrs[brk_pnts[cnt]].is_line_break = TRUE;
-      attrs[brk_pnts[cnt]].is_word_start = TRUE;
-      attrs[brk_pnts[cnt]].is_word_end = TRUE;
+      if (!attrs[brk_pnts[cnt]].is_line_break)
+        {
+          /* Insert line breaks where there wasn't one.
+           * Satisfy invariants by marking it as char break too.
+           */
+          attrs[brk_pnts[cnt]].is_char_break = TRUE;
+          attrs[brk_pnts[cnt]].is_line_break = TRUE;
+        }
+      if (!(attrs[brk_pnts[cnt]].is_word_start ||
+            attrs[brk_pnts[cnt]].is_word_end))
+        {
+          /* If we find a break in the middle of a sequence
+           * of characters, end and start a word. We must
+           * be careful only to do that if default_break
+           * did not already find a word start or end,
+           * otherwise we mess up the sequence.
+           */
+          attrs[brk_pnts[cnt]].is_word_start = TRUE;
+          attrs[brk_pnts[cnt]].is_word_end = TRUE;
+        }
     }
 
   if (brk_pnts != brk_stack)
diff --git a/tests/breaks/four.expected b/tests/breaks/four.expected
index ce58e10b..2f29d778 100644
--- a/tests/breaks/four.expected
+++ b/tests/breaks/four.expected
@@ -1,6 +1,6 @@
-Text:         ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩  [ ]   ⁦ห⁩ ⁦ร⁩⁦ื⁩ ⁦อ⁩  [ ]   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦ก⁩ 
⁦ล⁩ ⁦า⁩ ⁦ง⁩  [ ]   ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ร⁩ ⁦า⁩ ⁦ช⁩ ⁦ก⁩ ⁦า⁩ ⁦ร⁩   ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ 
  ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦จ⁩ ⁦ำ⁩   ⁦ช⁩ ⁦า⁩ ⁦ต⁩⁦ิ⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩  [ ]   ⁦ภ⁩ ⁦า⁩ 
⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ใ⁩ ⁦น⁩   ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   
⁦ไ⁩ ⁦ท⁩   �
 ��ซ⁩⁦ึ⁩⁦่⁩ ⁦ง⁩   ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩   ⁦ย⁩⁦่⁩ ⁦อ⁩ ⁦ย⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩  
 ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ข⁩ ⁦ร⁩⁦้⁩ ⁦า⁩  [ ]   ⁦ไ⁩ ⁦ท⁩  [ ]   ⁦ส⁩⁦ั⁩ ⁦น⁩ ⁦น⁩⁦ิ⁩ ⁦ษ⁩ ⁦ฐ⁩ ⁦า⁩ ⁦น⁩   ⁦ว⁩⁦่⁩ ⁦า⁩  [ ]   
⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ใ⁩ ⁦น⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦น⁩⁦ี⁩⁦้⁩   ⁦ม⁩⁦ี⁩   ⁦ถ⁩⁦ิ⁩⁦่⁩ ⁦น⁩   ⁦ก⁩ ⁦ำ⁩ ⁦เ⁩ ⁦น⁩⁦ิ⁩ 
⁦ด⁩   ⁦จ⁩ ⁦า⁩ ⁦ก⁩   ⁦ท⁩ ⁦า⁩ ⁦ง⁩   ⁦ต⁩ ⁦อ⁩ ⁦น⁩   ⁦ใ⁩ ⁦ต⁩⁦้⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ
 ⁩   ⁦จ⁩⁦ี⁩ ⁦น⁩  [ ]   ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦น⁩⁦ั⁩ ⁦ก⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ศ⁩ ⁦า⁩ ⁦ส⁩ ⁦ต⁩ ⁦ร⁩⁦์⁩   ⁦บ⁩ ⁦า⁩ ⁦ง⁩   
⁦ส⁩⁦่⁩ ⁦ว⁩ ⁦น⁩   ⁦เ⁩ ⁦ส⁩ ⁦น⁩ ⁦อ⁩   ⁦ว⁩⁦่⁩ ⁦า⁩  [ ]   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦น⁩⁦่⁩ ⁦า⁩   ⁦จ⁩ ⁦ะ⁩   
⁦ม⁩⁦ี⁩   ⁦ค⁩ ⁦ว⁩ ⁦า⁩ ⁦ม⁩   ⁦เ⁩ ⁦ช⁩⁦ื⁩⁦่⁩ ⁦อ⁩ ⁦ม⁩   ⁦โ⁩ ⁦ย⁩ ⁦ง⁩   ⁦ก⁩⁦ั⁩ ⁦บ⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦ภ⁩ 
⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦อ⁩ ⁦อ⁩   ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩  [ ]   ⁦เ⁩ ⁦อ⁩ ⁦เ⁩ ⁦ช⁩⁦ี⁩ ⁦ย⁩   ⁦ต⁩⁦ิ⁩ ⁦ก⁩  [ ]   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ 
⁦ล⁩
    ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦อ⁩ ⁦อ⁩   ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩ ⁦น⁩⁦ี⁩ ⁦เ⁩ ⁦ซ⁩⁦ี⁩ ⁦ย⁩ ⁦น⁩  [ ]   ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ 
⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦จ⁩⁦ี⁩ ⁦น⁩  [ ]   ⁦ท⁩⁦ิ⁩ ⁦เ⁩ ⁦บ⁩ ⁦ต⁩  [0x0a] 
-Breaks:     c  c c c lc  c c c    lc  c  c c    lc  c c c lc  c c lc  c c c c    lc  c  c lc  c c c lc  c c 
c c c lc  c c lc  c c c lc  c c c c lc  c c  lc  c c lc  c c c c c lc  c c c    lc  c c c lc  c c lc  c  c lc 
 c c c lc  c lc  c   c lc  c c c lc  c lc    c lc  c  c lc  c   c lc   c c lc  c c lc  c c c  c lc  c c c lc  
c  c c    lc  c c    lc   c c  c c c c lc   c c    lc  c c c lc  c lc  c c c  c lc    lc   lc    c lc  c c c  
c lc  c c lc  c c lc  c c lc  c  lc  c c lc  c c c c c lc   c c    lc  c c lc   c lc  c c c c c c c c  lc  c 
c lc   c c lc  c c c lc   c c    lc  c c c lc  c c lc   c lc  c lc   lc  c c c lc  c   c c lc  c c lc   c lc  
c c c  c lc  c c c lc  c lc  c c c c    lc  c c c  c lc   c c    lc  c c c  c lc  c c c lc  c lc  c c c c  c 
c  c c c    lc  c c lc  c c c  c lc  c c c lc   c c    lc   c c c c       c
-Whitespace:                  x             x                                x                                
                                                                          x                                   
                                                                                                              
    x          x                             x                                                                
                                                             x                                                
                          x                                                                                   
                                 x                        x                                                   
    x                                          x               w       w
-Sentences:  bs                                                                                               
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                               e       b
-Words:      bs b b b bse b b be   bse b  b be   bse b b b bse b b bse b b b be   bse b  b bse b b b bse b b 
b b b bse b b bse b b b bse b b b b bse b b  bse b b bse b b b b b bse b b be   bse b b b bse b b bse b  b 
bse b b b bse b bse b   b bse b b b bse b bse   b bse b  b bse b   b bse  b b bse b b bse b b b  b bse b b b 
bse b  b be   bse b be   bse  b b  b b b b bse  b be   bse b b b bse b bse b b b  b bse   bse  bse   b bse b 
b b  b bse b b bse b b bse b b bse b  bse b b bse b b b b b bse  b be   bse b b bse  b bse b b b b b b b b  
bse b b bse  b b bse b b b bse  b be   bse b b b bse b b bse  b bse b bse  bse b b b bse b   b b bse b b bse  
b bse b b b  b bse b b b bse b bse b b b be   bse b b b  b bse  b be   bse b b b  b bse b b b bse b bse b b b 
b  b b  b b be   bse b b bse b b b  b bse b b b bse  b be   bse  b b b be      b
-Graphemes:  b  b b b b   b b b    b   b  b b    b   b b b b   b b b   b b b b    b   b  b b   b b b b   b b 
b b b b   b b b   b b b b   b b b b b   b b  b   b b b   b b b b b b   b b b    b   b b b b   b b b   b  b b  
 b b b b   b b   b   b b   b b b b   b b     b b   b  b b   b   b b    b b b   b b b   b b b  b b   b b b b   
b  b b    b   b b    b    b b  b b b b b    b b    b   b b b b   b b   b b b  b b     b    b     b b   b b b  
b b   b b b   b b b   b b b   b  b   b b b   b b b b b b    b b    b   b b b    b b   b b b b b b b b  b   b 
b b    b b b   b b b b    b b    b   b b b b   b b b    b b   b b    b   b b b b   b   b b b   b b b    b b   
b b b  b b   b b b b   b b   b b b b    b   b b b  b b    b b    b   b b b  b b   b b b b   b b   b b b b  b 
b  b b b    b   b b b   b b b  b b   b b b b    b b    b    b b b b       b
+Text:         ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩  [ ]  ⁦ห⁩ ⁦ร⁩⁦ื⁩ ⁦อ⁩  [ ]  ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦ก⁩ 
⁦ล⁩ ⁦า⁩ ⁦ง⁩  [ ]  ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ร⁩ ⁦า⁩ ⁦ช⁩ ⁦ก⁩ ⁦า⁩ ⁦ร⁩   ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩  
 ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦จ⁩ ⁦ำ⁩   ⁦ช⁩ ⁦า⁩ ⁦ต⁩⁦ิ⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩  [ ]  ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ 
⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ใ⁩ ⁦น⁩   ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ 
⁦ท⁩   ⁦��
 �⁩⁦ึ⁩⁦่⁩ ⁦ง⁩   ⁦เ⁩ ⁦ป⁩⁦็⁩ ⁦น⁩   ⁦ก⁩ ⁦ล⁩⁦ุ⁩⁦่⁩ ⁦ม⁩   ⁦ย⁩⁦่⁩ ⁦อ⁩ ⁦ย⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   
⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ข⁩ ⁦ร⁩⁦้⁩ ⁦า⁩  [ ]  ⁦ไ⁩ ⁦ท⁩  [ ]  ⁦ส⁩⁦ั⁩ ⁦น⁩ ⁦น⁩⁦ิ⁩ ⁦ษ⁩ ⁦ฐ⁩ ⁦า⁩ ⁦น⁩   ⁦ว⁩⁦่⁩ ⁦า⁩  [ ]  ⁦ภ⁩ 
⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ใ⁩ ⁦น⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦น⁩⁦ี⁩⁦้⁩   ⁦ม⁩⁦ี⁩   ⁦ถ⁩⁦ิ⁩⁦่⁩ ⁦น⁩   ⁦ก⁩ ⁦ำ⁩ ⁦เ⁩ ⁦น⁩⁦ิ⁩ ⁦ด⁩  
 ⁦จ⁩ ⁦า⁩ ⁦ก⁩   ⁦ท⁩ ⁦า⁩ ⁦ง⁩   ⁦ต⁩ ⁦อ⁩ ⁦น⁩   ⁦ใ⁩ ⁦ต⁩⁦้⁩   ⁦ข⁩ ⁦อ⁩ ⁦ง⁩   ⁦ป⁩ ⁦ร⁩ ⁦ะ⁩ ⁦เ⁩ ⁦ท⁩ ⁦ศ⁩   �
 ��จ⁩⁦ี⁩ ⁦น⁩  [ ]  ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦น⁩⁦ั⁩ ⁦ก⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ ⁦ศ⁩ ⁦า⁩ ⁦ส⁩ ⁦ต⁩ ⁦ร⁩⁦์⁩   ⁦บ⁩ ⁦า⁩ ⁦ง⁩   ⁦ส⁩⁦่⁩ 
⁦ว⁩ ⁦น⁩   ⁦เ⁩ ⁦ส⁩ ⁦น⁩ ⁦อ⁩   ⁦ว⁩⁦่⁩ ⁦า⁩  [ ]  ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦ไ⁩ ⁦ท⁩ ⁦ย⁩   ⁦น⁩⁦่⁩ ⁦า⁩   ⁦จ⁩ ⁦ะ⁩   ⁦ม⁩⁦ี⁩   
⁦ค⁩ ⁦ว⁩ ⁦า⁩ ⁦ม⁩   ⁦เ⁩ ⁦ช⁩⁦ื⁩⁦่⁩ ⁦อ⁩ ⁦ม⁩   ⁦โ⁩ ⁦ย⁩ ⁦ง⁩   ⁦ก⁩⁦ั⁩ ⁦บ⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩ 
  ⁦อ⁩ ⁦อ⁩   ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩  [ ]  ⁦เ⁩ ⁦อ⁩ ⁦เ⁩ ⁦ช⁩⁦ี⁩ ⁦ย⁩   ⁦ต⁩⁦ิ⁩ ⁦ก⁩  [ ]  ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ ⁦ล⁩   ⁦ภ��
 � ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦อ⁩ ⁦อ⁩   ⁦ส⁩ ⁦โ⁩ ⁦ต⁩ ⁦ร⁩ ⁦น⁩⁦ี⁩ ⁦เ⁩ ⁦ซ⁩⁦ี⁩ ⁦ย⁩ ⁦น⁩  [ ]  ⁦แ⁩ ⁦ล⁩ ⁦ะ⁩   ⁦ต⁩ ⁦ร⁩ ⁦ะ⁩ ⁦ก⁩⁦ู⁩ 
⁦ล⁩   ⁦ภ⁩ ⁦า⁩ ⁦ษ⁩ ⁦า⁩   ⁦จ⁩⁦ี⁩ ⁦น⁩  [ ]  ⁦ท⁩⁦ิ⁩ ⁦เ⁩ ⁦บ⁩ ⁦ต⁩  [0x0a] 
+Breaks:     c  c c c lc  c c c    lc c  c c    lc c c c lc  c c lc  c c c c    lc c  c lc  c c c lc  c c c c 
c lc  c c lc  c c c lc  c c c c lc  c c  lc  c c lc  c c c c c lc  c c c    lc c c c lc  c c lc  c  c lc  c c 
c lc  c lc  c   c lc  c c c lc  c lc    c lc  c  c lc  c   c lc   c c lc  c c lc  c c c  c lc  c c c lc  c  c 
c    lc c c    lc  c c  c c c c lc   c c    lc c c c lc  c lc  c c c  c lc    lc   lc    c lc  c c c  c lc  c 
c lc  c c lc  c c lc  c  lc  c c lc  c c c c c lc   c c    lc c c lc   c lc  c c c c c c c c  lc  c c lc   c 
c lc  c c c lc   c c    lc c c c lc  c c lc   c lc  c lc   lc  c c c lc  c   c c lc  c c lc   c lc  c c c  c 
lc  c c c lc  c lc  c c c c    lc c c c  c lc   c c    lc c c c  c lc  c c c lc  c lc  c c c c  c c  c c c    
lc c c lc  c c c  c lc  c c c lc   c c    lc  c c c c       c
+Whitespace:                  x            x                               x                                  
                                                                       x                                      
                                                                                                              
x         x                            x                                                                      
                                                      x                                                       
                  x                                                                                           
                        x                       x                                                      x      
                                   x              w       w
+Sentences:  bs                                                                                               
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                  e       b
+Words:      bs b b b bse b b be   bs b  b be   bs b b b bse b b bse b b b be   bs b  b bse b b b bse b b b b 
b bse b b bse b b b bse b b b b bse b b  bse b b bse b b b b b bse b b be   bs b b b bse b b bse b  b bse b b 
b bse b bse b   b bse b b b bse b bse   b bse b  b bse b   b bse  b b bse b b bse b b b  b bse b b b bse b  b 
be   bs b be   bs  b b  b b b b bse  b be   bs b b b bse b bse b b b  b bse   bse  bse   b bse b b b  b bse b 
b bse b b bse b b bse b  bse b b bse b b b b b bse  b be   bs b b bse  b bse b b b b b b b b  bse b b bse  b 
b bse b b b bse  b be   bs b b b bse b b bse  b bse b bse  bse b b b bse b   b b bse b b bse  b bse b b b  b 
bse b b b bse b bse b b b be   bs b b b  b bse  b be   bs b b b  b bse b b b bse b bse b b b b  b b  b b be   
bs b b bse b b b  b bse b b b bse  b be   bs  b b b be      b
+Graphemes:  b  b b b b   b b b    b  b  b b    b  b b b b   b b b   b b b b    b  b  b b   b b b b   b b b b 
b b   b b b   b b b b   b b b b b   b b  b   b b b   b b b b b b   b b b    b  b b b b   b b b   b  b b   b b 
b b   b b   b   b b   b b b b   b b     b b   b  b b   b   b b    b b b   b b b   b b b  b b   b b b b   b  b 
b    b  b b    b   b b  b b b b b    b b    b  b b b b   b b   b b b  b b     b    b     b b   b b b  b b   b 
b b   b b b   b b b   b  b   b b b   b b b b b b    b b    b  b b b    b b   b b b b b b b b  b   b b b    b 
b b   b b b b    b b    b  b b b b   b b b    b b   b b    b   b b b b   b   b b b   b b b    b b   b b b  b 
b   b b b b   b b   b b b b    b  b b b  b b    b b    b  b b b  b b   b b b b   b b   b b b b  b b  b b b    
b  b b b   b b b  b b   b b b b    b b    b   b b b b       b


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]