Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3237

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/37/3237/1

fdo#39468 Translate German comments - source/edit/texteng.cxx

Change-Id: Ifc02535cecc24d9362d2534784c659ee8705f751
---
M vcl/source/edit/texteng.cxx
1 file changed, 126 insertions(+), 164 deletions(-)



diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index b03924c..2342b2f 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -61,9 +61,6 @@
 using namespace ::rtl;
 
 
-// -------------------------------------------------------------------------
-// (-) class TextEngine
-// -------------------------------------------------------------------------
 TextEngine::TextEngine()
 {
     mpDoc = 0;
@@ -118,7 +115,7 @@
     delete mpIdleFormatter;
     delete mpDoc;
     delete mpTEParaPortions;
-    delete mpViews; // nur die Liste, nicht die Vies
+    delete mpViews; // only the list, not the Views
     delete mpRefDev;
     delete mpUndoManager;
     delete mpIMEInfos;
@@ -188,8 +185,8 @@
         else
             maTextColor = rFont.GetColor();
 
-        // Wegen Selektion keinen Transparenten Font zulassen...
-        // (Sonst spaeter in ImplPaint den Hintergrund anders loeschen...)
+        // because selection, don't allow transparent fonts
+        // (otherwise delete the background in ImplPaint later differently)
         maFont.SetTransparent( sal_False );
         // Tell VCL not to use the font color, use text color from OutputDevice
         maFont.SetColor( COL_TRANSPARENT );
@@ -336,7 +333,7 @@
             case KEYFUNC_CUT:
             case KEYFUNC_PASTE: bDoesChange = sal_True;
             break;
-            default:    // wird dann evtl. unten bearbeitet.
+            default:    // might get handled below
                         eFunc = KEYFUNC_DONTKNOW;
         }
     }
@@ -421,7 +418,7 @@
         sal_uInt16 nEndPos = pNode->GetText().Len();
         if ( nNode == nStartPara )
             nStartPos = aSel.GetStart().GetIndex();
-        if ( nNode == nEndPara ) // kann auch == nStart sein!
+        if ( nNode == nEndPara ) // may also be == nStart!
             nEndPos = aSel.GetEnd().GetIndex();
 
         aText += pNode->GetText().Copy( nStartPos, nEndPos-nStartPos );
@@ -450,7 +447,7 @@
     ImpRemoveText();
 
     sal_Bool bUndoCurrentlyEnabled = IsUndoEnabled();
-    // Der von Hand reingesteckte Text kann nicht vom Anwender rueckgaengig gemacht werden.
+    // the manually inserted text cannot be reversed by the user
     EnableUndo( sal_False );
 
     TextPaM aStartPaM( 0, 0 );
@@ -465,13 +462,12 @@
         TextView* pView = (*mpViews)[ nView ];
         pView->ImpSetSelection( aEmptySel );
 
-        // Wenn kein Text, dann auch Kein Format&Update
-        // => Der Text bleibt stehen.
+        // if no text, then no Format&Update => the text remains
         if ( rText.isEmpty() && GetUpdateMode() )
             pView->Invalidate();
     }
 
-    if( rText.isEmpty() )  // sonst muss spaeter noch invalidiert werden, !bFormatted reicht.
+    if( rText.isEmpty() )  // otherwise needs invalidation later; !bFormatted is sufficient
         mnCurTextHeight = 0;
 
     FormatAndUpdate();
@@ -483,7 +479,7 @@
 
 void TextEngine::CursorMoved( sal_uLong nNode )
 {
-    // Leere Attribute loeschen, aber nur, wenn Absatz nicht leer!
+    // delete empty attribute; but only if paragraph is not empty!
     TextNode* pNode = mpDoc->GetNodes().GetObject( nNode );
     if ( pNode && pNode->GetCharAttribs().HasEmptyAttribs() && pNode->GetText().Len() )
         pNode->GetCharAttribs().DeleteEmptyAttribs();
@@ -494,11 +490,11 @@
     DBG_ASSERT( nChars, "ImpRemoveChars: 0 Chars?!" );
     if ( IsUndoEnabled() && !IsInUndo() )
     {
-        // Attribute muessen hier vorm RemoveChars fuer UNDO gesichert werden!
+        // attributes have to be saved for UNDO before RemoveChars!
         TextNode* pNode = mpDoc->GetNodes().GetObject( rPaM.GetPara() );
         XubString aStr( pNode->GetText().Copy( rPaM.GetIndex(), nChars ) );
 
-        // Pruefen, ob Attribute geloescht oder geaendert werden:
+        // check if attributes are being deleted or changed
         sal_uInt16 nStart = rPaM.GetIndex();
         sal_uInt16 nEnd = nStart + nChars;
         for ( sal_uInt16 nAttr = pNode->GetCharAttribs().Count(); nAttr; )
@@ -526,7 +522,7 @@
     if ( IsUndoEnabled() && !IsInUndo() )
         InsertUndo( new TextUndoConnectParas( this, nLeft, pLeft->GetText().Len() ) );
 
-    // Erstmal Portions suchen, da pRight nach ConnectParagraphs weg.
+    // first lookup Portions, as pRight is gone after ConnectParagraphs
     TEParaPortion* pLeftPortion = mpTEParaPortions->GetObject( nLeft );
     TEParaPortion* pRightPortion = mpTEParaPortions->GetObject( nRight );
     DBG_ASSERT( pLeft && pLeftPortion, "ImpConnectParagraphs(1): Hidden Portion" );
@@ -539,7 +535,7 @@
 
     mpTEParaPortions->Remove( nRight );
     delete pRightPortion;
-    // der rechte Node wird von EditDoc::ConnectParagraphs() geloescht.
+    // the right Node is deleted by EditDoc::ConnectParagraphs()
 
     return aPaM;
 }
@@ -554,8 +550,8 @@
     TextPaM aStartPaM( aSel.GetStart() );
     TextPaM aEndPaM( aSel.GetEnd() );
 
-    CursorMoved( aStartPaM.GetPara() ); // nur damit neu eingestellte Attribute verschwinden...
-    CursorMoved( aEndPaM.GetPara() );   // nur damit neu eingestellte Attribute verschwinden...
+    CursorMoved( aStartPaM.GetPara() ); // so that newly-adjusted attributes vanish
+    CursorMoved( aEndPaM.GetPara() );   // so that newly-adjusted attributes vanish
 
     DBG_ASSERT( mpDoc->IsValidPaM( aStartPaM ), "ImpDeleteText(1): bad Index" );
     DBG_ASSERT( mpDoc->IsValidPaM( aEndPaM ), "ImpDeleteText(2): bad Index" );
@@ -563,16 +559,16 @@
     sal_uLong nStartNode = aStartPaM.GetPara();
     sal_uLong nEndNode = aEndPaM.GetPara();
 
-    // Alle Nodes dazwischen entfernen....
+    // remove all Nodes inbetween
     for ( sal_uLong z = nStartNode+1; z < nEndNode; z++ )
     {
-        // Immer nStartNode+1, wegen Remove()!
+        // always nStartNode+1, because of Remove()!
         ImpRemoveParagraph( nStartNode+1 );
     }
 
     if ( nStartNode != nEndNode )
     {
-        // Den Rest des StartNodes...
+        // the remainder of StartNodes...
         TextNode* pLeft = mpDoc->GetNodes().GetObject( nStartNode );
         sal_uInt16 nChars = pLeft->GetText().Len() - aStartPaM.GetIndex();
         if ( nChars )
@@ -583,8 +579,8 @@
             pPortion->MarkSelectionInvalid( aStartPaM.GetIndex(), pLeft->GetText().Len() );
         }
 
-        // Den Anfang des EndNodes....
-        nEndNode = nStartNode+1;    // Die anderen Absaetze wurden geloescht
+        // the beginning of EndNodes....
+        nEndNode = nStartNode+1;    // the other paragraphs were deleted
         nChars = aEndPaM.GetIndex();
         if ( nChars )
         {
@@ -596,7 +592,7 @@
             pPortion->MarkSelectionInvalid( 0, pPortion->GetNode()->GetText().Len() );
         }
 
-        // Zusammenfuegen....
+        // connect....
         aStartPaM = ImpConnectParagraphs( nStartNode, nEndNode );
     }
     else
@@ -619,8 +615,8 @@
     TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     TEParaPortion* pPortion = mpTEParaPortions->GetObject( nPara );
 
-    // Der Node wird vom Undo verwaltet und ggf. zerstoert!
-    /* delete */ mpDoc->GetNodes().Remove( nPara );
+    // the Node is handled by Undo and is delted if appropriate
+    mpDoc->GetNodes().Remove( nPara );
     if ( IsUndoEnabled() && !IsInUndo() )
         InsertUndo( new TextUndoDelPara( this, pNode, nPara ) );
     else
