Caution

The Packaging and Development guide is currently undergoing a major overhaul to bring it up to date. The current state you are seeing now is a preview of this effort.

The current version is unstable (changing URLs can occur at any time) and most content is not in properly reviewed yet. Proceed with caution and be aware of technical inaccuracies.

If you are an experienced packager and would like to contribute, we would love for you to be involved! See our contribution page for details of how to join in.

Launchpad text markup

Any textarea input field on Launchpad will process the entered text to recognise certain patterns to enhance the resulting displayed output.

Examples of textareas where the Launchpad text markup is accepted are:

Screenshot of an example Launchpad "Report a bug" page where "You can write Launchpad text markup here." is written in the textarea input field "Further Information".
Screenshot of an example Launchpad bug page where the description is currently beeing edited and "You can write Launchpad text markup here." is written in the textarea input fields "Bug Description" and "Add comment".
Screenshot of an example Launchpad "Propose for merging" page where "You can write Launchpad text markup here." is written in the textarea input field "Description of the change".
Screenshot of an example Launchpad merge proposal page where the first comment is beeing edited and the textarea input field contains the text "You can write Launchpad text markup here.".
Screenshot of an example Launchpad Profile page where the description is beeing edited and the textarea input field contains the text "You can write Launchpad text markup here.".
Screenshot of an example Launchpad PPA page where the description is beeing edited and the textarea input field contains the text "You can write Launchpad text markup here.".

Unlike platforms like GitHub, Launchpad unfortunately only recognises a very limited set of markup patterns when you write comments. The most useful pattern are documented in this article.

Note

Support for a wider range of markup patterns is a very common and old request/wish; take for example LP: #391780.

You can “upvote” (mark yourself as affected) or leave a comment on this bug report to show your support for the feature request.

Reminder: Please stay civil! The Launchpad team has only limited resources.

Referencing Launchpad bugs

It is very common to refer to a specific Launchpad bug e.g. to point other people to a bug during a discussion.

Pattern

The following pattern is used by Launchpad to detect bug references:

LP: #<LP-Bug-Number>[, #<LP-Bug-Number>]...

This pattern is case invariant, and the amount of blank space can be variable, but if you place blank space anywhere else, the regular expression used by Launchpad might not parse the bug reference correctly.

Note

This pattern is also commonly used outside of Launchpad e.g. on IRC, in source package changelogs or on Discourse.

Examples

The following table shows examples how text entered into a text input field will be displayed on Launchpad:

Input

Result

Comment

LP: #1

LP: #1

references Launchpad bug with the number 1

