layout | title |
---|---|
default |
Map BBCode Syntax |
The author expects this format of [map] bbcode to become a universal standard across forums and other collaboration tools, like mediawiki. This is a description of the bbcode itself.
Map BBCode is usually enclosed in [map]...[/map]
tags. Of course, it is not a requirement:
for example, in wiki those might be converted to HTML tags: <map>...</map>
. Opening tag
may contain zoom level and optional coordinate (latitude, longitude): [map=10]
or [map=12,59.9,30.5]
.
In this case automatically determined zoom level and bounds for features are overridden.
A map tag contains an unordered list of features, separated by semicolons. There might be zero features, in which case a map displays a location stated in its opening tag, or a default location if there isn't any.
A feature can be either a marker, a polyline or a polygon. All those are defined by a space-separated list of coordinates (also latitude,longitude). Markers have a single coordinate, polylines have several, polygons have their first coordinate equal to the last.
Usually coordinates are in WGS-84 projection, though for some instances it may be different. For example, for drawing on a fantasy map (e.g. videogame world) pixel coordinates may be used.
Features have optional parameters, a string in brackets after the coordinate list.
It looks like (option,option|title)
: several comma-separated options (that may contain
only letters and digits), then a vertical bar and a title. Both parts — options and a title —
can be omitted. If there are no options, the vertical bar can be omitted also, but in this
case the first vertical bat in the title should be screened: \|
. Closing brackets
in the title should also be screened: \)
. Apart from that, any characters are allowed
in the title: usually it is an HTML or BBCode string.
The implementation in MapBBCodeUI.js
assumes the title is HTML, but screens all special
characters except a number of tags (<a>
, <br>
, <span>
and some others). It also
knows of colour options: red
will make a polyline or a polygon red, and so on.
[map][/map]
Displays a map in a default location with no features.
[map=10,59.95,30.27][/map]
Displays a map of Saint-Petersburg with no features.
[map]59.939,30.3159(Dvortsovaya)[/map]
A map zoomed onto a Dvortsovaya Square with a marker in the center. The marker has a title (usually appears in a popup panel), "Dvortsovaya".
[map]59.939,30.3159; 59.93709,30.31265 59.93115,30.3602 (black|);
59.94577,30.33244 59.93904,30.3369 59.93408,30.33497 59.92257,30.30776[/map]
A marker is still on Dvortsovaya Square, Nevsky Prospect is a black line, and a part of Sadovaya Street is a line of a default colour (usually blue).
[map]55.7547,37.6181 55.7553,37.6191 55.7531,37.6232 55.7528,37.622
55.7547,37.6181(red|Square)[/map]
Red Square in Moscow is covered with a red polygon, which shows a popup panel when clicked with "Square" word in it.
To reduce clutter, we'll define some base nonterminals with regular expressions.
<empty> ::= ""
<zoom> ::= [12]?[0-9]
<number> ::= -?[0-9]+(\.[0-9]+)?
<word> ::= [a-z0-9]+
<noslash> ::= .*?[^\\]
<coordinate> ::= <number> "," <number>
<coordinates> ::= <coordinate> | <coordinate> " " <coordinate>
<title> ::= <empty> | <noslash>
<words> ::= <empty> | <word> | <word> "," <words>
<parameters> ::= "(" <words> "|" <title> ")" | "(" <title> ")"
<element> ::= <coordinates> | <coordinates> <parameters>
<elements> ::= <empty> | <element> | <element> ";" <elements>
<position> ::= <zoom> | <zoom> "," <coordinate>
<openingtag> ::= "[map]" | "[map=" <position> "]"
<map> ::= <openingtag> <elements> "[/map]"
MapBBCode.js is a reference implementation of parsing and generating map bbcode. It contains complete regular expressions for the code and three methods you can use in your projects.
-
isValid(string)
tests that the string is a valid map bbcode. -
stringToObjects(string)
parses a bbcode string into an object:{ objs: [{ coords: [<coordinate>, ...], text: <string>, params: [<string>, ...] }, ...], zoom: <number>, pos: <coordinate> }
Format of
<coordinate>
depends of whether you have Leaflet library included: it will be eitherL.LatLng
object or an array of two numbers:[latitude, longitude]
. -
objectsToString(object)
takes an object in the same format as thestringToObjects
produces and returns a bbcode string.
See complete description of that class in API reference.
The format of map bbcode is set in stone. But element parameters, <words>
nonterminal in BNF,
may be whatever you want. For now only one parameter type is defined: colour.
One can implement, for example, line width with w<number>
parameter, or a marker type.
Implementations of map bbcode are not required to support any of parameters, thus parameters
should not alter behaviour or presentation of features much.