@@ -692,7 +688,7 @@
         }
         else if ( bDoOverwrite )
         {
-            // Wenn Selektion, dann kein Zeichen ueberschreiben
+            // if selection, then don't overwrite a character
             TextSelection aTmpSel( aPaM );
             aTmpSel.GetEnd().GetIndex()++;
             ImpDeleteText( aTmpSel );
@@ -792,9 +788,9 @@
     {
         sal_uInt16 nEnd = aText.Search( LINE_SEP, nStart );
         if ( nEnd == STRING_NOTFOUND )
-            nEnd = aText.Len(); // nicht dereferenzieren!
+            nEnd = aText.Len(); // do not dereference!
 
-        // Start == End => Leerzeile
+        // Start == End => empty line
         if ( nEnd > nStart )
         {
             sal_uLong nL = aPaM.GetIndex();
@@ -863,7 +859,7 @@
     mpTEParaPortions->Insert( pNewPortion, aPaM.GetPara() );
     ImpParagraphInserted( aPaM.GetPara() );
 
-    CursorMoved( rPaM.GetPara() );  // falls leeres Attribut entstanden.
+    CursorMoved( rPaM.GetPara() );  // if empty attribute created
     TextModified();
 
     if ( bFirstParaContentChanged )
@@ -907,14 +903,10 @@
     //TextNode* pNode = mpDoc->GetNodes().GetObject( rPaM.GetPara() );
 
     /*
-     bSpecial:  Wenn hinter dem letzten Zeichen einer umgebrochenen Zeile,
-     am Ende der Zeile bleiben, nicht am Anfang der naechsten.
-     Zweck:     - END => wirklich hinter das letzte Zeichen
-                - Selektion....
       bSpecial: If behind the last character of a made up line, stay at the
                   end of the line, not at the start of the next line.
       Purpose:  - really END = > behind the last character
-                  - to selection...
+                - to selection...
 
     */
 
@@ -935,7 +927,7 @@
     }
     if ( !pLine )
     {
-        // Cursor am Ende des Absatzes.
+        // Cursor at end of paragraph
         DBG_ASSERT( rPaM.GetIndex() == nCurIndex, "GetEditCursor: Bad Index!" );
 
         pLine = pPortion->GetLines().back();
@@ -949,7 +941,7 @@
     nY += mnCharHeight;
     aEditCursor.Bottom() = nY-1;
 
-    // innerhalb der Zeile suchen....
+    // search within the line
     long nX = ImpGetXPos( rPaM.GetPara(), pLine, rPaM.GetIndex(), bPreferPortionStart );
     aEditCursor.Left() = aEditCursor.Right() = nX;
     return aEditCursor;
@@ -960,7 +952,7 @@
     DBG_ASSERT( ( nIndex >= pLine->GetStart() ) && ( nIndex <= pLine->GetEnd() ) , "ImpGetXPos: 
Bad parameters!" );
 
     sal_Bool bDoPreferPortionStart = bPreferPortionStart;
-    // Assure that the portion belongs to this line:
+    // Assure that the portion belongs to this line
     if ( nIndex == pLine->GetStart() )
         bDoPreferPortionStart = sal_True;
     else if ( nIndex == pLine->GetEnd() )
@@ -1087,7 +1079,7 @@
         }
     }
 
-    // Nicht gefunden - Dann den letzten sichtbare...
+    // not found - go to last visible
     sal_uLong nLastNode = mpDoc->GetNodes().Count() - 1;
     TextNode* pLast = mpDoc->GetNodes().GetObject( nLastNode );
     return TextPaM( nLastNode, pLast->GetText().Len() );
@@ -1107,10 +1099,10 @@
     {
         TextLine* pTmpLine = pPortion->GetLines()[ nLine ];
         nY += mnCharHeight;
-        if ( nY > rPosInPara.Y() )  // das war 'se
+        if ( nY > rPosInPara.Y() )  // that's it
         {
             pLine = pTmpLine;
-            break;                  // richtige Y-Position intressiert nicht
+            break;                  // correct Y-Position not needed
         }
     }
     DBG_ASSERT( pLine, "ImpFindIndex: pLine ?" );
@@ -1148,8 +1140,8 @@
         {
             if( pTextPortion->GetLen() > 1 )
             {
-                nTmpX -= pTextPortion->GetWidth();  // vor die Portion stellen
-                // Optimieren: Kein GetTextBreak, wenn feste Fontbreite...
+                nTmpX -= pTextPortion->GetWidth();  // position before Portion
+                // TODO: Optimize: no GetTextBreak if fixed-width Font
                 Font aFont;
                 SeekCursor( nPortion, nCurIndex+1, aFont, NULL );
                 mpRefDev->SetFont( aFont);
@@ -1221,7 +1213,7 @@
                 mnCurTextWidth = nParaWidth;
         }
     }
-    return mnCurTextWidth+1;// Ein breiter, da in CreateLines bei >= umgebrochen wird.
+    return mnCurTextWidth+1;// wider by 1, as CreateLines breaks at >=
 }
 
 sal_uLong TextEngine::CalcTextHeight()
@@ -1236,7 +1228,7 @@
 
 sal_uLong TextEngine::CalcTextWidth( sal_uLong nPara, sal_uInt16 nPortionStart, sal_uInt16 nLen, 
const Font* pFont )
 {
-    // Innerhalb des Textes darf es keinen Portionwechsel (Attribut/Tab) geben!
+    // within the text there must not be a Portion change (attribute/tab)!
     DBG_ASSERT( mpDoc->GetNodes().GetObject( nPara )->GetText().Search( '\t', nPortionStart ) >= 
(nPortionStart+nLen), "CalcTextWidth: Tab!" );
 
     sal_uLong nWidth;
@@ -1263,7 +1255,6 @@
     }
     return nWidth;
 }
-
 
 sal_uInt16 TextEngine::GetLineCount( sal_uLong nParagraph ) const
 {
@@ -1342,7 +1333,7 @@
 
 void TextEngine::EnableUndo( sal_Bool bEnable )
 {
-    // Beim Umschalten des Modus Liste loeschen:
+    // delete list when switching mode
     if ( bEnable != IsUndoEnabled() )
         ResetUndo();
 
@@ -1361,7 +1352,6 @@
     if ( IsUndoEnabled() && !IsInUndo() )
     {
         String aComment;
-        // ...
         GetUndoManager().EnterListAction( aComment, XubString(), nId );
     }
 }
@@ -1426,12 +1416,10 @@
         if ( pAttrib->GetStart() > nPos )
             break;
 
-        // Beim Seeken nicht die Attr beruecksichtigen, die dort beginnen!
-        // Leere Attribute werden beruecksichtigt( verwendet), da diese
-        // gerade eingestellt wurden.
-        // 12.4.95: Doch keine Leeren Attribute verwenden:
-        // - Wenn gerade eingestellt und leer => keine Auswirkung auf Font
-        // In einem leeren Absatz eingestellte Zeichen werden sofort wirksam.
+        // When seeking don't use Attr that start there!
+        // 12.4.95: Do not use empty attributes:
+        // - If just being setup and empty => no effect on Font
+        // - Characters that are setup in an empty paragraph become visible right away.
         if ( ( ( pAttrib->GetStart() < nPos ) && ( pAttrib->GetEnd() >= nPos ) )
                     || !pNode->GetText().Len() )
         {
@@ -1523,7 +1511,7 @@
         aClipRect.Intersection( aVisArea );
         if ( !aClipRect.IsEmpty() )
         {
-            // in Fensterkoordinaten umwandeln....
+            // translate into window coordinates
             Point aNewPos = pView->GetWindowPos( aClipRect.TopLeft() );
             if ( IsRightToLeft() )
                 aNewPos.X() -= aOutSz.Width() - 1;
@@ -1577,7 +1565,7 @@
     long nY = 0;
     sal_Bool bGrow = sal_False;
 
-    maInvalidRect = Rectangle(); // leermachen
+    maInvalidRect = Rectangle(); // clear
     for ( sal_uLong nPara = 0; nPara < mpTEParaPortions->Count(); nPara++ )
     {
         TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
@@ -1592,10 +1580,10 @@
             if ( CreateLines( nPara ) )
                 bGrow = sal_True;
 
-            // InvalidRect nur einmal setzen...
+            // set InvalidRect only once
             if ( maInvalidRect.IsEmpty() )
             {
-                // Bei Paperwidth 0 (AutoPageSize) bleibt es sonst Empty()...
+                // otherwise remains Empty() for Paperwidth 0 (AutoPageSize)
                 long nWidth = (long)mnMaxTextWidth;
                 if ( !nWidth )
                     nWidth = 0x7FFFFFFF;
@@ -1636,7 +1624,7 @@
             if ( maInvalidRect.IsEmpty() )
             {
                 maInvalidRect.Top() = 0;
-                // Left und Right werden nicht ausgewertet, aber wegen IsEmpty gesetzt.
+                // Left and Right are not evaluated, but set because of IsEmpty
                 maInvalidRect.Left() = 0;
                 maInvalidRect.Right() = mnMaxTextWidth;
             }
@@ -1695,12 +1683,12 @@
 {
     TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
 
-    // Font sollte noch eingestellt sein.
+    // Font still should be adjusted
     sal_uInt16 nMaxBreakPos = mpRefDev->GetTextBreak( pNode->GetText(), nRemainingWidth, 
nPortionStart );
 
     DBG_ASSERT( nMaxBreakPos < pNode->GetText().Len(), "ImpBreakLine: Break?!" );
 
-    if ( nMaxBreakPos == STRING_LEN )   // GetTextBreak() ist anderer Auffassung als GetTextSize()
+    if ( nMaxBreakPos == STRING_LEN )   // GetTextBreak() != GetTextSize()
         nMaxBreakPos = pNode->GetText().Len() - 1;
 
     uno::Reference < i18n::XBreakIterator > xBI = GetBreakIterator();
@@ -1720,11 +1708,11 @@
     {
         nBreakPos = nMaxBreakPos;
         if ( nBreakPos <= pLine->GetStart() )
-            nBreakPos = pLine->GetStart() + 1;  // Sonst Endlosschleife!
+            nBreakPos = pLine->GetStart() + 1;  // infinite loop otherwise!
     }
 
 
-    // die angeknackste Portion ist die End-Portion
+    // the damaged Portion is the End Portion
     pLine->SetEnd( nBreakPos );
     sal_uInt16 nEndPortion = SplitTextPortion( nPara, nBreakPos );
 
@@ -1732,7 +1720,7 @@
                                  ( pNode->GetText().GetChar( nBreakPos ) == ' ' ) ) ? sal_True : 
sal_False;
     if ( bBlankSeparator )
     {
-        // Blanks am Zeilenende generell unterdruecken...
+        // generally suppress blanks at the end of line
         TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
         TETextPortion* pTP = pTEParaPortion->GetTextPortions()[ nEndPortion ];
         DBG_ASSERT( nBreakPos > pLine->GetStart(), "ImpBreakLine: SplitTextPortion at beginning of 
line?" );
@@ -1744,8 +1732,7 @@
 sal_uInt16 TextEngine::SplitTextPortion( sal_uLong nPara, sal_uInt16 nPos )
 {
 
-    // Die Portion bei nPos wird geplittet, wenn bei nPos nicht
-    // sowieso ein Wechsel ist
+    // the Portion at nPos is being split, unless there is a switch at nPos already
     if ( nPos == 0 )
         return 0;
 
@@ -1760,7 +1747,7 @@
         nTmpPos = nTmpPos + pTP->GetLen();
         if ( nTmpPos >= nPos )
         {
-            if ( nTmpPos == nPos )  // dann braucht nichts geteilt werden
+            if ( nTmpPos == nPos )  // nothing needs splitting
                 return nSplitPortion;
             pTextPortion = pTP;
             break;
@@ -1823,9 +1810,9 @@
         nTabPos = pNode->GetText().Search( '\t', nTabPos+1 );
     }
 
-    // Ab ... loeschen:
-    // Leider muss die Anzahl der TextPortions mit aPositions.Count()
-    // nicht uebereinstimmen, da evtl. Zeilenumbrueche...
+    // Delete starting with...
+    // Unfortunately, the number of TextPortions does not have to be
+    // equal to aPositions.Count(), because of linebreaks
     sal_uInt16 nPortionStart = 0;
     sal_uInt16 nInvPortion = 0;
     sal_uInt16 nP;
@@ -1845,15 +1832,15 @@
             "CreateTextPortions: Nothing to delete!");
     if ( nInvPortion && ( nPortionStart+pTEParaPortion->GetTextPortions()[nInvPortion]->GetLen() > 
nStartPos ) )
     {
-        // lieber eine davor...
-        // Aber nur wenn es mitten in der Portion war, sonst ist es evtl.
-        // die einzige in der Zeile davor !
+        // better one before...
+        // But only if it was within the Portion; otherwise it might be
+        // the only one in the previous line!
         nInvPortion--;
         nPortionStart = nPortionStart - pTEParaPortion->GetTextPortions()[nInvPortion]->GetLen();
     }
     pTEParaPortion->GetTextPortions().DeleteFromPortion( nInvPortion );
 
-    // Eine Portion kann auch durch einen Zeilenumbruch entstanden sein:
+    // a Portion might have been created by a line break
     aPositions.insert( nPortionStart );
 
     aPositionsIt = aPositions.find( nPortionStart );
@@ -1880,11 +1867,10 @@
     TextNode* const pNode = pTEParaPortion->GetNode();
     if ( nNewChars > 0 )
     {
-        // Wenn an nStartPos ein Attribut beginnt/endet, oder vor nStartPos
-        // ein Tab steht, faengt eine neue Portion an,
-        // ansonsten wird die Portion an nStartPos erweitert.
-        // Oder wenn ganz vorne ( StartPos 0 ) und dann ein Tab
-
+        // If an Attribute is starting/ending at nStartPos, or there is a tab
+        // before nStartPos => a new Portion starts.
+        // Otherwise the Portion is extended at nStartPos.
+        // Or if at the very beginning ( StartPos 0 ) followed by a tab...
         if ( ( pNode->GetCharAttribs().HasBoundingAttrib( nStartPos ) ) ||
              ( nStartPos && ( pNode->GetText().GetChar( nStartPos - 1 ) == '\t' ) ) ||
              ( ( !nStartPos && ( nNewChars < pNode->GetText().Len() ) && pNode->GetText().GetChar( 
nNewChars ) == '\t' ) ) )
@@ -1893,12 +1879,12 @@
             if ( nStartPos )
                 nNewPortionPos = SplitTextPortion( nPara, nStartPos ) + 1;
 
-            // Eine leere Portion kann hier stehen, wenn der Absatz leer war,
-            // oder eine Zeile durch einen harten Zeilenumbruch entstanden ist.
+           // Here could be an empty Portion if the paragraph was empty,
+            // or a new line was created by a hard line-break.
             if ( ( nNewPortionPos < pTEParaPortion->GetTextPortions().size() ) &&
                     !pTEParaPortion->GetTextPortions()[nNewPortionPos]->GetLen() )
             {
-                // Dann die leere Portion verwenden.
+                // use the empty Portion
                 sal_uInt16 & r =
                     pTEParaPortion->GetTextPortions()[nNewPortionPos]->GetLen();
                 r = r + nNewChars;
@@ -1922,12 +1908,11 @@
     }
     else
     {
-        // Portion schrumpfen oder ggf. entfernen.
-        // Vor Aufruf dieser Methode muss sichergestellt sein, dass
-        // keine Portions in dem geloeschten Bereich lagen!
+        // Shrink or remove Portion
+        // Before calling this function, ensure that no Portions were in the deleted range!
 
-        // Es darf keine reinragende oder im Bereich startende Portion geben,
-        // also muss nStartPos <= nPos <= nStartPos - nNewChars(neg.) sein
+        // There must be no Portion reaching into or starting within,
+        // thus: nStartPos <= nPos <= nStartPos - nNewChars(neg.)
         sal_uInt16 nPortion = 0;
         sal_uInt16 nPos = 0;
         sal_uInt16 nEnd = nStartPos-nNewChars;
@@ -1947,7 +1932,7 @@
         DBG_ASSERT( pTP, "RecalcTextPortion: Portion not found!" );
         if ( ( nPos == nStartPos ) && ( (nPos+pTP->GetLen()) == nEnd ) )
         {
-            // Portion entfernen;
+            // remove Portion
             pTEParaPortion->GetTextPortions().erase( pTEParaPortion->GetTextPortions().begin() + 
nPortion );
             delete pTP;
         }
@@ -1986,13 +1971,11 @@
 
     const StyleSettings& rStyleSettings = pOutDev->GetSettings().GetStyleSettings();
 
-    // --------------------------------------------------
-    // Ueber alle Absaetze...
-    // --------------------------------------------------
+    // for all paragraphs
     for ( sal_uLong nPara = 0; nPara < mpTEParaPortions->Count(); nPara++ )
     {
         TEParaPortion* pPortion = mpTEParaPortions->GetObject( nPara );
-        // falls beim Tippen Idle-Formatierung, asynchrones Paint.
+        // in case while typing Idle-Formatting, asynchronous Paint
         if ( pPortion->IsInvalid() )
             return;
 
@@ -2000,9 +1983,7 @@
         if ( ( !pPaintArea || ( ( nY + (long)nParaHeight ) > pPaintArea->Top() ) )
                 && ( !pPaintRange || ( ( nPara >= pPaintRange->GetStart().GetPara() ) && ( nPara 
<= pPaintRange->GetEnd().GetPara() ) ) ) )
         {
-            // --------------------------------------------------
-            // Ueber die Zeilen des Absatzes...
-            // --------------------------------------------------
+            // for all lines of the paragraph
             sal_uInt16 nLines = pPortion->GetLines().size();
             sal_uInt16 nIndex = 0;
             for ( sal_uInt16 nLine = 0; nLine < nLines; nLine++ )
@@ -2015,9 +1996,7 @@
                         ( TextPaM( nPara, pLine->GetStart() ) < pPaintRange->GetEnd() ) &&
                         ( TextPaM( nPara, pLine->GetEnd() ) > pPaintRange->GetStart() ) ) ) )
                 {
-                    // --------------------------------------------------
-                    // Ueber die Portions der Zeile...
-                    // --------------------------------------------------
+                    // for all Portions of the line
                     nIndex = pLine->GetStart();
                     for ( sal_uInt16 y = pLine->GetStartPortion(); y <= pLine->GetEndPortion(); 
y++ )
                     {
@@ -2031,7 +2010,7 @@
                         long nTxtWidth = pTextPortion->GetWidth();
                         aTmpPos.X() = rStartPos.X() + ImpGetOutputOffset( nPara, pLine, nIndex, 
nIndex );
 
-                        // nur ausgeben, was im sichtbaren Bereich beginnt:
+                        // only print if starting in the visible region
                         if ( ( ( aTmpPos.X() + nTxtWidth ) >= 0 )
                             && ( !pPaintRange || (
                                 ( TextPaM( nPara, nIndex ) < pPaintRange->GetEnd() ) &&
@@ -2055,7 +2034,7 @@
                                         Point aPos = aTmpPos;
                                         if ( pPaintRange )
                                         {
-                                            // evtl soll nicht alles ausgegeben werden...
+                                            // maybe not print all of it
                                             if ( ( pPaintRange->GetStart().GetPara() == nPara )
                                                     && ( nTmpIndex < 
pPaintRange->GetStart().GetIndex() ) )
                                             {
@@ -2071,14 +2050,14 @@
                                         sal_Bool bDone = sal_False;
                                         if ( pSelStart )
                                         {
-                                            // liegt ein Teil in der Selektion???
+                                            // is a part of it in the selection?
                                             TextPaM aTextStart( nPara, nTmpIndex );
                                             TextPaM aTextEnd( nPara, nEnd );
                                             if ( ( aTextStart < *pSelEnd ) && ( aTextEnd > 
*pSelStart ) )
                                             {
                                                 sal_uInt16 nL;
 
-                                                // 1) Bereich vor Selektion
+                                                // 1) Region before Selection
                                                 if ( aTextStart < *pSelStart )
                                                 {
                                                     nL = pSelStart->GetIndex() - nTmpIndex;
@@ -2088,7 +2067,7 @@
                                                     nTmpIndex = nTmpIndex + nL;
 
                                                 }
-                                                // 2) Bereich mit Selektion
+                                                // 2) Region with Selection
                                                 nL = nEnd-nTmpIndex;
                                                 if ( aTextEnd > *pSelEnd )
                                                     nL = pSelEnd->GetIndex() - nTmpIndex;
@@ -2104,7 +2083,7 @@
                                                     nTmpIndex = nTmpIndex + nL;
                                                 }
 
-                                                // 3) Bereich nach Selektion
+                                                // 3) Region after Selection
                                                 if ( nTmpIndex < nEnd )
                                                 {
                                                     nL = nEnd-nTmpIndex;
@@ -2125,14 +2104,14 @@
                                 break;
                                 case PORTIONKIND_TAB:
                                 {
-                                    // Bei HideSelection() nur Range, pSelection = 0.
+                                    // for HideSelection() only Range, pSelection = 0.
                                     if ( pSelStart || pPaintRange )
                                     {
                                         Rectangle aTabArea( aTmpPos, Point( aTmpPos.X()+nTxtWidth, 
aTmpPos.Y()+mnCharHeight-1 ) );
                                         sal_Bool bDone = sal_False;
                                         if ( pSelStart )
                                         {
-                                            // liegt der Tab in der Selektion???
+                                            // is the Tab in the Selection???
                                             TextPaM aTextStart( nPara, nIndex );
                                             TextPaM aTextEnd( nPara, nIndex+1 );
                                             if ( ( aTextStart < *pSelEnd ) && ( aTextEnd > 
*pSelStart ) )
@@ -2162,7 +2141,7 @@
                 nY += mnCharHeight;
 
                 if ( pPaintArea && ( nY >= pPaintArea->Bottom() ) )
-                    break;  // keine sichtbaren Aktionen mehr...
+                    break;  // no more visible actions
             }
         }
         else
@@ -2171,13 +2150,13 @@
         }
 
         if ( pPaintArea && ( nY > pPaintArea->Bottom() ) )
-            break;  // keine sichtbaren Aktionen mehr...
+            break;  // no more visible actions
     }
 }
 
 sal_Bool TextEngine::CreateLines( sal_uLong nPara )
 {
-    // sal_Bool: Aenderung der Hoehe des Absatzes Ja/Nein - sal_True/sal_False
+    // sal_Bool: changing Height of Paragraph Yes/No - sal_True/sal_False
 
     TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
     TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara );
@@ -2185,12 +2164,9 @@
 
     sal_uInt16 nOldLineCount = pTEParaPortion->GetLines().size();
 
-    // ---------------------------------------------------------------
-    // Schnelle Sonderbehandlung fuer leere Absaetze...
-    // ---------------------------------------------------------------
+    // fast special case for empty paragraphs
     if ( pTEParaPortion->GetNode()->GetText().Len() == 0 )
     {
-        // schnelle Sonderbehandlung...
         if ( !pTEParaPortion->GetTextPortions().empty() )
             pTEParaPortion->GetTextPortions().Reset();
         if ( !pTEParaPortion->GetLines().empty() )
@@ -2204,10 +2180,7 @@
         return nOldLineCount != pTEParaPortion->GetLines().size();
     }
 
-    // ---------------------------------------------------------------
-    // Initialisierung......
-    // ---------------------------------------------------------------
-
+    // initialization
     if ( pTEParaPortion->GetLines().empty() )
     {
         TextLine* pL = new TextLine;
@@ -2230,15 +2203,15 @@
         }
         else if ( ( pTEParaPortion->IsSimpleInvalid() ) && ( nInvalidDiff < 0 ) )
         {
-            // pruefen, ob loeschen ueber Portiongrenzen erfolgte...
-            sal_uInt16 nStart = nInvalidStart;  // DOPPELT !!!!!!!!!!!!!!!
+            // check if deleting across Portion border
+            sal_uInt16 nStart = nInvalidStart;  // duplicate!!!
             sal_uInt16 nEnd = nStart - nInvalidDiff;  // neg.
             bQuickFormat = sal_True;
             sal_uInt16 nPos = 0;
             sal_uInt16 nPortions = pTEParaPortion->GetTextPortions().size();
             for ( sal_uInt16 nTP = 0; nTP < nPortions; nTP++ )
             {
-                // Es darf kein Start/Ende im geloeschten Bereich liegen.
+                // there must be no Start/End in the deleted region
                 TETextPortion* const pTP = pTEParaPortion->GetTextPortions()[ nTP ];
                 nPos = nPos + pTP->GetLen();
                 if ( ( nPos > nStart ) && ( nPos < nEnd ) )
@@ -2255,10 +2228,8 @@
     else
         CreateTextPortions( nPara, nInvalidStart );
 
-    // ---------------------------------------------------------------
-    // Zeile mit InvalidPos suchen, eine Zeile davor beginnen...
-    // Zeilen flaggen => nicht removen !
-    // ---------------------------------------------------------------
+    // search for line with InvalidPos; start a line prior
+    // flag lines => do not remove!
 
     sal_uInt16 nLine = pTEParaPortion->GetLines().size()-1;
     for ( sal_uInt16 nL = 0; nL <= nLine; nL++ )
@@ -2271,16 +2242,14 @@
         }
         pLine->SetValid();
     }
-    // Eine Zeile davor beginnen...
-    // Wenn ganz hinten getippt wird, kann sich die Zeile davor nicht aendern.
+    // start a line before...
+    // if typing at the end, the line before cannot change
     if ( nLine && ( !pTEParaPortion->IsSimpleInvalid() || ( nInvalidEnd < pNode->GetText().Len() ) 
|| ( nInvalidDiff <= 0 ) ) )
         nLine--;
 
     TextLine* pLine = pTEParaPortion->GetLines()[ nLine ];
 
-    // ---------------------------------------------------------------
-    // Ab hier alle Zeilen durchformatieren...
-    // ---------------------------------------------------------------
+    // format all lines starting here
     size_t nDelFromLine = std::numeric_limits<size_t>::max();
     sal_Bool bLineBreak = sal_False;
 
@@ -2300,13 +2269,12 @@
         sal_uInt16 nTmpPos = nIndex;
         sal_uInt16 nTmpPortion = pLine->GetStartPortion();
         long nTmpWidth = mpDoc->GetLeftMargin();
-//      long nXWidth = mnMaxTextWidth ? ( mnMaxTextWidth - mpDoc->GetLeftMargin() ) : 0x7FFFFFFF;
-        // Margin nicht abziehen, ist schon in TmpWidth enthalten.
+        // do not subtract margin; it is included in TmpWidth
         long nXWidth = mnMaxTextWidth ? mnMaxTextWidth : 0x7FFFFFFF;
         if ( nXWidth < nTmpWidth )
             nXWidth = nTmpWidth;
 
-        // Portion suchen, die nicht mehr in Zeile passt....
+        // search for Portion that does not fit anymore into line
         TETextPortion* pPortion = 0;
         sal_Bool bBrokenLine = sal_False;
         bLineBreak = sal_False;
@@ -2321,11 +2289,10 @@
                 long nCurPos = nTmpWidth-mpDoc->GetLeftMargin();
                 nTmpWidth = ((nCurPos/mnDefTab)+1)*mnDefTab+mpDoc->GetLeftMargin();
                 pPortion->GetWidth() = nTmpWidth - nCurPos - mpDoc->GetLeftMargin();
-                // Wenn dies das erste Token in der Zeile ist, und
-                // nTmpWidth > aPaperSize.Width, habe ich eine Endlos-Schleife!
+                // infinite loop, if this is the first token of the line and nTmpWidth > 
aPaperSize.Width !!!
                 if ( ( nTmpWidth >= nXWidth ) && ( nTmpPortion == pLine->GetStartPortion() ) )
                 {
-                    // Aber was jetzt ? Tab passend machen!
+                    // What now? Adjust Tab!
                     pPortion->GetWidth() = nXWidth-1;
                     nTmpWidth = pPortion->GetWidth();
                     bEOL = sal_True;
@@ -2349,7 +2316,7 @@
             nTmpPortion++;
         }
 
-        // das war evtl. eine Portion zu weit:
+        // this was perhaps one Portion too far
         sal_Bool bFixedEnd = sal_False;
         if ( nTmpWidth > nXWidth )
         {
@@ -2394,7 +2361,7 @@
 
         if ( ( ImpGetAlign() == TXTALIGN_CENTER ) || ( ImpGetAlign() == TXTALIGN_RIGHT ) )
         {
-            // Ausrichten...
+            // adjust
             long nTextWidth = 0;
             for ( sal_uInt16 nTP = pLine->GetStartPortion(); nTP <= pLine->GetEndPortion(); nTP++ )
             {
@@ -2415,18 +2382,15 @@
             pLine->SetStartX( mpDoc->GetLeftMargin() );
         }
 
-        // -----------------------------------------------------------------
-        // pruefen, ob die Zeile neu ausgegeben werden muss...
-        // -----------------------------------------------------------------
+         // check if the line has to be printed again
         pLine->SetInvalid();
 
         if ( pTEParaPortion->IsSimpleInvalid() )
         {
-            // Aenderung durch einfache Textaenderung...
-            // Formatierung nicht abbrechen, da Portions evtl. wieder
-            // gesplittet werden muessen!
-            // Wenn irgendwann mal abbrechbar, dann fogende Zeilen Validieren!
-            // Aber ggf. als Valid markieren, damit weniger Ausgabe...
+            // Change due to simple TextChange...
+            // Do not abort formatting, as Portions might have to be split!
+            // Once it is ok to abort, then validate the following lines!
+            // But mark as valid, so reduce printing...
             if ( pLine->GetEnd() < nInvalidStart )
             {
                 if ( *pLine == aSaveLine )
@@ -2455,10 +2419,9 @@
                 }
                 else if ( bQuickFormat && ( nEnd > nInvalidEnd) )
                 {
-                    // Wenn die ungueltige Zeile so endet, dass die naechste an
-                    // der 'gleichen' Textstelle wie vorher beginnt, also nicht
-                    // anders umgebrochen wird, brauche ich dort auch nicht die
-                    // textbreiten neu bestimmen:
+                    // If the invalid line ends such that the next line starts
+                    // at the 'same' position as before (no change in line breaks),
+                    // the text width does not have to be recalcualted.
                     if ( nEnd == ( aSaveLine.GetEnd() + nInvalidDiff ) )
                     {
                         bCalcPortion = sal_False;
@@ -2469,12 +2432,12 @@
             }
         }
 
-        nIndex = pLine->GetEnd();   // naechste Zeile Start = letzte Zeile Ende
-                                    // weil nEnd hinter das letzte Zeichen zeigt!
+        nIndex = pLine->GetEnd();   // next line Start = previous line End
+                                    // because nEnd is past the last char!
 
         sal_uInt16 nEndPortion = pLine->GetEndPortion();
 
-        // Naechste Zeile oder ggf. neue Zeile....
+        // next line or new line
         pLine = 0;
         if ( nLine < pTEParaPortion->GetLines().size()-1 )
             pLine = pTEParaPortion->GetLines()[ ++nLine ];
@@ -2572,7 +2535,7 @@
 
     TextSelection aNewSel( aSel.GetEnd(), aSel.GetEnd() );
 
-    // Damit bei FormatAndUpdate nicht auf die ungueltige Selektion zugegriffen wird.
+    // so that FormatAndUpdate does not access the invalid selection
     if ( GetActiveView() )
         GetActiveView()->ImpSetSelection( aNewSel );
 
@@ -2635,14 +2598,14 @@
                     TextCharAttrib* pAttr = pNode->GetCharAttribs().FindNextAttrib( 
TEXTATTR_HYPERLINK, nTmpStart, nEndPos );
                     nTmpEnd = pAttr ? pAttr->GetStart() : nEndPos;
 
-                    // Text vor dem Attribut
+                    // Text before Attribute
                     aText += pNode->GetText().Copy( nTmpStart, nTmpEnd-nTmpStart );
 
                     if ( pAttr )
                     {
                         nTmpEnd = Min( pAttr->GetEnd(), nEndPos );
 
-                        // z.B. <A HREF="http://www.mopo.de/";>Morgenpost</A>
+                        // e.g. <A HREF="http://www.mopo.de/";>Morgenpost</A>
                         aText.AppendAscii( "<A HREF=\"" );
                         aText += ((const TextAttribHyperLink&) pAttr->GetAttr() ).GetURL();
                         aText.AppendAscii( "\">" );
@@ -2742,12 +2705,11 @@
 
 void TextEngine::SetAttrib( const TextAttrib& rAttr, sal_uLong nPara, sal_uInt16 nStart, 
sal_uInt16 nEnd, sal_Bool bIdleFormatAndUpdate )
 {
-    // Es wird hier erstmal nicht geprueft, ob sich Attribute ueberlappen!
-    // Diese Methode ist erstmal nur fuer einen Editor, der fuer eine Zeile
-    // _schnell_ das Syntax-Highlight einstellen will.
 
-    // Da die TextEngine z.Zt fuer Editoren gedacht ist gibt es auch kein
-    // Undo fuer Attribute!
+    // For now do not check if Attributes overlap!
+    // This function is for TextEditors that want to _quickly_ generate the Syntax-Highlight
+
+    // As TextEngine is currently intended only for TextEditors, there is no Undo for Attributes!
 
     if ( nPara < mpDoc->GetNodes().Count() )
     {
@@ -2803,12 +2765,12 @@
 }
 
 
-// Status & Selektionsanpassung
+// adjust State & Selection
 
 void TextEngine::ImpParagraphInserted( sal_uLong nPara )
 {
-    // Die aktive View braucht nicht angepasst werden, aber bei allen
-    // passiven muss die Selektion angepasst werden:
+    // No adjustment needed for the active View;
+    // but for all passive Views the Selection needs adjusting.
     if ( mpViews->size() > 1 )
     {
         for ( sal_uInt16 nView = mpViews->size(); nView; )

-- 
To view, visit https://gerrit.libreoffice.org/3237
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifc02535cecc24d9362d2534784c659ee8705f751
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Christian M. Heller <christian.heller63@gmail.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.