Modify

Opened 11 years ago

Closed 11 years ago

#9674 closed enhancement (fixed)

Support for escaping special characters

Reported by: imagic Owned by: team
Priority: normal Milestone: 14.02
Component: Core mappaint Version: tested
Keywords: MapCSS, SVG Cc: imagic

Description

In order to use user-provided text within an embedded SVG I'll need to escape any special characters. Although I could do this using multiple calls to replace, I would prefer to have some dedicated "escape" function.

I suggest to add a function escape(text, scope): "text" should be the text that needs escaping and "scope" the scope of the text.

Example: escape("abc [ < def","SVG") -> "abc &#91; &lt; def"

Attachments (0)

Change History (5)

comment:1 by bastiK, 11 years ago

Resolution: fixed
Status: newclosed

In 6805/josm:

fixed #9674 - Support for escaping special characters

comment:2 by Don-vip, 11 years ago

Milestone: 14.02

comment:3 by imagic, 11 years ago

Resolution: fixed
Status: closedreopened

Sorry to say, but it doesn't work. Using josm 6808 the following code will lead to a crash:

repeat-image: eval(concat("data:image/svg+xml,<svg height='70px'><g fill-opacity='0.3' stroke-opacity='0.3'><text x='0' y='50' font-size='50' fill='white' stroke='blue'>",URL_encode("Roma (A1) <E26> [IT]"),"</text></g></svg>"));

If I replace the character "<" by "." it doesn't crash, i.e. "Roma (A1) .E26> [IT]" works.

Repository Root: http://josm.openstreetmap.de/svn
Build-Date: 2014-02-04 02:35:03
Last Changed Author: Don-vip
Revision: 6808
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
URL: http://josm.openstreetmap.de/svn/trunk
Last Changed Date: 2014-02-04 00:21:44 +0100 (Tue, 04 Feb 2014)
Last Changed Rev: 6808

Identification: JOSM/1.5 (6808 de) Linux openSUSE 12.3 (x86_64)
Memory Usage: 155 MB / 1769 MB (52 MB allocated, but free)
Java version: 1.7.0_45, Oracle Corporation, Java HotSpot(TM) 64-Bit Server VM
VM arguments: [-DproxySet=xxx, -DproxyHost=xxx, -DproxyPort=xxx]
Dataset consistency test: No problems found

Plugin: buildings_tools (30057)
Plugin: imagery_offset_db (30218)
Plugin: openstreetbugs (30004)
Plugin: openvisible (29854)
Plugin: reverter (30258)
Plugin: turnrestrictions (30237)
Plugin: utilsplugin2 (30200)

java.lang.IllegalArgumentException: Parameter must not be null
	at org.openstreetmap.josm.tools.CheckParameterUtil.ensureParameterNotNull(CheckParameterUtil.java:90)
	at org.openstreetmap.josm.tools.ImageResource.<init>(ImageResource.java:37)
	at org.openstreetmap.josm.tools.ImageProvider.getIfAvailableDataUrl(ImageProvider.java:537)
	at org.openstreetmap.josm.tools.ImageProvider.getIfAvailableImpl(ImageProvider.java:402)
	at org.openstreetmap.josm.tools.ImageProvider.get(ImageProvider.java:303)
	at org.openstreetmap.josm.tools.ImageProvider.getInBackground(ImageProvider.java:343)
	at org.openstreetmap.josm.gui.mappaint.MapImage.getImage(MapImage.java:59)
	at org.openstreetmap.josm.gui.mappaint.RepeatImageElemStyle.paintPrimitive(RepeatImageElemStyle.java:56)
	at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer$StyleCollector.drawAll(StyledMapRenderer.java:215)
	at org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.render(StyledMapRenderer.java:1411)
	at org.openstreetmap.josm.gui.layer.OsmDataLayer.paint(OsmDataLayer.java:324)
	at org.openstreetmap.josm.gui.MapView.paintLayer(MapView.java:537)
	at org.openstreetmap.josm.gui.MapView.paint(MapView.java:608)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent._paintImmediately(Unknown Source)
	at javax.swing.JComponent.paintImmediately(Unknown Source)
	at javax.swing.RepaintManager$3.run(Unknown Source)
	at javax.swing.RepaintManager$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.access$1100(Unknown Source)
	at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Last edited 11 years ago by Don-vip (previous) (diff)

comment:4 by bastiK, 11 years ago

Ok, [6805] fixes a different problem. E.g.

icon-image: "data:image/svg+xml,<svg height='70px'><text x='0' y='50' font-size='50' fill='white' stroke='#efa3e4' style='line-height:125%;letter-spacing:normal;'>asdfasdf</text></svg>";

does not work, because the "%" sign is interpreted as percent encoding. This should be

icon-image: concat("data:image/svg+xml,", URL_encode("<svg height='70px'><text x='0' y='50' font-size='50' fill='white' stroke='#efa3e4' style='line-height:125%;letter-spacing:normal;'>asdfasdf</text></svg>"));

instead.

Now back to your issue. It is on a different level (special characters in xml). You can always use a <![CDATA[ ... ]]> block to protect this, but I'll add a xml escape function anyway.

comment:5 by bastiK, 11 years ago

Resolution: fixed
Status: reopenedclosed

In 6809/josm:

fixed #9674 - Support for escaping special characters

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain team.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.