Proposal/Prototype support for "fill in character" in Calc Number Format Strings
Noel Power
nopower at suse.com
Thu Jul 26 04:06:22 PDT 2012
Hi Johann,
On 24/07/12 10:32, Noel Power wrote:
> Hi Johann,
>
> firstly apologies for the late replying, I have only just got back
> from vacation and am catching up with email.
> On 06/07/12 18:10, Kohei Yoshida wrote:
>> Hi Johann,
>>
>> I hope you don't mind me forwarding this nice work of yours to our
>> main development mailing list, to let other interested developers
>> know of your work. Let me also CC Noel since he's done a very
>> similar work for 3.6. There may be some overlap between his work and
>> yours...
//
Hopefuily I didn't blind you with too many details with the last email.
Put more simply what I would really love is if you could look to see if
we need to amend the width calculation that is located here
http://opengrok.libreoffice.org/xref/core/sc/source/ui/view/output2.cxx#554
and see if we need to include the work you already did. it would be
brilliant to get your input on that and even some patch/code from you to
improve it.
Also if you wish you could help with is the patch for enabling
persisting to odf needs updating to use "<number:fill-character>"
instead of "number:repeated", of course any other general testing. bug
reporting & patches in this area wildly appreciated also. Are you
interested or have any time for any of that?
Noel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120726/a166e33f/attachment.html>
-------------- next part --------------
>From 8a2f12168cb450de589853285871874231ec130f Mon Sep 17 00:00:00 2001
From: Noel Power <noel.power at novell.com>
Date: Tue, 17 Apr 2012 20:37:02 +0100
Subject: [PATCH 2/3] support new xml number:repeated elem for number-style namespace
this is used to define the char to be repeated in a number format
e.g repeat ' ' 0 or more times to fill available space
<number:number-style style:name="N130P0" style:volatile="true">
<number:text> $</number:text>
--> <number:repeated> </number:repeated>
---
xmloff/inc/xmloff/xmlnumfe.hxx | 1 +
xmloff/source/style/xmlnumfe.cxx | 12 ++++++++++++
xmloff/source/style/xmlnumfi.cxx | 10 ++++++++++
3 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/xmloff/inc/xmloff/xmlnumfe.hxx b/xmloff/inc/xmloff/xmlnumfe.hxx
index b1f00e7..9998cad 100644
--- a/xmloff/inc/xmloff/xmlnumfe.hxx
+++ b/xmloff/inc/xmloff/xmlnumfe.hxx
@@ -95,6 +95,7 @@ private:
SAL_DLLPRIVATE void WriteMapElement_Impl( sal_Int32 nOp, double fLimit,
sal_Int32 nKey, sal_Int32 nPart );
+ SAL_DLLPRIVATE void WriteRepeatedElement_Impl( sal_Unicode ch );
SAL_DLLPRIVATE sal_Bool WriteTextWithCurrency_Impl( const ::rtl::OUString& rString,
const ::com::sun::star::lang::Locale& rLocale );
SAL_DLLPRIVATE void ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt32 nKey,
diff --git a/xmloff/source/style/xmlnumfe.cxx b/xmloff/source/style/xmlnumfe.cxx
index 714dcda..71aa5ef 100644
--- a/xmloff/source/style/xmlnumfe.cxx
+++ b/xmloff/source/style/xmlnumfe.cxx
@@ -537,6 +537,14 @@ void SvXMLNumFmtExport::WriteMinutesElement_Impl( sal_Bool bLong )
sal_True, sal_False );
}
+void SvXMLNumFmtExport::WriteRepeatedElement_Impl( sal_Unicode nChar )
+{
+ FinishTextElement_Impl();
+ SvXMLElementExport aElem( rExport, XML_NAMESPACE_NUMBER, XML_REPEATED,
+ sal_True, sal_False );
+ rExport.Characters( OUString::valueOf( nChar ) );
+}
+
void SvXMLNumFmtExport::WriteSecondsElement_Impl( sal_Bool bLong, sal_uInt16 nDecimals )
{
FinishTextElement_Impl();
@@ -1567,6 +1575,10 @@ void SvXMLNumFmtExport::ExportPart_Impl( const SvNumberformat& rFormat, sal_uInt
WriteAMPMElement_Impl(); // short/long?
bAnyContent = sal_True;
break;
+ case NF_SYMBOLTYPE_STAR :
+ if ( pElemStr && pElemStr->Len() > 1 )
+ WriteRepeatedElement_Impl( pElemStr->GetChar( 1 ) );
+ break;
}
nPrevType = nElemType;
++nPos;
diff --git a/xmloff/source/style/xmlnumfi.cxx b/xmloff/source/style/xmlnumfi.cxx
index bd953a3..ecd33b9 100644
--- a/xmloff/source/style/xmlnumfi.cxx
+++ b/xmloff/source/style/xmlnumfi.cxx
@@ -246,6 +246,7 @@ public:
enum SvXMLStyleTokens
{
XML_TOK_STYLE_TEXT,
+ XML_TOK_STYLE_REPEATED,
XML_TOK_STYLE_NUMBER,
XML_TOK_STYLE_SCIENTIFIC_NUMBER,
XML_TOK_STYLE_FRACTION,
@@ -521,6 +522,7 @@ const SvXMLTokenMap& SvXMLNumImpData::GetStyleElemTokenMap()
{
// elements in a style
{ XML_NAMESPACE_NUMBER, XML_TEXT, XML_TOK_STYLE_TEXT },
+ { XML_NAMESPACE_NUMBER, XML_REPEATED, XML_TOK_STYLE_REPEATED },
{ XML_NAMESPACE_NUMBER, XML_NUMBER, XML_TOK_STYLE_NUMBER },
{ XML_NAMESPACE_NUMBER, XML_SCIENTIFIC_NUMBER, XML_TOK_STYLE_SCIENTIFIC_NUMBER },
{ XML_NAMESPACE_NUMBER, XML_FRACTION, XML_TOK_STYLE_FRACTION },
@@ -1104,6 +1106,13 @@ void SvXMLNumFmtElementContext::EndElement()
case XML_TOK_STYLE_TEXT_CONTENT:
rParent.AddToCode( OUString::valueOf((sal_Unicode)'@') );
break;
+ case XML_TOK_STYLE_REPEATED:
+ if ( aContent.getLength() )
+ {
+ rParent.AddToCode( OUString::valueOf((sal_Unicode)'*') );
+ rParent.AddToCode( OUString::valueOf( aContent[0] ) );
+ }
+ break;
case XML_TOK_STYLE_BOOLEAN:
// ignored - only default boolean format is supported
break;
@@ -1436,6 +1445,7 @@ SvXMLImportContext* SvXMLNumFormatContext::CreateChildContext(
switch (nToken)
{
case XML_TOK_STYLE_TEXT:
+ case XML_TOK_STYLE_REPEATED:
case XML_TOK_STYLE_NUMBER:
case XML_TOK_STYLE_SCIENTIFIC_NUMBER:
case XML_TOK_STYLE_FRACTION:
--
1.7.3.4
More information about the LibreOffice
mailing list