(LP: #1)

(LP: #1)

a bug reference can be surrounded by brackets

LP: #1, #2.

LP: #1, #2.

there can be multiple bug references
separated by a ,
LP:
#1,
#2,
#3,
#4
LP:
the amount of blank space can be variable and
a new-line will not disrupt this pattern
lp: #1

lp: #1

the pattern is case invariant

(lp: #1)

(lp: #1)

the pattern is case invariant

lp: #1, #2.

lp: #1, #2.

the pattern is case invariant

LP #1

LP #1

the : is strictly needed

LP: #1 , #2

LP: #1 , #2

if you place blank space anywhere else the
regular expression might not parse the
input correctly
LP: #1, #2,

#3
LP: #1, #2,

#3
an empty new-line will interrupt the pattern,
but a trailing , will not

Blank spaces

Launchpad will:

  • cut off any blank space to the right,

  • keep any blank space to the left, and

  • reduce any blank space between non-blank-space characters to just one (this includes new-line characters as well).

Note

Technically Launchpad passes blank space through and the browser just ignores the blank space.

Warning

Because of the behaviour described above you will have a hard time trying to write a table or long chunks of blank space between two sections.

The following table shows examples how text entered into a text input field will be displayed on Launchpad:

Input

Result

| Column 1   | Column 2 | Column 3    |
|------------+----------+-------------|
| Example    | table    | text        |
| Example    | table    | text        |
| Example    | table    | text        |
| Column 1 | Column 2 | Column 3 |
|------------+----------+-------------|
| Example | table | text |
| Example | table | text |
| Example | table | text |
Here are two paragraphs with lots
of blank space between them.




But they're still just two paragraphs
Here are two paragraphs with lots of blank space between them.

But they’re still just two paragraphs

URI addresses

Launchpad can recognise http, https, ftp, sftp, mailto, news, irc and jabber URIs.

Note

tel, urn, telnet, ldap URI, relative URLs like example.com and email addresses like test@example.com are NOT recognised.

Examples

The following examples show how text entered into a text input field will be displayed on Launchpad:

Input

http://localhost:8086/example/sample.html

Result

http://localhost:8086/example/sample.html

Input

http://localhost:8086/example/sample.html

Result

http://localhost:8086/example/sample.html

Input

ftp://localhost:8086/example/sample.html

Result

ftp://localhost:8086/example/sample.html

Input

sftp://localhost:8086/example/sample.html.

Result

sftp://localhost:8086/example/sample.html.

Input

http://localhost:8086/example/sample.html;

Result

http://localhost:8086/example/sample.html;

Input

news://localhost:8086/example/sample.html:

Result

news://localhost:8086/example/sample.html:

Input

http://localhost:8086/example/sample.html?

Result

http://localhost:8086/example/sample.html?

Input

http://localhost:8086/example/sample.html,

Result

http://localhost:8086/example/sample.html,

Input

<http://localhost:8086/example/sample.html>

Result

<http://localhost:8086/example/sample.html>

Input

<http://localhost:8086/example/sample.html>,

Result

<http://localhost:8086/example/sample.html>,

Input

<http://localhost:8086/example/sample.html>.

Result

<http://localhost:8086/example/sample.html>.

Input

<http://localhost:8086/example/sample.html>;

Result

<http://localhost:8086/example/sample.html>;

Input

<http://localhost:8086/example/sample.html>:

Result

<http://localhost:8086/example/sample.html>:

Input

<http://localhost:8086/example/sample.html>?

Result

<http://localhost:8086/example/sample.html>?

Input

(http://localhost:8086/example/sample.html)

Result

(http://localhost:8086/example/sample.html)

Input

(http://localhost:8086/example/sample.html),

Result

(http://localhost:8086/example/sample.html),

Input

(http://localhost:8086/example/sample.html).

Result

(http://localhost:8086/example/sample.html).

Input

(http://localhost:8086/example/sample.html);

Result

(http://localhost:8086/example/sample.html);

Input

(http://localhost:8086/example/sample.html):

Result

(http://localhost:8086/example/sample.html):

Input

http://localhost/example/sample.html?a=b&b=a

Result

http://localhost/example/sample.html?a=b&b=a

Input

http://localhost/example/sample.html?a=b&b=a.

Result

http://localhost/example/sample.html?a=b&b=a.

Input

http://localhost/example/sample.html?a=b&b=a,

Result

http://localhost/example/sample.html?a=b&b=a,

Input

http://localhost/example/sample.html?a=b&b=a;

Result

http://localhost/example/sample.html?a=b&b=a;

Input

http://localhost/example/sample.html?a=b&b=a:

Result

http://localhost/example/sample.html?a=b&b=a:

Input

http://localhost/example/sample.html?a=b&b=a:b;c@d_e%f~g#h,j!k-l+m$n*o'p

Result

http://localhost/example/sample.html?a=b&b=a:b;c@d_e%f~g#h,j!k-l+m$n*o’p

Input

http://www.example.com/test/example(parentheses).html

Result

http://www.example.com/test/example(parentheses).html

Input

http://www.example.com/test/example-dash.html

Result

http://www.example.com/test/example-dash.html

Input

http://www.example.com/test/example_underscore.html

Result

http://www.example.com/test/example_underscore.html

Input

http://www.example.com/test/example.period.x.html

Result

http://www.example.com/test/example.period.x.html

Input

http://www.example.com/test/example!exclamation.html

Result

http://www.example.com/test/example!exclamation.html

Input

http://www.example.com/test/example~tilde.html

Result

http://www.example.com/test/example~tilde.html

Input

http://www.example.com/test/example*asterisk.html

Result

http://www.example.com/test/example*asterisk.html

Input

irc://chat.freenode.net/launchpad

Result

irc://chat.freenode.net/launchpad

Input

irc://chat.freenode.net/%23launchpad,isserver

Result

irc://chat.freenode.net/%23launchpad,isserver

Input

http://localhost/foo?xxx&

Result

http://localhost/foo?xxx&

Input

http://localhost?testing=[square-brackets-in-query]

Result

http://localhost?testing=[square-brackets-in-query]

Removal of

If the entire comment is encapsulated in like this Launchpad will remove the .

The following table shows an example how text entered into a text input field will be displayed on Launchpad:

Input

Result

"Content"

Content

Resources