/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 . */ #include "fonthdl.hxx" #include #include #include #include #include #include using namespace ::com::sun::star; using namespace ::xmloff::token; static const SvXMLEnumMapEntry* lcl_getFontFamilyGenericMapping() { static SvXMLEnumMapEntry const aFontFamilyGenericMapping[] = { { XML_DECORATIVE, FAMILY_DECORATIVE }, { XML_MODERN, FAMILY_MODERN }, { XML_ROMAN, FAMILY_ROMAN }, { XML_SCRIPT, FAMILY_SCRIPT }, { XML_SWISS, FAMILY_SWISS }, { XML_SYSTEM, FAMILY_SYSTEM }, { XML_TOKEN_INVALID, (FontFamily)0 } }; return aFontFamilyGenericMapping; } static SvXMLEnumMapEntry const aFontPitchMapping[] = { { XML_FIXED, PITCH_FIXED }, { XML_VARIABLE, PITCH_VARIABLE }, { XML_TOKEN_INVALID, (FontPitch)0 } }; // class XMLFontFamilyNamePropHdl XMLFontFamilyNamePropHdl::~XMLFontFamilyNamePropHdl() { // Nothing to do } bool XMLFontFamilyNamePropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const { bool bRet = false; OUStringBuffer sValue; sal_Int32 nPos = 0; do { sal_Int32 nFirst = nPos; nPos = ::sax::Converter::indexOfComma( rStrImpValue, nPos ); sal_Int32 nLast = (-1 == nPos ? rStrImpValue.getLength() - 1 : nPos - 1); // skip trailing blanks while( nLast > nFirst && ' ' == rStrImpValue[nLast] ) nLast--; // skip leading blanks while(nFirst <= nLast && ' ' == rStrImpValue[nFirst]) nFirst++; // remove quotes sal_Unicode c = nFirst > nLast ? 0 : rStrImpValue[nFirst]; if( nFirst < nLast && ('\'' == c || '\"' == c) && rStrImpValue[nLast] == c ) { nFirst++; nLast--; } if( nFirst <= nLast ) { if( !sValue.isEmpty() ) sValue.append(';'); sValue.append(rStrImpValue.copy( nFirst, nLast-nFirst+1)); } if( -1 != nPos ) nPos++; } while( -1 != nPos ); if (!sValue.isEmpty()) { rValue <<= sValue.makeStringAndClear(); bRet = true; } return bRet; } bool XMLFontFamilyNamePropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const { bool bRet = false; OUString aStrFamilyName; if( rValue >>= aStrFamilyName ) { OUStringBuffer sValue( aStrFamilyName.getLength() + 2 ); sal_Int32 nPos = 0; do { sal_Int32 nFirst = nPos; nPos = aStrFamilyName.indexOf( ';', nPos ); sal_Int32 nLast = (-1 == nPos ? aStrFamilyName.getLength() : nPos); // Set position to the character behind the ';', so we won't // forget this. if( -1 != nPos ) nPos++; // If the property value was empty, we stop now. // If there is a ';' at the first position, the empty name // at the start will be removed. if( 0 == nLast ) continue; // nFirst and nLast now denote the first and last character of // one font name. nLast--; // skip trailing blanks while( nLast > nFirst && ' ' == aStrFamilyName[nLast] ) nLast--; // skip leading blanks while( nFirst <= nLast && ' ' == aStrFamilyName[nFirst] ) nFirst++; if( nFirst <= nLast ) { if( !sValue.isEmpty() ) { sValue.append( ',' ); sValue.append( ' ' ); } sal_Int32 nLen = nLast-nFirst+1; OUString sFamily( aStrFamilyName.copy( nFirst, nLen ) ); bool bQuote = false; for( sal_Int32 i=0; i < nLen; i++ ) { sal_Unicode c = sFamily[i]; if( ' ' == c || ',' == c ) { bQuote = true; break; } } if( bQuote ) sValue.append( '\'' ); sValue.append( sFamily ); if( bQuote ) sValue.append( '\'' ); } } while( -1 != nPos ); rStrExpValue = sValue.makeStringAndClear(); bRet = true; } return bRet; } // class XMLFontFamilyPropHdl XMLFontFamilyPropHdl::~XMLFontFamilyPropHdl() { // Nothing to do } bool XMLFontFamilyPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const { FontFamily eNewFamily; bool bRet = SvXMLUnitConverter::convertEnum( eNewFamily, rStrImpValue, lcl_getFontFamilyGenericMapping() ); if( bRet ) rValue <<= (sal_Int16)eNewFamily; return bRet; } bool XMLFontFamilyPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const { bool bRet = false; OUStringBuffer aOut; sal_Int16 nFamily = sal_Int16(); if( rValue >>= nFamily ) { FontFamily eFamily = (FontFamily)nFamily; if( eFamily != FAMILY_DONTKNOW ) bRet = SvXMLUnitConverter::convertEnum( aOut, eFamily, lcl_getFontFamilyGenericMapping() ); } rStrExpValue = aOut.makeStringAndClear(); return bRet; } // class XMLFontEncodingPropHdl XMLFontEncodingPropHdl::~XMLFontEncodingPropHdl() { // Nothing to do } bool XMLFontEncodingPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const { if( IsXMLToken( rStrImpValue, XML_X_SYMBOL ) ) rValue <<= (sal_Int16) RTL_TEXTENCODING_SYMBOL; return true; } bool XMLFontEncodingPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const { bool bRet = false; OUStringBuffer aOut; sal_Int16 nSet = sal_Int16(); if( rValue >>= nSet ) { if( (rtl_TextEncoding)nSet == RTL_TEXTENCODING_SYMBOL ) { aOut.append( GetXMLToken(XML_X_SYMBOL) ); rStrExpValue = aOut.makeStringAndClear(); bRet = true; } } return bRet; } // class XMLFontPitchPropHdl XMLFontPitchPropHdl::~XMLFontPitchPropHdl() { // Nothing to do } bool XMLFontPitchPropHdl::importXML( const OUString& rStrImpValue, uno::Any& rValue, const SvXMLUnitConverter& ) const { FontPitch eNewPitch; bool bRet = SvXMLUnitConverter::convertEnum( eNewPitch, rStrImpValue, aFontPitchMapping ); if( bRet ) rValue <<= (sal_Int16)eNewPitch; return bRet; } bool XMLFontPitchPropHdl::exportXML( OUString& rStrExpValue, const uno::Any& rValue, const SvXMLUnitConverter& ) const { bool bRet = false; sal_Int16 nPitch = sal_Int16(); OUStringBuffer aOut; FontPitch ePitch = PITCH_DONTKNOW; if( rValue >>= nPitch ) ePitch = (FontPitch)nPitch; if( PITCH_DONTKNOW != ePitch ) { bRet = SvXMLUnitConverter::convertEnum( aOut, ePitch, aFontPitchMapping, XML_FIXED ); rStrExpValue = aOut.makeStringAndClear(); } return bRet; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ppup LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2024-11-28svx: Simplify "Go to Page" dialog, let SpinButton do its jobMichael Weghorn
2024-11-12tdf#162753 - Hyperlink dialog: trim leading/trailing whitespaces of URLsAndreas Heinisch
2024-11-11tdf#162753 - Propose clipboard content only for option internetAndreas Heinisch
2024-11-06tdf#162753 - Hyperlink dialog: preset only syntactically valid hyperlinksAndreas Heinisch
2024-07-10sw: uitest for c519de2296Xisco Fauli
2024-01-23tdf#97361 Make unittests more pythonic: XIndexAccessChenxiong Qi
2023-08-22tdf#101895 don't unconditionally default to ch[ar]/lineCaolán McNamara
2023-07-27tdf#146576 - Propose clipboard content when inserting a hyperlinkAndreas Heinisch
2023-04-28tdf#90496 - Remember last used view in hyperlink dialogAndreas Heinisch
2023-03-17tdf#132293 remove some unused imports from uitestsUday Sharma
2023-03-03tdf#137883 filter: use en-dash instead of hyphen in UINamesMichael Stahl
2023-02-20tdf#137883 filter: rename DOCX filters to be less confusingMichael Stahl
2023-02-07uitest: reset value when changing the measurement unitXisco Fauli
2023-02-01uitest: sw: remove duplicated testsXisco Fauli
2023-01-31uitest: remove wait_until_file_is_availableXisco Fauli
2023-01-30sw: blind fix for uitest hangXisco Fauli
2023-01-11tdf#124088 - Propose AutoText and shortcut name based on selected textAndreas Heinisch
2022-12-19tdf#152295 sw sd UI: don't reset tiled image size by Area tabTibor Nagy
2022-12-07tdf#53023 - Revert hanging unit testAndreas Heinisch
2022-12-07tdf#53023 - Remove last empty paragraph from auto textAndreas Heinisch
2022-12-07Revert "tdf#53023 - Remove last empty paragraph from auto text"Andreas Heinisch
2022-12-06tdf#53023 - Remove last empty paragraph from auto textAndreas Heinisch
2022-08-09uitest: sw: add test for add and remove in customize dialogXisco Fauli
2022-08-09uitest: sw: remove duplicated testXisco Fauli
2022-06-30tdf#132293 remove unused imports and unused variables in swm.hashemian
2022-04-12tdf#56363 - UI test fails if the selected font is not presentAndreas Heinisch
2022-04-09tdf#56363 - Search font family without the font feature after the colonAndreas Heinisch
2022-02-28uitest: simplify tests even moreXisco Fauli
2022-02-28uitest: remove duplicated testsXisco Fauli
2022-01-15tdf#146754: consider xyz:123 as host:port when parsing URLs smartMike Kaganski
2022-01-10uitest: executeCommand doesn't return anythingXisco Fauli
2021-12-15uitest: simplify codeXisco Fauli
2021-12-01uitest: fix consistency of footersXisco Fauli
2021-12-01uitest: fix license headersXisco Fauli
2021-11-09uitest: pos must be of type strXisco Fauli
2021-10-29tdf#141193 Added support for bar codes in qrcode dialog box[API Change].homeboy445