add text-transform:reverse + full test coverage for text-transform uppercase/lowercase/capitalize - closes #2634
|
@ -125,6 +125,7 @@ enum text_transform_enum : std::uint8_t
|
|||
UPPERCASE,
|
||||
LOWERCASE,
|
||||
CAPITALIZE,
|
||||
REVERSE,
|
||||
text_transform_enum_MAX
|
||||
};
|
||||
|
||||
|
|
|
@ -160,6 +160,7 @@ static const char * text_transform_strings[] = {
|
|||
"uppercase",
|
||||
"lowercase",
|
||||
"capitalize",
|
||||
"reverse",
|
||||
""
|
||||
};
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <mapnik/text/text_properties.hpp>
|
||||
#include <mapnik/xml_node.hpp>
|
||||
#include <mapnik/text/text_layout.hpp>
|
||||
#include <mapnik/debug.hpp>
|
||||
|
||||
// boost
|
||||
#include <boost/property_tree/ptree.hpp>
|
||||
|
@ -53,21 +54,28 @@ node_ptr text_node::from_xml(xml_node const& xml, fontset_map const& fontsets)
|
|||
void text_node::apply(evaluated_format_properties_ptr const& p, feature_impl const& feature, attributes const& vars, text_layout &output) const
|
||||
{
|
||||
mapnik::value_unicode_string text_str = util::apply_visitor(evaluate<feature_impl,value_type,attributes>(feature,vars), *text_).to_unicode();
|
||||
if (p->text_transform == UPPERCASE)
|
||||
switch (p->text_transform)
|
||||
{
|
||||
text_str = text_str.toUpper();
|
||||
}
|
||||
else if (p->text_transform == LOWERCASE)
|
||||
{
|
||||
text_str = text_str.toLower();
|
||||
}
|
||||
case UPPERCASE:
|
||||
text_str.toUpper();
|
||||
break;
|
||||
case LOWERCASE:
|
||||
text_str.toLower();
|
||||
break;
|
||||
case REVERSE:
|
||||
text_str.reverse();
|
||||
break;
|
||||
case CAPITALIZE:
|
||||
#if !UCONFIG_NO_BREAK_ITERATION
|
||||
else if (p->text_transform == CAPITALIZE)
|
||||
{
|
||||
// note: requires BreakIterator support in ICU which is optional
|
||||
text_str = text_str.toTitle(nullptr);
|
||||
}
|
||||
text_str.toTitle(nullptr);
|
||||
#else
|
||||
MAPNIK_LOG_DEBUG(text_node) << "text capitalize (toTitle) disabled because ICU was built without UCONFIG_NO_BREAK_ITERATION";
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (text_str.length() > 0) {
|
||||
output.add_text(text_str, p);
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
"keys": [
|
||||
"",
|
||||
"9",
|
||||
"2",
|
||||
"1",
|
||||
"2",
|
||||
"8",
|
||||
"3",
|
||||
"4",
|
||||
|
@ -35,23 +35,23 @@
|
|||
" !! ",
|
||||
" ! ! ",
|
||||
" ! ",
|
||||
" # !! ",
|
||||
" $ ### %% %%% ! ",
|
||||
" $ # % % % !! ",
|
||||
" $ $$ # & & && %% % % !!! ",
|
||||
" $$$ $ ## & & & ' ( )) * % ! ++ + + ",
|
||||
" $ $ &&& &&& ( )) + + ++ ",
|
||||
" $$$ ### '' ( ) + + ++ ",
|
||||
" $ ### ' ' ( ( ) * * ** ",
|
||||
" '' ' ' ( ( )) * * * ",
|
||||
" '' ' ''' ( *** *** ",
|
||||
" ' '' ''' (( )) ",
|
||||
" !! ",
|
||||
" # $$ %% %%% ! ",
|
||||
" # $ & % % % !! ",
|
||||
" # ## $ &&& & %% % % !!! ",
|
||||
" ### # $$$ & && & ' ( )) * % ! ++ + + ",
|
||||
" # # & & ''' ( )) + + ++ ",
|
||||
" ### $ '' ( ) + + ++ ",
|
||||
" # $ ' ' ( ( ) * * ** ",
|
||||
" '' ( ( )) * * * ",
|
||||
" ' ' ( *** *** ",
|
||||
" '' '' ' (( )) ",
|
||||
" ' ' '' ( ) ) ",
|
||||
" '''' '' ",
|
||||
" ' ' ",
|
||||
" ''' ",
|
||||
" '' ",
|
||||
" '' ",
|
||||
" '' ",
|
||||
" '' ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"9",
|
||||
"1",
|
||||
"2",
|
||||
"8",
|
||||
|
@ -9,7 +10,6 @@
|
|||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"9",
|
||||
"10"
|
||||
],
|
||||
"data": {},
|
||||
|
@ -24,45 +24,45 @@
|
|||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! ## # ",
|
||||
" !! # # # $ $$$ $$$$$$ ",
|
||||
" ! ! # # # $$ $ $$ $ $$ ",
|
||||
" ! ! # ## $$ $$$ $ ",
|
||||
" ! ! !! # # %%%%% % % % $$ $ $ ",
|
||||
" ! !!! ## % % % %% $$$ $ $ ",
|
||||
" ! ! !! ## %% % % % $ $ $ $ ",
|
||||
" !!! ! #### %% % % & ' ( ) $ * +++++ + + ++ ",
|
||||
" ! ! ## % % % % % ' (( ( + + + ++ ",
|
||||
" ! ! # % %% % % % '' ( ( ( ++ + +++ ",
|
||||
" !!!! # # ' ' ( ((( ++ + + ",
|
||||
" !!!!! ## ## ' ' ' ( (( + + + + + ",
|
||||
" ! ## ' ' ' ( ))))) ) ) ) +++++++ ++ + ++ ",
|
||||
" ! ## # ' '' (( ) ) ) ) ",
|
||||
" ! # # '' ' ' (( )) ) ))) ",
|
||||
" ' '' (((( )) ) ) ",
|
||||
" ' ' ( ) ) ) ) ) ",
|
||||
" ' ( )))))) )))) )) ",
|
||||
" ''''' ( ( ",
|
||||
" ' '' (( ( ",
|
||||
" ' (( ",
|
||||
" ' ( (( ",
|
||||
" ( ( ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !! ",
|
||||
" ! ! ",
|
||||
" ! !! ",
|
||||
" ! !! ",
|
||||
" ! ! ",
|
||||
" !! ",
|
||||
" !! ",
|
||||
" !!! ",
|
||||
" # !! ",
|
||||
" ## $$ % %%% %%%%!% ",
|
||||
" # # $$$ %% % %% % !% ",
|
||||
" # # $ $$ & %% %%% %!! !! ",
|
||||
" # # ## &&&& & & & %% % % !! ",
|
||||
" # ### $$ & && & & %%% % % !! ! ",
|
||||
" # # ## $$ & & & && % % % % ! ! ",
|
||||
" ### # $$$$$ & & && & ' ( ) * % ! +++++ + + ++ ",
|
||||
" # # $$ $ &&&& & & &&& ( )) ) + + + ++ ",
|
||||
" # # & & ' ''' (( ) ) ) ++ + +++ ",
|
||||
" #### $ $ ''' ' ( ( ) ))) ++ + + ",
|
||||
" ##### $$ ''' ' ( ( ( ) )) + + + + + ",
|
||||
" # $$$$ ' '' ' ( ( ( ) ***** * * * +++++++ ++ + ++ ",
|
||||
" # $ $ ' '' ( (( )) * * * * ",
|
||||
" # ' (( ( ( )) ** * *** ",
|
||||
" '''' ' ( (( )))) ** * * ",
|
||||
" ' ' ( ( ) * * * * * ",
|
||||
" '' ' ( ) ****** **** ** ",
|
||||
" '' '' ' '' ((((( ) ) ",
|
||||
" '' ' ' '' ' ( (( )) ) ",
|
||||
" ' ' ' '' ' ( )) ",
|
||||
" ' ' ' '' ( ) )) ",
|
||||
" ' '' '' ' ) ) ",
|
||||
" '' ' ' ' ",
|
||||
" '''' ' ' ",
|
||||
" ' ' ",
|
||||
" '''' ' ",
|
||||
" ' ' ",
|
||||
" '' ' ",
|
||||
" '' ' ",
|
||||
" ' ",
|
||||
" "
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 6 KiB |
|
@ -17,52 +17,52 @@
|
|||
<Style name="My Style">
|
||||
<Rule>
|
||||
<Filter>[nr] = 1</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="rad_to_deg*0.7853981633974483">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" text-transform="uppercase" orientation="rad_to_deg*0.7853981633974483">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 2</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180/pi*1.5707963267948966">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" text-transform="lowercase" orientation="180/pi*1.5707963267948966">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 3</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" text-transform="capitalize" orientation="180">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 4</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="45" dy="10">"Line break"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" text-transform="reverse" orientation="45" dy="10">"Line break"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 5</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="45" dy="10">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="45" dy="10">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 6</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="90" dy="10">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="90" dy="10">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 7</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180" dy="10">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="180" dy="10">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 8</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="0" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="0" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 9</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="90" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="90" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>[nr] = 10</Filter>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" orientation="180" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" allow-overlap="true" orientation="180" horizontal-alignment="right" vertical-alignment="top" rotate-displacement="true">"XYZ"</TextSymbolizer>
|
||||
<PointSymbolizer allow-overlap="true"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
|
|