2010-10-12 15:59:00 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2000-09-18 16:07:07 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 20:53:02 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-07-21 12:17:04 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
#include "global.hxx"
|
|
|
|
#include "scresid.hxx"
|
|
|
|
#include "impex.hxx"
|
|
|
|
#include "asciiopt.hxx"
|
|
|
|
#include "asciiopt.hrc"
|
2012-01-02 10:55:27 +00:00
|
|
|
#include <comphelper/string.hxx>
|
2000-12-20 11:18:06 +00:00
|
|
|
#include <rtl/tencinfo.h>
|
2001-07-11 15:02:59 +00:00
|
|
|
#include <unotools/transliterationwrapper.hxx>
|
2004-08-23 08:29:17 +00:00
|
|
|
// ause
|
|
|
|
#include "editutil.hxx"
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2002-07-05 14:47:42 +00:00
|
|
|
// ============================================================================
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-12-06 10:36:07 +00:00
|
|
|
static const sal_Char pStrFix[] = "FIX";
|
|
|
|
static const sal_Char pStrMrg[] = "MRG";
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
2002-07-05 14:47:42 +00:00
|
|
|
// ============================================================================
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
ScAsciiOptions::ScAsciiOptions() :
|
2011-03-10 16:55:21 -05:00
|
|
|
bFixedLen ( false ),
|
2000-09-18 16:07:07 +00:00
|
|
|
aFieldSeps ( ';' ),
|
2011-03-10 16:55:21 -05:00
|
|
|
bMergeFieldSeps ( false ),
|
2009-07-27 11:27:09 -04:00
|
|
|
bQuotedFieldAsText(false),
|
2009-07-27 11:43:32 -04:00
|
|
|
bDetectSpecialNumber(false),
|
2004-10-11 11:28:34 +00:00
|
|
|
cTextSep ( cDefaultTextSep ),
|
2011-11-24 12:06:54 +01:00
|
|
|
eCharSet ( osl_getThreadTextEncoding() ),
|
2009-07-27 11:43:32 -04:00
|
|
|
eLang ( LANGUAGE_SYSTEM ),
|
2011-03-10 16:55:21 -05:00
|
|
|
bCharSetSystem ( false ),
|
2000-09-18 16:07:07 +00:00
|
|
|
nStartRow ( 1 ),
|
|
|
|
nInfoCount ( 0 ),
|
|
|
|
pColStart ( NULL ),
|
|
|
|
pColFormat ( NULL )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ScAsciiOptions::ScAsciiOptions(const ScAsciiOptions& rOpt) :
|
|
|
|
bFixedLen ( rOpt.bFixedLen ),
|
|
|
|
aFieldSeps ( rOpt.aFieldSeps ),
|
|
|
|
bMergeFieldSeps ( rOpt.bMergeFieldSeps ),
|
2009-07-27 11:27:09 -04:00
|
|
|
bQuotedFieldAsText(rOpt.bQuotedFieldAsText),
|
2009-07-27 11:43:32 -04:00
|
|
|
bDetectSpecialNumber(rOpt.bDetectSpecialNumber),
|
2000-09-18 16:07:07 +00:00
|
|
|
cTextSep ( rOpt.cTextSep ),
|
|
|
|
eCharSet ( rOpt.eCharSet ),
|
2009-07-27 11:43:32 -04:00
|
|
|
eLang ( rOpt.eLang ),
|
2000-12-20 11:18:06 +00:00
|
|
|
bCharSetSystem ( rOpt.bCharSetSystem ),
|
2000-09-18 16:07:07 +00:00
|
|
|
nStartRow ( rOpt.nStartRow ),
|
|
|
|
nInfoCount ( rOpt.nInfoCount )
|
|
|
|
{
|
|
|
|
if (nInfoCount)
|
|
|
|
{
|
2012-04-10 18:30:07 +02:00
|
|
|
pColStart = new sal_Int32[nInfoCount];
|
2011-01-17 13:20:22 +01:00
|
|
|
pColFormat = new sal_uInt8[nInfoCount];
|
|
|
|
for (sal_uInt16 i=0; i<nInfoCount; i++)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
pColStart[i] = rOpt.pColStart[i];
|
|
|
|
pColFormat[i] = rOpt.pColFormat[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColStart = NULL;
|
|
|
|
pColFormat = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ScAsciiOptions::~ScAsciiOptions()
|
|
|
|
{
|
|
|
|
delete[] pColStart;
|
|
|
|
delete[] pColFormat;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-04-10 18:30:07 +02:00
|
|
|
void ScAsciiOptions::SetColInfo( sal_uInt16 nCount, const sal_Int32* pStart, const sal_uInt8* pFormat )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
delete[] pColStart;
|
|
|
|
delete[] pColFormat;
|
|
|
|
|
|
|
|
nInfoCount = nCount;
|
|
|
|
|
|
|
|
if (nInfoCount)
|
|
|
|
{
|
2012-04-10 18:30:07 +02:00
|
|
|
pColStart = new sal_Int32[nInfoCount];
|
2011-01-17 13:20:22 +01:00
|
|
|
pColFormat = new sal_uInt8[nInfoCount];
|
|
|
|
for (sal_uInt16 i=0; i<nInfoCount; i++)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
pColStart[i] = pStart[i];
|
|
|
|
pColFormat[i] = pFormat[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColStart = NULL;
|
|
|
|
pColFormat = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-08-15 08:29:12 +00:00
|
|
|
void ScAsciiOptions::SetColumnInfo( const ScCsvExpDataVec& rDataVec )
|
2002-07-05 14:47:42 +00:00
|
|
|
{
|
|
|
|
delete[] pColStart;
|
|
|
|
pColStart = NULL;
|
|
|
|
delete[] pColFormat;
|
|
|
|
pColFormat = NULL;
|
|
|
|
|
2002-08-15 08:29:12 +00:00
|
|
|
nInfoCount = static_cast< sal_uInt16 >( rDataVec.size() );
|
2002-07-05 14:47:42 +00:00
|
|
|
if( nInfoCount )
|
|
|
|
{
|
2012-04-10 18:30:07 +02:00
|
|
|
pColStart = new sal_Int32[ nInfoCount ];
|
2002-07-05 14:47:42 +00:00
|
|
|
pColFormat = new sal_uInt8[ nInfoCount ];
|
|
|
|
for( sal_uInt16 nIx = 0; nIx < nInfoCount; ++nIx )
|
|
|
|
{
|
2002-08-15 08:29:12 +00:00
|
|
|
pColStart[ nIx ] = rDataVec[ nIx ].mnIndex;
|
|
|
|
pColFormat[ nIx ] = rDataVec[ nIx ].mnType;
|
2002-07-05 14:47:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
ScAsciiOptions& ScAsciiOptions::operator=( const ScAsciiOptions& rCpy )
|
|
|
|
{
|
|
|
|
SetColInfo( rCpy.nInfoCount, rCpy.pColStart, rCpy.pColFormat );
|
|
|
|
|
|
|
|
bFixedLen = rCpy.bFixedLen;
|
|
|
|
aFieldSeps = rCpy.aFieldSeps;
|
|
|
|
bMergeFieldSeps = rCpy.bMergeFieldSeps;
|
2009-07-27 11:27:09 -04:00
|
|
|
bQuotedFieldAsText = rCpy.bQuotedFieldAsText;
|
2000-09-18 16:07:07 +00:00
|
|
|
cTextSep = rCpy.cTextSep;
|
|
|
|
eCharSet = rCpy.eCharSet;
|
2000-12-20 11:18:06 +00:00
|
|
|
bCharSetSystem = rCpy.bCharSetSystem;
|
2000-09-18 16:07:07 +00:00
|
|
|
nStartRow = rCpy.nStartRow;
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-01-17 13:20:22 +01:00
|
|
|
sal_Bool ScAsciiOptions::operator==( const ScAsciiOptions& rCmp ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
if ( bFixedLen == rCmp.bFixedLen &&
|
|
|
|
aFieldSeps == rCmp.aFieldSeps &&
|
|
|
|
bMergeFieldSeps == rCmp.bMergeFieldSeps &&
|
2009-07-27 11:27:09 -04:00
|
|
|
bQuotedFieldAsText == rCmp.bQuotedFieldAsText &&
|
2000-09-18 16:07:07 +00:00
|
|
|
cTextSep == rCmp.cTextSep &&
|
|
|
|
eCharSet == rCmp.eCharSet &&
|
2000-12-20 11:18:06 +00:00
|
|
|
bCharSetSystem == rCmp.bCharSetSystem &&
|
2000-09-18 16:07:07 +00:00
|
|
|
nStartRow == rCmp.nStartRow &&
|
|
|
|
nInfoCount == rCmp.nInfoCount )
|
|
|
|
{
|
2011-05-21 15:04:26 +02:00
|
|
|
OSL_ENSURE( !nInfoCount || (pColStart && pColFormat && rCmp.pColStart && rCmp.pColFormat),
|
2000-09-18 16:07:07 +00:00
|
|
|
"0-Zeiger in ScAsciiOptions" );
|
2011-01-17 13:20:22 +01:00
|
|
|
for (sal_uInt16 i=0; i<nInfoCount; i++)
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( pColStart[i] != rCmp.pColStart[i] ||
|
|
|
|
pColFormat[i] != rCmp.pColFormat[i] )
|
2011-03-10 16:55:21 -05:00
|
|
|
return false;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-01-17 13:20:22 +01:00
|
|
|
return sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2011-03-10 16:55:21 -05:00
|
|
|
return false;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Der Options-String darf kein Semikolon mehr enthalten (wegen Pickliste)
|
|
|
|
// darum ab Version 336 Komma stattdessen
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
void ScAsciiOptions::ReadFromString( const String& rString )
|
|
|
|
{
|
2012-01-02 10:55:27 +00:00
|
|
|
xub_StrLen nCount = comphelper::string::getTokenCount(rString, ',');
|
2000-09-18 16:07:07 +00:00
|
|
|
String aToken;
|
|
|
|
xub_StrLen nSub;
|
|
|
|
xub_StrLen i;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Feld-Trenner
|
|
|
|
//
|
|
|
|
|
|
|
|
if ( nCount >= 1 )
|
|
|
|
{
|
2011-03-10 16:55:21 -05:00
|
|
|
bFixedLen = bMergeFieldSeps = false;
|
2000-09-18 16:07:07 +00:00
|
|
|
aFieldSeps.Erase();
|
|
|
|
|
|
|
|
aToken = rString.GetToken(0,',');
|
|
|
|
if ( aToken.EqualsAscii(pStrFix) )
|
2011-01-17 13:20:22 +01:00
|
|
|
bFixedLen = sal_True;
|
2012-01-02 10:55:27 +00:00
|
|
|
nSub = comphelper::string::getTokenCount(aToken, '/');
|
2000-09-18 16:07:07 +00:00
|
|
|
for ( i=0; i<nSub; i++ )
|
|
|
|
{
|
|
|
|
String aCode = aToken.GetToken( i, '/' );
|
|
|
|
if ( aCode.EqualsAscii(pStrMrg) )
|
2011-01-17 13:20:22 +01:00
|
|
|
bMergeFieldSeps = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
sal_Int32 nVal = aCode.ToInt32();
|
|
|
|
if ( nVal )
|
|
|
|
aFieldSeps += (sal_Unicode) nVal;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Text-Trenner
|
|
|
|
//
|
|
|
|
|
|
|
|
if ( nCount >= 2 )
|
|
|
|
{
|
|
|
|
aToken = rString.GetToken(1,',');
|
|
|
|
sal_Int32 nVal = aToken.ToInt32();
|
|
|
|
cTextSep = (sal_Unicode) nVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Zeichensatz
|
|
|
|
//
|
|
|
|
|
|
|
|
if ( nCount >= 3 )
|
|
|
|
{
|
|
|
|
aToken = rString.GetToken(2,',');
|
2000-12-20 11:18:06 +00:00
|
|
|
eCharSet = ScGlobal::GetCharsetValue( aToken );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Startzeile
|
|
|
|
//
|
|
|
|
|
2010-06-02 16:27:29 +02:00
|
|
|
if ( nCount >= 4 )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-06-02 16:27:29 +02:00
|
|
|
aToken = rString.GetToken(3,',');
|
2000-09-18 16:07:07 +00:00
|
|
|
nStartRow = aToken.ToInt32();
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Spalten-Infos
|
|
|
|
//
|
|
|
|
|
2010-06-02 16:27:29 +02:00
|
|
|
if ( nCount >= 5 )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
delete[] pColStart;
|
|
|
|
delete[] pColFormat;
|
|
|
|
|
2010-06-02 16:27:29 +02:00
|
|
|
aToken = rString.GetToken(4,',');
|
2012-01-02 10:55:27 +00:00
|
|
|
nSub = comphelper::string::getTokenCount(aToken, '/');
|
2000-09-18 16:07:07 +00:00
|
|
|
nInfoCount = nSub / 2;
|
|
|
|
if (nInfoCount)
|
|
|
|
{
|
2012-04-10 18:30:07 +02:00
|
|
|
pColStart = new sal_Int32[nInfoCount];
|
2011-01-17 13:20:22 +01:00
|
|
|
pColFormat = new sal_uInt8[nInfoCount];
|
|
|
|
for (sal_uInt16 nInfo=0; nInfo<nInfoCount; nInfo++)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2012-04-10 18:30:07 +02:00
|
|
|
pColStart[nInfo] = (sal_Int32) aToken.GetToken( 2*nInfo, '/' ).ToInt32();
|
2011-01-17 13:20:22 +01:00
|
|
|
pColFormat[nInfo] = (sal_uInt8) aToken.GetToken( 2*nInfo+1, '/' ).ToInt32();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColStart = NULL;
|
|
|
|
pColFormat = NULL;
|
|
|
|
}
|
|
|
|
}
|
2009-07-27 11:27:09 -04:00
|
|
|
|
2010-06-02 16:27:29 +02:00
|
|
|
// Language
|
|
|
|
if (nCount >= 6)
|
|
|
|
{
|
|
|
|
aToken = rString.GetToken(5, ',');
|
|
|
|
eLang = static_cast<LanguageType>(aToken.ToInt32());
|
|
|
|
}
|
|
|
|
|
2009-07-27 11:27:09 -04:00
|
|
|
// Import quoted field as text.
|
2009-07-27 11:43:32 -04:00
|
|
|
if (nCount >= 7)
|
2009-07-27 11:27:09 -04:00
|
|
|
{
|
2009-07-27 11:43:32 -04:00
|
|
|
aToken = rString.GetToken(6, ',');
|
2009-07-27 11:27:09 -04:00
|
|
|
bQuotedFieldAsText = aToken.EqualsAscii("true") ? true : false;
|
|
|
|
}
|
2009-07-27 11:43:32 -04:00
|
|
|
|
|
|
|
// Detect special nubmers.
|
|
|
|
if (nCount >= 8)
|
|
|
|
{
|
|
|
|
aToken = rString.GetToken(7, ',');
|
|
|
|
bDetectSpecialNumber = aToken.EqualsAscii("true") ? true : false;
|
|
|
|
}
|
2011-01-27 13:25:09 +01:00
|
|
|
else
|
|
|
|
bDetectSpecialNumber = sal_True; // default of versions that didn't add the parameter
|
|
|
|
|
|
|
|
// 9th token is used for "Save as shown" in export options
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String ScAsciiOptions::WriteToString() const
|
|
|
|
{
|
|
|
|
String aOutStr;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Feld-Trenner
|
|
|
|
//
|
|
|
|
|
|
|
|
if ( bFixedLen )
|
|
|
|
aOutStr.AppendAscii(pStrFix);
|
|
|
|
else if ( !aFieldSeps.Len() )
|
|
|
|
aOutStr += '0';
|
|
|
|
else
|
|
|
|
{
|
|
|
|
xub_StrLen nLen = aFieldSeps.Len();
|
|
|
|
for (xub_StrLen i=0; i<nLen; i++)
|
|
|
|
{
|
|
|
|
if (i)
|
|
|
|
aOutStr += '/';
|
|
|
|
aOutStr += String::CreateFromInt32(aFieldSeps.GetChar(i));
|
|
|
|
}
|
|
|
|
if ( bMergeFieldSeps )
|
|
|
|
{
|
|
|
|
aOutStr += '/';
|
|
|
|
aOutStr.AppendAscii(pStrMrg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
aOutStr += ','; // Token-Ende
|
|
|
|
|
|
|
|
//
|
|
|
|
// Text-Trenner
|
|
|
|
//
|
|
|
|
|
|
|
|
aOutStr += String::CreateFromInt32(cTextSep);
|
|
|
|
aOutStr += ','; // Token-Ende
|
|
|
|
|
|
|
|
//
|
|
|
|
// Zeichensatz
|
|
|
|
//
|
|
|
|
|
2000-12-20 11:18:06 +00:00
|
|
|
if ( bCharSetSystem ) // force "SYSTEM"
|
|
|
|
aOutStr += ScGlobal::GetCharsetString( RTL_TEXTENCODING_DONTKNOW );
|
|
|
|
else
|
|
|
|
aOutStr += ScGlobal::GetCharsetString( eCharSet );
|
2000-09-18 16:07:07 +00:00
|
|
|
aOutStr += ','; // Token-Ende
|
|
|
|
|
|
|
|
//
|
|
|
|
// Startzeile
|
|
|
|
//
|
|
|
|
|
|
|
|
aOutStr += String::CreateFromInt32(nStartRow);
|
|
|
|
aOutStr += ','; // Token-Ende
|
|
|
|
|
|
|
|
//
|
|
|
|
// Spalten-Infos
|
|
|
|
//
|
|
|
|
|
2011-05-21 15:04:26 +02:00
|
|
|
OSL_ENSURE( !nInfoCount || (pColStart && pColFormat), "0-Zeiger in ScAsciiOptions" );
|
2011-01-17 13:20:22 +01:00
|
|
|
for (sal_uInt16 nInfo=0; nInfo<nInfoCount; nInfo++)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
if (nInfo)
|
|
|
|
aOutStr += '/';
|
|
|
|
aOutStr += String::CreateFromInt32(pColStart[nInfo]);
|
|
|
|
aOutStr += '/';
|
|
|
|
aOutStr += String::CreateFromInt32(pColFormat[nInfo]);
|
|
|
|
}
|
|
|
|
|
2010-06-02 16:27:29 +02:00
|
|
|
// #i112025# the options string is used in macros and linked sheets,
|
|
|
|
// so new options must be added at the end, to remain compatible
|
|
|
|
|
|
|
|
aOutStr += ',';
|
|
|
|
|
|
|
|
// Language
|
|
|
|
aOutStr += String::CreateFromInt32(eLang);
|
2009-07-27 11:27:09 -04:00
|
|
|
aOutStr += ',';
|
|
|
|
|
|
|
|
// Import quoted field as text.
|
|
|
|
aOutStr += String::CreateFromAscii(bQuotedFieldAsText ? "true" : "false");
|
2009-07-27 11:43:32 -04:00
|
|
|
aOutStr += ',';
|
|
|
|
|
|
|
|
// Detect special nubmers.
|
|
|
|
aOutStr += String::CreateFromAscii(bDetectSpecialNumber ? "true" : "false");
|
2009-07-27 11:27:09 -04:00
|
|
|
|
2011-01-27 13:25:09 +01:00
|
|
|
// 9th token is used for "Save as shown" in export options
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
return aOutStr;
|
|
|
|
}
|
|
|
|
|
2010-10-12 15:59:00 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|