(*format)->digitlang = LANG_NEUTRAL;
(*format)->trimming = StringTrimmingCharacter;
(*format)->digitsub = StringDigitSubstituteUser;
+ (*format)->character_ranges = NULL;
+ (*format)->range_count = 0;
/* tabstops */
(*format)->tabcount = 0;
(*format)->firsttab = 0.0;
(*format)->tabs = NULL;
+ TRACE("<-- %p\n", *format);
+
return Ok;
}
if(!format)
return InvalidParameter;
+ GdipFree(format->character_ranges);
GdipFree(format->tabs);
GdipFree(format);
}
GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(
- GDIPCONST GpStringFormat* format, INT* count)
+ GDIPCONST GpStringFormat *format, INT *count)
{
if (!(format && count))
return InvalidParameter;
- FIXME("stub: %p %p\n", format, count);
+ TRACE("%p %p\n", format, count);
+
+ *count = format->range_count;
- return NotImplemented;
+ return Ok;
}
GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat *format,
return Ok;
}
-GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat*
- format, INT rangeCount, GDIPCONST CharacterRange* ranges)
+GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(
+ GpStringFormat *format, INT rangeCount, GDIPCONST CharacterRange *ranges)
{
- if (!(format && rangeCount && ranges))
+ CharacterRange *new_ranges;
+
+ if (!(format && ranges))
return InvalidParameter;
- FIXME("stub: %p, %d, %p\n", format, rangeCount, ranges);
+ TRACE("%p, %d, %p\n", format, rangeCount, ranges);
- return NotImplemented;
+ new_ranges = GdipAlloc(rangeCount * sizeof(CharacterRange));
+ if (!new_ranges)
+ return OutOfMemory;
+
+ GdipFree(format->character_ranges);
+ format->character_ranges = new_ranges;
+ memcpy(format->character_ranges, ranges, sizeof(CharacterRange) * rangeCount);
+ format->range_count = rangeCount;
+
+ return Ok;
}
GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat *format, REAL firsttab,
else
(*newFormat)->tabs = NULL;
+ if(format->range_count > 0){
+ (*newFormat)->character_ranges = GdipAlloc(sizeof(CharacterRange) * format->range_count);
+ if(!(*newFormat)->character_ranges){
+ GdipFree((*newFormat)->tabs);
+ GdipFree(*newFormat);
+ return OutOfMemory;
+ }
+ memcpy((*newFormat)->character_ranges, format->character_ranges,
+ sizeof(CharacterRange) * format->range_count);
+ }
+ else
+ (*newFormat)->character_ranges = NULL;
+
TRACE("%p %p\n",format,newFormat);
return Ok;