Kaydet (Commit) e7540ede authored tarafından Philipp Riemer's avatar Philipp Riemer Kaydeden (comit) Bjoern Michaelsen

fdo#39468: translate German comments (=> sw/source/core/crsr)

(removed some old internal StarDivision bug-refs)

Conflicts:

	sw/source/core/crsr/findtxt.cxx
	sw/source/core/crsr/pam.cxx

Change-Id: Ib88500bf3cae5f6d8cfccd50769c27819999c5fe
üst 32a254be
......@@ -235,7 +235,7 @@ SwCallLink::~SwCallLink()
0 != ( pFlyFrm = pFrm->FindFlyFrm() ) && !rShell.IsTableMode() )
{
const SwNodeIndex* pIndex = pFlyFrm->GetFmt()->GetCntnt().GetCntntIdx();
OSL_ENSURE( pIndex, "Fly ohne Cntnt" );
OSL_ENSURE( pIndex, "Fly without Cntnt" );
if (!pIndex)
return;
......
......@@ -111,7 +111,7 @@ namespace
EndAction();
return pMark;
}
// setzt CurCrsr.SPoint
// set CurCrsr.SPoint
bool SwCrsrShell::GotoMark(const ::sw::mark::IMark* const pMark, bool bAtStart)
{
......
This diff is collapsed.
This diff is collapsed.
......@@ -37,9 +37,7 @@
#include <SwRewriter.hxx>
#include <comcore.hrc>
//------------------ Methoden der CrsrShell ---------------------------
// Parameter fuer das Suchen vom FormatCollections
/// parameters for a search for FormatCollections
struct SwFindParaFmtColl : public SwFindParas
{
const SwTxtFmtColl *pFmtColl, *pReplColl;
......@@ -77,15 +75,12 @@ int SwFindParaFmtColl::IsReplaceMode() const
return 0 != pReplColl;
}
// Suchen nach Format-Collections
/// search for Format-Collections
sal_uLong SwCursor::Find( const SwTxtFmtColl& rFmtColl,
SwDocPositions nStart, SwDocPositions nEnde, sal_Bool& bCancel,
FindRanges eFndRngs, const SwTxtFmtColl* pReplFmtColl )
{
// OLE-Benachrichtigung abschalten !!
// switch off OLE-notifications
SwDoc* pDoc = GetDoc();
Link aLnk( pDoc->GetOle2Link() );
pDoc->SetOle2Link( Link() );
......
......@@ -37,7 +37,7 @@ sal_Bool SwPaM::Find( const SwFmt& rFmt, SwMoveFn fnMove,
sal_Bool bSrchForward = fnMove == fnMoveForward;
SwPaM* pPam = MakeRegion( fnMove, pRegion );
// Wenn am Anfang/Ende, aus dem Node moven
// if at beginning/end then move it out of the node
if( bSrchForward
? pPam->GetPoint()->nContent.GetIndex() == pPam->GetCntntNode()->Len()
: !pPam->GetPoint()->nContent.GetIndex() )
......@@ -59,18 +59,19 @@ sal_Bool SwPaM::Find( const SwFmt& rFmt, SwMoveFn fnMove,
{
if( 0 != ( bFound = (pNode->GetFmtColl() == &rFmt) ))
{
// wurde die FormatCollection gefunden, dann handelt es sich auf
// jedenfall um einen SwCntntNode !!
// if a FormatCollection is found then it is definitely a SwCntntNode
// FORWARD: SPoint an das Ende, GetMark zum Anfanf vom Node
// BACKWARD: SPoint zum Anfang, GetMark an das Ende vom Node
// und immer nach der Logik: inkl. Start, exkl. End !!!
// FORWARD: SPoint at the end, GetMark at the beginning of the node
// BACKWARD: SPoint at the beginning, GetMark at the end of the node
// always: incl. start and incl. end
*GetPoint() = *pPam->GetPoint();
SetMark();
pNode->MakeEndIndex( &GetPoint()->nContent );
GetMark()->nContent = 0;
if( !bSrchForward ) // rueckwaerts Suche?
Exchange(); // SPoint und GetMark tauschen
// if backward search, switch point and mark
if( !bSrchForward )
Exchange();
break;
}
}
......
......@@ -132,14 +132,13 @@ String& lcl_CleanStr( const SwTxtNode& rNd, xub_StrLen nStart,
case RES_TXTATR_META:
case RES_TXTATR_METAFIELD:
{
// JP 06.05.98: mit Bug 50100 werden sie als Trenner erwuenscht und nicht
// mehr zum Wort dazu gehoerend.
// MA 23.06.98: mit Bug 51215 sollen sie konsequenterweise auch am
// Satzanfang und -ende ignoriert werden wenn sie Leer sind.
// Dazu werden sie schlicht entfernt. Fuer den Anfang entfernen
// wir sie einfach.
// Fuer das Ende merken wir uns die Ersetzungen und entferenen
// hinterher alle am Stringende (koenten ja 'normale' 0x7f drinstehen
// (1998) they are desired as separators and
// belong not any longer to a word.
// they should also be ignored at a
// beginning/end of a sentence if blank. Those are
// simply removed if first. If at the end, we keep the
// replacement and remove afterwards all at a string's
// end (might be normal 0x7f).
sal_Bool bEmpty = RES_TXTATR_FIELD != pHt->Which() ||
!(static_cast<SwTxtFld const*>(pHt)
->GetFld().GetFld()->ExpandField(true).Len());
......@@ -233,8 +232,7 @@ sal_uInt8 SwPaM::Find( const SearchOptions& rSearchOpt, sal_Bool bSearchInNotes
SwNodeIndex& rNdIdx = pPam->GetPoint()->nNode;
SwIndex& rCntntIdx = pPam->GetPoint()->nContent;
// Wenn am Anfang/Ende, aus dem Node moven
// beim leeren Node nicht weiter
// If a beginning/end, from out of node; stop if empty node
if( bSrchForward
? ( rCntntIdx.GetIndex() == pPam->GetCntntNode()->Len() &&
rCntntIdx.GetIndex() )
......@@ -250,14 +248,9 @@ sal_uInt8 SwPaM::Find( const SearchOptions& rSearchOpt, sal_Bool bSearchInNotes
rCntntIdx.Assign( pNd, nTmpPos );
}
/*
* Ist bFound == sal_True, dann wurde der String gefunden und in
* nStart und nEnde steht der gefundenen String
*/
// If bFound is true then the string was found and is between nStart and nEnd
sal_Bool bFound = sal_False;
/*
* StartPostion im Text oder Anfangsposition
*/
// start position in text or initial position
sal_Bool bFirst = sal_True;
SwCntntNode * pNode;
......@@ -487,15 +480,15 @@ bool SwPaM::DoSearch( const SearchOptions& rSearchOpt, utl::TextSearch& rSTxt,
if( nSearchScript == nCurrScript &&
(rSTxt.*fnMove->fnSearch)( sCleanStr, &nStart, &nEnde, 0 ))
{
// setze den Bereich richtig
// set section correctly
*GetPoint() = *pPam->GetPoint();
SetMark();
// Start und Ende wieder korrigieren !!
// adjust start and end
if( !aFltArr.empty() )
{
xub_StrLen n, nNew;
// bei Rueckwaertssuche die Positionen temp. vertauschen
// if backward search, switch positions temporarily
if( !bSrchForward ) { n = nStart; nStart = nEnde; nEnde = n; }
for( n = 0, nNew = nStart;
......@@ -509,14 +502,15 @@ bool SwPaM::DoSearch( const SearchOptions& rSearchOpt, utl::TextSearch& rSTxt,
;
nEnde = nNew;
// bei Rueckwaertssuche die Positionen temp. vertauschen
// if backward search, switch positions temporarily
if( !bSrchForward ) { n = nStart; nStart = nEnde; nEnde = n; }
}
GetMark()->nContent = nStart; // Startposition setzen
GetMark()->nContent = nStart;
GetPoint()->nContent = nEnde;
if( !bSrchForward ) // rueckwaerts Suche?
Exchange(); // Point und Mark tauschen
// if backward search, switch point and mark
if( !bSrchForward )
Exchange();
bFound = sal_True;
break;
}
......@@ -548,7 +542,7 @@ bool SwPaM::DoSearch( const SearchOptions& rSearchOpt, utl::TextSearch& rSTxt,
return bFound;
}
// Parameter fuers Suchen und Ersetzen von Text
/// parameters for search and replace in text
struct SwFindParaText : public SwFindParas
{
const SearchOptions& rSearchOpt;
......@@ -578,14 +572,13 @@ int SwFindParaText::Find( SwPaM* pCrsr, SwMoveFn fnMove,
sal_Bool bFnd = (sal_Bool)pCrsr->Find( rSearchOpt, bSearchInNotes, aSTxt, fnMove, pRegion, bInReadOnly );
if( bFnd && bReplace ) // String ersetzen ??
if( bFnd && bReplace ) // replace string
{
// Replace-Methode vom SwDoc benutzen
// use replace method in SwDoc
const bool bRegExp(SearchAlgorithms_REGEXP == rSearchOpt.algorithmType);
SwIndex& rSttCntIdx = pCrsr->Start()->nContent;
xub_StrLen nSttCnt = rSttCntIdx.GetIndex();
// damit die Region auch verschoben wird, in den Shell-Cursr-Ring
// mit aufnehmen !!
// add to shell-cursor-ring so that the regions will be moved enventually
Ring *pPrev(0);
if( bRegExp )
{
......@@ -602,7 +595,7 @@ int SwFindParaText::Find( SwPaM* pCrsr, SwMoveFn fnMove,
if( bRegExp )
{
// und die Region wieder herausnehmen:
// and remove region again
Ring *p, *pNext = (Ring*)pRegion;
do {
p = pNext;
......@@ -628,7 +621,7 @@ sal_uLong SwCursor::Find( const SearchOptions& rSearchOpt, sal_Bool bSearchInNot
sal_Bool& bCancel,
FindRanges eFndRngs, int bReplace )
{
// OLE-Benachrichtigung abschalten !!
// switch off OLE-notifications
SwDoc* pDoc = GetDoc();
Link aLnk( pDoc->GetOle2Link() );
pDoc->SetOle2Link( Link() );
......
This diff is collapsed.
......@@ -62,7 +62,7 @@ SwWhichSection fnSectionNext = &GoNextSection;
SwPosSection fnSectionStart = &aFwrd;
SwPosSection fnSectionEnd = &aBwrd;
// Travelling in Tabellen
// Travelling in tables
sal_Bool GotoPrevTable( SwPaM&, SwPosTable, sal_Bool bInReadOnly );
sal_Bool GotoCurrTable( SwPaM&, SwPosTable, sal_Bool bInReadOnly );
sal_Bool GotoNextTable( SwPaM&, SwPosTable, sal_Bool bInReadOnly );
......@@ -73,7 +73,7 @@ SwWhichTable fnTableNext = &GotoNextTable;
SwPosTable fnTableStart = &aFwrd;
SwPosTable fnTableEnd = &aBwrd;
// Travelling in Bereichen
// Travelling in regions
sal_Bool GotoPrevRegion( SwPaM&, SwPosRegion, sal_Bool bInReadOnly );
sal_Bool GotoCurrRegion( SwPaM&, SwPosRegion, sal_Bool bInReadOnly );
sal_Bool GotoCurrRegionAndSkip( SwPaM&, SwPosRegion, sal_Bool bInReadOnly );
......
This diff is collapsed.
......@@ -90,7 +90,7 @@ sal_Bool SwCrsrShell::MoveColumn( SwWhichColumn fnWhichCol, SwPosColumn fnPosCol
if( pCnt )
{
SET_CURR_SHELL( this );
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen, evt. Link callen
SwCallLink aLk( *this ); // watch Crsr-Moves; call Link if needed
SwCrsrSaveState aSaveState( *pCurCrsr );
pCnt->Calc(); // ???
......
......@@ -37,7 +37,7 @@
sal_Bool SwCrsrShell::CallCrsrFN( FNCrsr fnCrsr )
{
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen,
SwCallLink aLk( *this ); // watch Crsr-Moves
SwCursor* pCrsr = getShellCrsr( true );
sal_Bool bRet = (pCrsr->*fnCrsr)();
if( bRet )
......@@ -48,7 +48,7 @@ sal_Bool SwCrsrShell::CallCrsrFN( FNCrsr fnCrsr )
sal_Bool SwCursor::GotoFtnTxt()
{
// springe aus dem Content zur Fussnote
// jump from content to footnote
sal_Bool bRet = sal_False;
SwTxtNode* pTxtNd = GetPoint()->nNode.GetNode().GetTxtNode();
......@@ -124,11 +124,11 @@ sal_Bool SwCrsrShell::GotoFtnTxt()
sal_Bool SwCursor::GotoFtnAnchor()
{
// springe aus der Fussnote zum Anker
// jump from footnote to anchor
const SwNode* pSttNd = GetNode()->FindFootnoteStartNode();
if( pSttNd )
{
// durchsuche alle Fussnoten im Dokument nach diesem StartIndex
// search in all footnotes in document for this StartIndex
const SwTxtFtn* pTxtFtn;
const SwFtnIdxs& rFtnArr = pSttNd->GetDoc()->GetFtnIdxs();
for( sal_uInt16 n = 0; n < rFtnArr.Count(); ++n )
......@@ -151,12 +151,12 @@ sal_Bool SwCursor::GotoFtnAnchor()
sal_Bool SwCrsrShell::GotoFtnAnchor()
{
// springe aus der Fussnote zum Anker
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen,
// jump from footnote to anchor
SwCallLink aLk( *this ); // watch Crsr-Moves
sal_Bool bRet = pCurCrsr->GotoFtnAnchor();
if( bRet )
{
// BUG 5996: Tabellen-Kopfzeile sonderbehandeln
// special treatment for table header row
pCurCrsr->GetPtPos() = Point();
UpdateCrsr( SwCrsrShell::SCROLLWIN | SwCrsrShell::CHKRANGE |
SwCrsrShell::READONLY );
......@@ -183,15 +183,14 @@ sal_Bool SwCursor::GotoNextFtnAnchor()
if( rFtnArr.SeekEntry( GetPoint()->nNode, &nPos ))
{
// es gibt eine Fussnote mit dem Index, suche also die
// naechstgelegene
// there is a footnote with this index, so search also for the next one
if( nPos < rFtnArr.Count() )
{
sal_uLong nNdPos = GetPoint()->nNode.GetIndex();
xub_StrLen nCntPos = GetPoint()->nContent.GetIndex();
pTxtFtn = rFtnArr[ nPos ];
// suche vorewaerts zur naechsten
// search forwards
if( CmpLE( *pTxtFtn, nNdPos, nCntPos ) )
{
pTxtFtn = 0;
......@@ -199,13 +198,13 @@ sal_Bool SwCursor::GotoNextFtnAnchor()
{
pTxtFtn = rFtnArr[ nPos ];
if( !CmpLE( *pTxtFtn, nNdPos, nCntPos ) )
break; // gefunden
break; // found
pTxtFtn = 0;
}
}
else if( nPos )
{
// suche rueckwaerts zur vorherigen
// search backwards
pTxtFtn = 0;
while( nPos )
{
......@@ -213,7 +212,7 @@ sal_Bool SwCursor::GotoNextFtnAnchor()
if( CmpLE( *pTxtFtn, nNdPos, nCntPos ) )
{
pTxtFtn = rFtnArr[ ++nPos ];
break; // gefunden
break; // found
}
}
}
......@@ -243,13 +242,12 @@ sal_Bool SwCursor::GotoPrevFtnAnchor()
if( rFtnArr.SeekEntry( GetPoint()->nNode, &nPos ) )
{
// es gibt eine Fussnote mit dem Index, suche also die
// naechstgelegene
// there is a footnote with this index, so search also for the next one
sal_uLong nNdPos = GetPoint()->nNode.GetIndex();
xub_StrLen nCntPos = GetPoint()->nContent.GetIndex();
pTxtFtn = rFtnArr[ nPos ];
// suche vorwaerts zur naechsten
// search forwards
if( CmpL( *pTxtFtn, nNdPos, nCntPos ))
{
for( ++nPos; nPos < rFtnArr.Count(); ++nPos )
......@@ -264,13 +262,13 @@ sal_Bool SwCursor::GotoPrevFtnAnchor()
}
else if( nPos )
{
// suche rueckwaerts zur vorherigen
// search backwards
pTxtFtn = 0;
while( nPos )
{
pTxtFtn = rFtnArr[ --nPos ];
if( CmpL( *pTxtFtn, nNdPos, nCntPos ))
break; // gefunden
break; // found
pTxtFtn = 0;
}
}
......@@ -303,9 +301,7 @@ sal_Bool SwCrsrShell::GotoPrevFtnAnchor()
return CallCrsrFN( &SwCursor::GotoPrevFtnAnchor );
}
// springe aus dem Rahmen zum Anker
/// jump from border to anchor
sal_Bool SwCrsrShell::GotoFlyAnchor()
{
SET_CURR_SHELL( this );
......@@ -314,13 +310,13 @@ sal_Bool SwCrsrShell::GotoFlyAnchor()
pFrm = pFrm->GetUpper();
} while( pFrm && !pFrm->IsFlyFrm() );
if( !pFrm ) // ist kein FlyFrame
if( !pFrm ) // no FlyFrame
return sal_False;
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen,
SwCallLink aLk( *this ); // watch Crsr-Moves
SwCrsrSaveState aSaveState( *pCurCrsr );
// springe in den BodyFrame, der am naechsten vom Fly liegt
// jump in BodyFrame closest to FlyFrame
SwRect aTmpRect( aCharRect );
if( !pFrm->Frm().IsInside( aTmpRect ))
aTmpRect = pFrm->Frm();
......
......@@ -42,13 +42,13 @@ sal_Bool GotoPrevRegion( SwPaM& rCurCrsr, SwPosRegion fnPosRegion,
0 == ( pNd = aIdx.GetNode().StartOfSectionNode()->GetSectionNode()) )
aIdx--;
if( pNd ) // gibt einen weiteren SectionNode ?
if( pNd ) // is there another section node?
{
if( pNd->GetSection().IsHiddenFlag() ||
( !bInReadOnly &&
pNd->GetSection().IsProtectFlag() ))
{
// geschuetzte/versteckte ueberspringen wir
// skip protected or hidden ones
aIdx.Assign( *pNd, - 1 );
}
else if( fnPosRegion == fnMoveForward )
......@@ -98,13 +98,13 @@ sal_Bool GotoNextRegion( SwPaM& rCurCrsr, SwPosRegion fnPosRegion,
0 == ( pNd = aIdx.GetNode().GetSectionNode()) )
aIdx++;
if( pNd ) // gibt einen weiteren SectionNode ?
if( pNd ) // is there another section node?
{
if( pNd->GetSection().IsHiddenFlag() ||
( !bInReadOnly &&
pNd->GetSection().IsProtectFlag() ))
{
// geschuetzte/versteckte ueberspringen wir
// skip protected or hidden ones
aIdx.Assign( *pNd->EndOfSectionNode(), +1 );
}
else if( fnPosRegion == fnMoveForward )
......@@ -186,7 +186,7 @@ sal_Bool GotoCurrRegionAndSkip( SwPaM& rCurCrsr, SwPosRegion fnPosRegion,
do {
SwCntntNode* pCNd;
if( bMoveBackward ) // ans Ende vom Bereich
if( bMoveBackward ) // to the end of the section
{
SwNodeIndex aIdx( *pNd->EndOfSectionNode() );
pCNd = pNd->GetNodes().GoPrevSection( &aIdx, sal_True, !bInReadOnly );
......@@ -208,10 +208,10 @@ sal_Bool GotoCurrRegionAndSkip( SwPaM& rCurCrsr, SwPosRegion fnPosRegion,
if( &pPos->nNode.GetNode() != pCurrNd ||
pPos->nContent.GetIndex() != nCurrCnt )
// es gab eine Veraenderung
// there was a change
return sal_True;
// dann versuche mal den "Parent" dieser Section
// try also the parent of this section
SwSection* pParent = pNd->GetSection().GetParent();
pNd = pParent ? pParent->GetFmt()->GetSectionNode() : 0;
} while( pNd );
......@@ -232,7 +232,7 @@ sal_Bool SwCursor::MoveRegion( SwWhichRegion fnWhichRegion, SwPosRegion fnPosReg
sal_Bool SwCrsrShell::MoveRegion( SwWhichRegion fnWhichRegion, SwPosRegion fnPosRegion )
{
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen, evt. Link callen
SwCallLink aLk( *this ); // watch Crsr-Moves;call Link if needed
sal_Bool bRet = !pTblCrsr && pCurCrsr->MoveRegion( fnWhichRegion, fnPosRegion );
if( bRet )
UpdateCrsr();
......@@ -254,7 +254,7 @@ sal_Bool SwCursor::GotoRegion( const String& rName )
0 != ( pIdx = pFmt->GetCntnt().GetCntntIdx() ) &&
pIdx->GetNode().GetNodes().IsDocNodes() )
{
// ein Bereich im normalen NodesArr
// area in normal nodes array
SwCrsrSaveState aSaveState( *this );
GetPoint()->nNode = *pIdx;
......@@ -267,11 +267,11 @@ sal_Bool SwCursor::GotoRegion( const String& rName )
sal_Bool SwCrsrShell::GotoRegion( const String& rName )
{
SwCallLink aLk( *this ); // Crsr-Moves ueberwachen,
SwCallLink aLk( *this ); // watch Crsr-Moves;call Link if needed
sal_Bool bRet = !pTblCrsr && pCurCrsr->GotoRegion( rName );
if( bRet )
UpdateCrsr( SwCrsrShell::SCROLLWIN | SwCrsrShell::CHKRANGE |
SwCrsrShell::READONLY ); // und den akt. Updaten
SwCrsrShell::READONLY );
return bRet;
}
......
This diff is collapsed.
......@@ -49,23 +49,23 @@ SwUnoCrsr::~SwUnoCrsr()
SwDoc* pDoc = GetDoc();
if( !pDoc->IsInDtor() )
{
// dann muss der Cursor aus dem Array ausgetragen werden
// then remove cursor from array
SwUnoCrsrTbl& rTbl = (SwUnoCrsrTbl&)pDoc->GetUnoCrsrTbl();
sal_uInt16 nDelPos = rTbl.GetPos( this );
if( USHRT_MAX != nDelPos )
rTbl.Remove( nDelPos );
else {
OSL_ENSURE( !this, "UNO Cursor nicht mehr im Array" );
OSL_ENSURE( !this, "UNO cursor not anymore in array" );
}
}
// den gesamten Ring loeschen!
// delete the whole ring
while( GetNext() != this )
{
Ring* pNxt = GetNext();
pNxt->MoveTo( 0 ); // ausketten
delete pNxt; // und loeschen
pNxt->MoveTo( 0 ); // remove from chain
delete pNxt; // and delete
}
}
......@@ -211,7 +211,7 @@ SwUnoTableCrsr::SwUnoTableCrsr(const SwPosition& rPos)
SwUnoTableCrsr::~SwUnoTableCrsr()
{
while( aTblSel.GetNext() != &aTblSel )
delete aTblSel.GetNext(); // und loeschen
delete aTblSel.GetNext();
}
sal_Bool SwUnoTableCrsr::IsSelOvr( int eFlags )
......
......@@ -143,7 +143,7 @@ void SwVisCrsr::Hide()
void SwVisCrsr::Timeout()
{
OSL_ENSURE( !bIsDragCrsr, "Timer vorher abschalten" );
OSL_ENSURE( !bIsDragCrsr, "stop timer before" );
if( bIsVisible )
{
if ( !pCrsrShell->GetWin() ) // SwFrmFmt::GetGraphic suspends Win temporarily!
......@@ -674,7 +674,7 @@ void SwShellTableCrsr::FillRects()
while( pFrm && !pFrm->IsCellFrm() )
pFrm = pFrm->GetUpper();
OSL_ENSURE( pFrm, "Node nicht in einer Tabelle" );
OSL_ENSURE( pFrm, "Node not in a table" );
while ( pFrm )
{
......@@ -709,7 +709,7 @@ sal_Bool SwShellTableCrsr::IsInside( const Point& rPt ) const
SwFrm* pFrm = pCNd->getLayoutFrm( GetShell()->GetLayout(), &GetPtPos() );
while( pFrm && !pFrm->IsCellFrm() )
pFrm = pFrm->GetUpper();
OSL_ENSURE( pFrm, "Node nicht in einer Tabelle" );
OSL_ENSURE( pFrm, "Node not in a table" );
if( pFrm && pFrm->Frm().IsInside( rPt ) )
return sal_True;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment