Hi Eike
On 24/04/12 20:31, Eike Rathke wrote:
Hi Noel,
Sorry, this took too long..
No problem, thanks for taking the time and having a look
On Wednesday, 2012-04-18 21:01:41 +0100, Noel Power wrote:
I've been looking at providing support for the repeating character
in number formats. I've been playing abit with the code and what I
have sofar seems to work reasonably well ( no doubt there are plenty
of edge cases still to be discovered ) But.. life would be simpler
I think if we had just stored a plain format code like docx seems to
rather than the fancy pants xml that's there now :/
Well, try to exactly specify that format code syntax for an open
standard, with all it's quirks MS may have hidden.. ironically even
OOXML didn't attempt that. Yes, _they_ got away with that..
;-) ahh my gripe is the xml seems a little over the top where a plain
string format would do ( and be possibly be easier to change ) also
would be closer or same as what's actually used in the formatter. The
fact the format may not be well specified by MS is another matter ( and
yes, their specification(s) to do with that are fuzzy ) :-) But really I
am only complaining because I can't figure out a way not to have to
incur an odf change and all the 'fun' that might bring :-)
[...]
Note that Excel's '*' definition is a bit "unsharp":
http://office.microsoft.com/en-us/excel-help/number-format-codes-HP005198679.aspx
Text and spacing, Repeating characters:
| To repeat the next character in the format to fill the column width,
| include an asterisk (*) in the number format. For example, type 0*- to
| include enough dashes after a number to fill the cell, or type *0 before
| any format to include leading zeros.
So "fill the column width" actually knows (I guess?) three conditions:
* start of text: fill from left border to text
* in text: split text in two, left justify first part, right justify
second part, fill with character in between
* end of text: fill from text to right border
(this I only guess, does Excel do that?)
maybe I am naive, isn't this complicating things ( right/left justified
? ) doesn't it just fill to available width ( granted with assumed
knowledge of column width border size etc. ) with 0 or more of the
character to repeat ? I would expect an existing left/center/right
justification on the cell to be ignored when this 'special' format code
is specified ( admittedly I haven't tried this... )
Whatever Excel does nowadays if more than one * are present, I hope it
still bails out with an error.
you will think I am very lazy, I think trying to report errors in those
formats would be more complex than it's worth ( e.g you need to
generate messages ( where? ) with "[ specific type of format err ] at
position x" type information )
Afaics with mso (xp at least) and libreoffice the formatter fails
silently, I mean generally I suppose people just rely on the preview
and/or applying the format to show you if the format worked. With that
in mind I would specify ( in whatever specification blurb we might
provide ) that we expect only one '*[char]' in the format but in the
event of more that one occurrence we take ( to be decided ) either the
first or last one and ignore the others.
And what if it occurs in date/time format
codes?
I am completely ignoring those for the moment, should work the same
though, that would be the intention :-)
I assume also left/centered/right justification affects things for
leading/trailing fills.
unless Excel does this I would avoid such complication like the plague (
especially given my complete ignorance in such matters ;-) ) Saying that
I didn't test even what would happen on the calc side with same :-/
Given that I think we'd need a number:fill-character or some such
attribute to go with
16.27 Data Styles
http://docs.oasis-open.org/office/v1.2/cs01/OpenDocument-v1.2-cs01-part1.html#__RefHeading__1416346_253892949
with the limitation that it can be present only once (if that is what
Excel does) and specyfing what happens in these three conditions.
Your number:repeated does fine, but may not survive ODF-speak (neither
may my number:fill-character ;-) as someone might ask "how many times to
be repeated".
I really hope no question like that comes up, surely the concept of a
code/directive that is implemented by the view/layout ( there must be
other types of fill to width/height etc. concepts in writer/calc ) is
not alien.
So basically we are talking about changing 'repeated' to
'fill-character' and using it in the same way? ( /me thinks +1 for
'number:fill-character' which imo better describes things anyway )
[...]
Also I worry a little that there seemed to be at one
point support for the '*' format code, I wonder what the history was
or is it just a case of unfinished business?
That is a remainder of old times.. the format code scanner is able to
handle that (and it should)
definitely seems to handle it :-)
[...]
we could use
String aFill;
aFill.Expand( nNumCharsToInsert, mnChar);
aTmpStr.Insert( aFill, mnPos);
to avoid multiple reallocations with character-based Insert.
we just should use that, I will change it thanks!
+ SfxObjectShell* pDocSh = SfxObjectShell::Current();
+ if ( pDocSh )
+ {
+ // is this a calc document
+ Reference< XServiceInfo> xSI( pDocSh->GetModel(), UNO_QUERY );
+ if ( xSI.is() )
+ bUseStarFormat = xSI->supportsService( rtl::OUString(
"com.sun.star.sheet.SpreadsheetDocument" ) );
+ }
Heh, that's clever :-)
no no, not clever, this just relects my the fact I haven't looked at or
really thought about writer much yet, since those formats can be used in
writer tables it *might* make sense to use them in that context too (
the same odf elements apply right ? ) but then again a table column
doesn't have to exclusively contain the number formatted item so it's
not quite the same and its not clear to me where what width you might
fill to ( we might be better off just avoiding that altogether )
So, assuming there is nothing controversial about my thoughts above (
and I guess I need to do some more investigation wrt justification ) the
question is where to go next?, what's the standard way of moving
forward?, in the meantime can we use some experimental name space, can
we assume 'number:fill-character' can be used?
thanks again
Noel
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice