diff options
Diffstat (limited to 'Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp')
-rw-r--r-- | Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp | 620 |
1 files changed, 310 insertions, 310 deletions
diff --git a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp b/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp index 7904b1c6653..30bfac34a9f 100644 --- a/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp +++ b/Build/source/libs/graphite-engine/test/ProfileHarness/GrUtfTextSrc.cpp @@ -1,310 +1,310 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: NPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is sila.mozdev.org code.
- *
- * The Initial Developer of the Original Code is
- * Keith Stribley.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the NPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the NPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include <graphite/GrClient.h>
-#include <graphite/ITextSource.h>
-#include <graphite/IGrJustifier.h>
-#include <graphite/IGrEngine.h>
-#include <graphite/SegmentAux.h>
-#include <graphite/Font.h>
-#include <graphite/Segment.h>
-#include <graphite/GraphiteProcess.h>
-#include <graphite/FileFont.h>
-
-#include "GrUtfTextSrc.h"
-
-
-
-GrUtfTextSrc::GrUtfTextSrc()
-: mLength(0),
- mBufferLength8(64), mBufferLength16(64), mBufferLength32(64),
- mData8(NULL), mData16(NULL), mData32(NULL),
- mType(gr::kutf16),
- mForeground(gr::kclrBlack), mBackground(gr::kclrTransparent),
- mSelectForeground(0), mSelectBackground(0),
- mIsSelected(false),
- mFont(NULL),
- mRtl(false)
-{
-
-}
-
-GrUtfTextSrc::~GrUtfTextSrc()
-{
- if (mData8) delete [] mData8;
- if (mData16) delete [] mData16;
- if (mData32) delete [] mData32;
- mSelectionVector.clear();
-}
-
-bool GrUtfTextSrc::setText(const char * pszText, int len)
-{
- return setText((gr::utf8*)pszText, len);
-}
-
-bool GrUtfTextSrc::setText(const gr::utf8 * pszText, int len)
-{
- mType = gr::kutf8;
- mLength = len;
- if (!checkBuffer8()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData8[i] = pszText[i];
- // stray line feeds and other control characters from the html file
- // cause artificial truncation of segments
- if (mData8[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r')
- mData8[i] = 0x20; // ZWSP
- }
- mData8[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-
-bool GrUtfTextSrc::setText(const gr::utf16 * pszText, int len)
-{
- mType = gr::kutf16;
- mLength = len;
- if (!checkBuffer16()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData16[i] = pszText[i];
- // stray line feeds and other control characters from the html file
- // cause artificial truncation of segments
- if (mData16[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r')
- mData16[i] = 0x200B; // ZWSP
- }
- mData16[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-bool GrUtfTextSrc::setText(const gr::utf32 * pszText, int len)
-{
- mType = gr::kutf32;
- mLength = len;
- if (!checkBuffer32()) return false;
-
- for(size_t i = 0; i < mLength; i++)
- {
- mData32[i] = pszText[i];
- }
- mData32[mLength] = '\0'; // zero-terminate
- mSelectionVector.clear();
- mIsSelected = false;
- return true;
-}
-
-bool GrUtfTextSrc::checkBuffer8(void)
-{
- if (!mData8 || mBufferLength8 < mLength + 1)
- {
- do
- {
- mBufferLength8 *= 2;
- } while (mBufferLength8 < mLength + 1);
- if (mData8) delete [] mData8;
- mData8 = new gr::utf8[mBufferLength8];
- }
- return (mData8) ? true : false;
-}
-
-bool GrUtfTextSrc::checkBuffer16(void)
-{
- if (!mData16 || mBufferLength16 < mLength + 1)
- {
- do
- {
- mBufferLength16 *= 2;
- } while (mBufferLength16 < mLength + 1);
- if (mData16) delete [] mData16;
- mData16 = new gr::utf16[mBufferLength16];
- }
- return (mData16) ? true : false;
-}
-
-bool GrUtfTextSrc::checkBuffer32(void)
-{
- if (!mData32 || mBufferLength32 < mLength + 1)
- {
- do
- {
- mBufferLength32 *= 2;
- } while (mBufferLength32 < mLength + 1);
- if (mData32) delete [] mData32;
- mData32 = new gr::utf32[mBufferLength32];
- }
- return (mData32) ? true : false;
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData8 + ichMin, mData8 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData16 + ichMin, mData16 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchwBuffer)
-{
- assert(cch <= mLength);
- if (cch > mLength)
- {
- return 0;
- }
- std::copy(mData32 + ichMin, mData32 + ichMin + cch, prgchwBuffer);
- return (cch - ichMin);
-}
-
-
-bool GrUtfTextSrc::getRightToLeft(gr::toffset ich)
-{
- return mRtl; // assumes src only contains one direction
-}
-
-unsigned int GrUtfTextSrc::getDirectionDepth(gr::toffset ich)
-{
- return (mRtl) ? 1 : 0; // TBD
-}
-
-std::pair<gr::toffset, gr::toffset> GrUtfTextSrc::propertyRange(gr::toffset ich)
-{
- std::pair<gr::toffset, gr::toffset> range(0, mLength);
- if (mIsSelected)
- {
- bool selectState = mSelectionVector[ich];
- // find start
- int s = ich - 1;
- int e = ich + 1;
- if (s > -1)
- for ( ; s >= 0; s--)
- {
- if (mSelectionVector[s] != selectState)
- {
- s++; // backup
- break;
- }
- }
- if (s < 0) s = 0;
- // find end
- for ( ; e < static_cast<int>(mLength); e++)
- {
- if (mSelectionVector[e] != selectState)
- {
- // don't need to backup for end
- break;
- }
- }
- range.first = s;
- range.second = e;
- }
- return range;
-}
-
-size_t GrUtfTextSrc::getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset)
-{
- return 0;
-}
-
-void GrUtfTextSrc::getColors(gr::toffset ich, int * pclrFore, int * pclrBack)
-{
- // selections are handled here
- if (mIsSelected && mSelectionVector[ich])
- {
- *pclrFore = mSelectForeground;
- *pclrBack = mSelectBackground;
- }
- else
- {
- *pclrFore = mForeground;
- *pclrBack = mBackground;
- }
-}
-
-
-// these should be called I hope
-float
-GrUtfTextSrc::getFontSize(gr::toffset ich)
-{
- assert(mFont);
- return mPointSize;
-}
-
-bool
-GrUtfTextSrc::getBold(gr::toffset ich)
-{
- assert(mFont);
-// NS_ASSERTION(false, "unexpected call to getBold");
-// return false;
- return mFont->bold();
-}
-
-bool
-GrUtfTextSrc::getItalic(gr::toffset ich)
-{
- assert(mFont);
- //NS_ASSERTION(false, "unexpected call to getItalic");
- //return false;
- return mFont->italic();
-}
-
-gr::isocode GrUtfTextSrc::getLanguage(gr::toffset ich)
-{
- gr::isocode unknown;
- std::fill_n(unknown.rgch, 4, '\0');
- return unknown;
-}
-
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is sila.mozdev.org code. + * + * The Initial Developer of the Original Code is + * Keith Stribley. + * Portions created by the Initial Developer are Copyright (C) 2004 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include <graphite/GrClient.h> +#include <graphite/ITextSource.h> +#include <graphite/IGrJustifier.h> +#include <graphite/IGrEngine.h> +#include <graphite/SegmentAux.h> +#include <graphite/Font.h> +#include <graphite/Segment.h> +#include <graphite/GraphiteProcess.h> +#include <graphite/FileFont.h> + +#include "GrUtfTextSrc.h" + + + +GrUtfTextSrc::GrUtfTextSrc() +: mLength(0), + mBufferLength8(64), mBufferLength16(64), mBufferLength32(64), + mData8(NULL), mData16(NULL), mData32(NULL), + mType(gr::kutf16), + mForeground(gr::kclrBlack), mBackground(gr::kclrTransparent), + mSelectForeground(0), mSelectBackground(0), + mIsSelected(false), + mFont(NULL), + mRtl(false) +{ + +} + +GrUtfTextSrc::~GrUtfTextSrc() +{ + if (mData8) delete [] mData8; + if (mData16) delete [] mData16; + if (mData32) delete [] mData32; + mSelectionVector.clear(); +} + +bool GrUtfTextSrc::setText(const char * pszText, int len) +{ + return setText((gr::utf8*)pszText, len); +} + +bool GrUtfTextSrc::setText(const gr::utf8 * pszText, int len) +{ + mType = gr::kutf8; + mLength = len; + if (!checkBuffer8()) return false; + + for(size_t i = 0; i < mLength; i++) + { + mData8[i] = pszText[i]; + // stray line feeds and other control characters from the html file + // cause artificial truncation of segments + if (mData8[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r') + mData8[i] = 0x20; // ZWSP + } + mData8[mLength] = '\0'; // zero-terminate + mSelectionVector.clear(); + mIsSelected = false; + return true; +} + + +bool GrUtfTextSrc::setText(const gr::utf16 * pszText, int len) +{ + mType = gr::kutf16; + mLength = len; + if (!checkBuffer16()) return false; + + for(size_t i = 0; i < mLength; i++) + { + mData16[i] = pszText[i]; + // stray line feeds and other control characters from the html file + // cause artificial truncation of segments + if (mData16[i] < 0x0020)//(pszText[i] == '\n' || pszText[i] == '\r') + mData16[i] = 0x200B; // ZWSP + } + mData16[mLength] = '\0'; // zero-terminate + mSelectionVector.clear(); + mIsSelected = false; + return true; +} + +bool GrUtfTextSrc::setText(const gr::utf32 * pszText, int len) +{ + mType = gr::kutf32; + mLength = len; + if (!checkBuffer32()) return false; + + for(size_t i = 0; i < mLength; i++) + { + mData32[i] = pszText[i]; + } + mData32[mLength] = '\0'; // zero-terminate + mSelectionVector.clear(); + mIsSelected = false; + return true; +} + +bool GrUtfTextSrc::checkBuffer8(void) +{ + if (!mData8 || mBufferLength8 < mLength + 1) + { + do + { + mBufferLength8 *= 2; + } while (mBufferLength8 < mLength + 1); + if (mData8) delete [] mData8; + mData8 = new gr::utf8[mBufferLength8]; + } + return (mData8) ? true : false; +} + +bool GrUtfTextSrc::checkBuffer16(void) +{ + if (!mData16 || mBufferLength16 < mLength + 1) + { + do + { + mBufferLength16 *= 2; + } while (mBufferLength16 < mLength + 1); + if (mData16) delete [] mData16; + mData16 = new gr::utf16[mBufferLength16]; + } + return (mData16) ? true : false; +} + +bool GrUtfTextSrc::checkBuffer32(void) +{ + if (!mData32 || mBufferLength32 < mLength + 1) + { + do + { + mBufferLength32 *= 2; + } while (mBufferLength32 < mLength + 1); + if (mData32) delete [] mData32; + mData32 = new gr::utf32[mBufferLength32]; + } + return (mData32) ? true : false; +} + +size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchwBuffer) +{ + assert(cch <= mLength); + if (cch > mLength) + { + return 0; + } + std::copy(mData8 + ichMin, mData8 + ichMin + cch, prgchwBuffer); + return (cch - ichMin); +} + +size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer) +{ + assert(cch <= mLength); + if (cch > mLength) + { + return 0; + } + std::copy(mData16 + ichMin, mData16 + ichMin + cch, prgchwBuffer); + return (cch - ichMin); +} + +size_t GrUtfTextSrc::fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchwBuffer) +{ + assert(cch <= mLength); + if (cch > mLength) + { + return 0; + } + std::copy(mData32 + ichMin, mData32 + ichMin + cch, prgchwBuffer); + return (cch - ichMin); +} + + +bool GrUtfTextSrc::getRightToLeft(gr::toffset ich) +{ + return mRtl; // assumes src only contains one direction +} + +unsigned int GrUtfTextSrc::getDirectionDepth(gr::toffset ich) +{ + return (mRtl) ? 1 : 0; // TBD +} + +std::pair<gr::toffset, gr::toffset> GrUtfTextSrc::propertyRange(gr::toffset ich) +{ + std::pair<gr::toffset, gr::toffset> range(0, mLength); + if (mIsSelected) + { + bool selectState = mSelectionVector[ich]; + // find start + int s = ich - 1; + int e = ich + 1; + if (s > -1) + for ( ; s >= 0; s--) + { + if (mSelectionVector[s] != selectState) + { + s++; // backup + break; + } + } + if (s < 0) s = 0; + // find end + for ( ; e < static_cast<int>(mLength); e++) + { + if (mSelectionVector[e] != selectState) + { + // don't need to backup for end + break; + } + } + range.first = s; + range.second = e; + } + return range; +} + +size_t GrUtfTextSrc::getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset) +{ + return 0; +} + +void GrUtfTextSrc::getColors(gr::toffset ich, int * pclrFore, int * pclrBack) +{ + // selections are handled here + if (mIsSelected && mSelectionVector[ich]) + { + *pclrFore = mSelectForeground; + *pclrBack = mSelectBackground; + } + else + { + *pclrFore = mForeground; + *pclrBack = mBackground; + } +} + + +// these should be called I hope +float +GrUtfTextSrc::getFontSize(gr::toffset ich) +{ + assert(mFont); + return mPointSize; +} + +bool +GrUtfTextSrc::getBold(gr::toffset ich) +{ + assert(mFont); +// NS_ASSERTION(false, "unexpected call to getBold"); +// return false; + return mFont->bold(); +} + +bool +GrUtfTextSrc::getItalic(gr::toffset ich) +{ + assert(mFont); + //NS_ASSERTION(false, "unexpected call to getItalic"); + //return false; + return mFont->italic(); +} + +gr::isocode GrUtfTextSrc::getLanguage(gr::toffset ich) +{ + gr::isocode unknown; + std::fill_n(unknown.rgch, 4, '\0'); + return unknown; +} + |