1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _SV_GRAPHITETEXTSRC_HXX 25 #define _SV_GRAPHITETEXTSRC_HXX 26 // Description: Implements the Graphite interfaces IGrTextSource and 27 // IGrGraphics which provide Graphite with access to the 28 // app's text storage system and the platform's font and 29 // graphics systems. 30 31 // We need this to enable namespace support in libgrengine headers. 32 #define GR_NAMESPACE 33 34 // Standard Library 35 #include <stdexcept> 36 // Platform 37 38 #ifndef _SVWIN_H 39 #include <tools/svwin.h> 40 #endif 41 42 #include <svsys.h> 43 #include <salgdi.hxx> 44 #include <sallayout.hxx> 45 46 // Module 47 #include "vcl/dllapi.h" 48 49 // Libraries 50 #include <preextstl.h> 51 #include <graphite/GrClient.h> 52 #include <graphite/Font.h> 53 #include <graphite/ITextSource.h> 54 #include <postextstl.h> 55 56 // Module type definitions and forward declarations. 57 // 58 namespace grutils 59 { 60 class GrFeatureParser; 61 } 62 // Implements the Adaptor pattern to adapt the LayoutArgs and the ServerFont interfaces to the 63 // gr::IGrTextSource interface. 64 // @author tse 65 // 66 class TextSourceAdaptor : public gr::ITextSource 67 { 68 public: 69 TextSourceAdaptor(ImplLayoutArgs &layout_args, const int nContextLen) throw(); 70 ~TextSourceAdaptor(); 71 virtual gr::UtfType utfEncodingForm(); 72 virtual size_t getLength(); 73 virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf32 * prgchBuffer); 74 virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf16 * prgchwBuffer); 75 virtual size_t fetch(gr::toffset ichMin, size_t cch, gr::utf8 * prgchsBuffer); 76 virtual bool getRightToLeft(gr::toffset ich); 77 virtual unsigned int getDirectionDepth(gr::toffset ich); 78 virtual float getVerticalOffset(gr::toffset ich); 79 virtual gr::isocode getLanguage(gr::toffset ich); 80 81 virtual ext_std::pair<gr::toffset, gr::toffset> propertyRange(gr::toffset ich); 82 virtual size_t getFontFeatures(gr::toffset ich, gr::FeatureSetting * prgfset); 83 virtual bool sameSegment(gr::toffset ich1, gr::toffset ich2); 84 virtual bool featureVariations() { return false; } 85 86 operator ImplLayoutArgs & () throw(); 87 void setFeatures(const grutils::GrFeatureParser * pFeatures); 88 const ImplLayoutArgs & getLayoutArgs() const { return maLayoutArgs; } 89 size_t getContextLength() const { return mnEnd; }; 90 inline void switchLayoutArgs(ImplLayoutArgs & newArgs); 91 private: 92 // Prevent the generation of a default assignment operator. 93 TextSourceAdaptor & operator=(const TextSourceAdaptor &); 94 95 void getCharProperties(const int, int &, int &, size_t &); 96 97 ImplLayoutArgs maLayoutArgs; 98 size_t mnEnd; 99 const grutils::GrFeatureParser * mpFeatures; 100 }; 101 102 inline TextSourceAdaptor::TextSourceAdaptor(ImplLayoutArgs &la, const int nContextLen) throw() 103 : maLayoutArgs(la), 104 mnEnd(std::min(la.mnLength, nContextLen)), 105 mpFeatures(NULL) 106 { 107 } 108 109 inline TextSourceAdaptor::operator ImplLayoutArgs & () throw() { 110 return maLayoutArgs; 111 } 112 113 inline void TextSourceAdaptor::switchLayoutArgs(ImplLayoutArgs & aNewArgs) 114 { 115 mnEnd += aNewArgs.mnMinCharPos - maLayoutArgs.mnMinCharPos; 116 maLayoutArgs = aNewArgs; 117 } 118 119 #endif 120