{% macro related_artifacts(artifact) -%}
  {% set related_artifacts = artifact.related_artifacts() %}
  {% if related_artifacts %}
    <h4>Related</h4>
    <p>
    {% for related in related_artifacts %}
      <a href="{{related.url()}}">{{related.type_s}}: {{related.link_text()}}</a><br>
    {% endfor %}
    </p>
  {% endif %}
{%- endmacro %}

{% macro gravatar(user, size, className) -%}
  {% set display_name = h.really_unicode(user.display_name) %}
  {% if user.icon_url() %}
    <img src="{{user.icon_url()}}"
         alt="{{display_name}}"
         title="{{display_name}}"
         class="emboss{% if size %} x{{size}}{% endif %}{% if className %} {{className}}{% endif %}">
  {% else %}
    <b data-icon="{{g.icons['user'].char}}" class="ico emboss {{g.icons['user'].css}}{% if size %} x{{size}}{% endif %}{% if className %} {{className}}{% endif %}"></b>
  {% endif %}
{%- endmacro %}

{% macro gravatar_or_name(user, size, className) -%}
  {% if user.icon_url() %}
    {{gravatar(user, size, className)}}
  {% else %}<span>{{ h.really_unicode(user.display_name) }}</span>{% endif %}
{%- endmacro %}

{% macro email_gravatar(email, title=None, size=None) -%}
  {% set title=h.really_unicode(title) %}
  {% if email %}
    <img src="{{g.gravatar(email, size=size)}}"
         alt="{{title or email}}"
         title="{{title or email}}"
         class="emboss {% if size %} x{{size}}{% endif %}">
  {% else %}
    <b data-icon="{{g.icons['user'].char}}" class="ico emboss {{g.icons['user'].css}}{% if size %} x{{size}}{% endif %}"></b>
  {% endif %}
{%- endmacro %}

{% macro file_field(name, label) %}
  {% if label %}
  <label for="{{name}}">{{label}}</label>
  {% endif %}
  <input type="file" id="{{name}}" name="{{name}}" class="text" /><br/>
{% endmacro %}

{% macro text_area(name, label, value=None) %}
  {% if label %}
  <label for="{{name}}">{{label}}</label><br/>
  {% endif %}
  <textarea id="{{name}}" name="{{name}}">{{value}}</textarea><br/>
{% endmacro %}

{% macro text_field(name, label, value='') %}
  {% if label %}
  <label for="{{name}}">{{label}}</label><br/>
  {% endif %}
  <input type="text" id="{{name}}" name="{{name}}" class="text" value="{{value}}"/><br/>
{% endmacro %}

{% macro radio_button(name, label, option, value=None) %}
  {% if label %}
    <label for="{{name}}">{{label}}</label><br/>
  {% endif %}
  <input type="radio" name="{{name}}" class="text" value="{{option}}"
           {% if option == value %}checked{% endif %}/><br/>
{% endmacro %}

{% macro submit_button(value, name=None) %}
    <input type="submit" name="{{name}}" value="{{value}}"/><br/>
{% endmacro %}

{% macro abbr_date(start_time) %}
    <span title="{{start_time.strftime('%a %b %d, %Y %I:%M %p UTC') if start_time else 'unknown'}}">
      {{h.ago(start_time)}}
    </span>
{% endmacro %}

{% macro path_links(parts) %}
  {% set i=0 %}
  {% for part in parts %}
    <a href="{{'./' + '../' * (parts.__len__()-i-1)}}">{{part}}</a> /
    {% set i=i+1 %}
  {% endfor %}
{% endmacro %}

{% macro post_summary(post) %}
  {% if post %}
    <span>
      by <a href="{{post.author().url()}}">{{post.author().display_name}}</a>
      {{abbr_date(post.timestamp)}}
    </span>
  {% endif %}
{% endmacro %}

{% macro crumbs(trail) %}
  {% for (label, url) in trail %}
    <li class="{{loop.index0 == 0 and 'first' or ''}}">
      {% if url %}
        <a href="{{url}}">{{label}}</a>
      {% else %}
        <span>{{label}}</span>
      {% endif %}
    </li>
  {% endfor %}
{% endmacro %}

{% macro markdown_syntax(id='') %}
<a class="markdown_syntax_toc_crumb" href="#md_ex_toc{{id}}">Back</a>
<h1>Markdown Syntax Guide</h1>

<div class="markdown_syntax_section md_ex_toc{{id}}">
<p>SourceForge uses markdown syntax everywhere to allow you to create rich<br>text markup, and extends markdown in several ways to allow for quick linking<br>to other artifacts in your project. </p>
<p>Markdown was created to be easy to read, easy to write, and still readable in plain text format.</p>

<ul class="markdown_syntax_toc">
    <li><a href="#md_ex_links{{id}}">Links</a></li>
    <li><a href="#md_ex_reflinks{{id}}">Reference Links</a></li>
    <li><a href="#md_ex_artlinks{{id}}">Artifact Links</a></li>
    <li><a href="#md_ex_text{{id}}">Basic Text Formatting</a></li>
    <li><a href="#md_ex_bq{{id}}">Blockquotes</a></li>
    <li><a href="#md_ex_pre{{id}}">Preformatted Text</a></li>
    <li><a href="#md_ex_lists{{id}}">Lists</a></li>
    <li><a href="#md_ex_tables{{id}}">Tables</a></li>
    <li><a href="#md_ex_headers{{id}}">Headers</a></li>
    <li><a href="#md_ex_hr{{id}}">Horizontal Rules</a></li>
    <li><a href="#md_ex_img{{id}}">Images</a></li>
    <li><a href="#md_ex_escapes{{id}}">Escapes and HTML</a></li>
    <li><a href="#md_ex_moreheaders{{id}}">More Headers</a></li>
    <li><a href="#md_ex_toc{{id}}">Table of Contents</a></li>
    <li><a href="#md_ex_code{{id}}">Code Highlighting</a></li>
    <li><a href="#md_ex_includes{{id}}">Includes</a></li>
    <li><a href="#md_ex_neighborhood_notes{{id}}">Neighborhood Notifications</a></li>
    <li><a href="#md_ex_download_button{{id}}">Download Button</a></li>
    <li><a href="#md_ex_project_screenshots{{id}}">Project Screenshots</a></li>
    <li><a href="#md_ex_thanks{{id}}">Thanks</a></li>
</ul>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_links{{id}}">
<h2 id="md_ex_links{{id}}">Links</h2>

<p>Most URLs will automatically be turned into links.  To be explicit, just write it like this:</p>

<div class="codehilite"><pre>
&lt;http://someurl&gt;

&lt;somebbob@example.com&gt;

</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
<http://someurl>

<somebbob@example.com>''')}}

<p>To use text for the link, write it:</p>
<div class="codehilite"><pre>[like this](http://someurl)</pre></div>

<p>Output:</p>
{{g.markdown.convert('''[like this](http://someurl)''')}}

<p>You can add a *title* (which shows up under the cursor):</p>
<div class="codehilite"><pre>[like this](http://someurl "this title shows up when you hover")</pre></div>

<p>Output:</p>
{{g.markdown.convert('''[like this](http://someurl "this title shows up when you hover")''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_reflinks{{id}}">
<h2 id="md_ex_reflinks{{id}}">Reference Links</h2>
<div class="codehilite"><pre>You can also put the [link URL][1] below the current paragraph
like [this][2].

   [1]: http://url
   [2]: http://another.url "A funky title"
</pre></div>
<p>Output:</p>
{{g.markdown.convert('''You can also put the [link URL][1] below the current paragraph
like [this][2].

[1]: http://url
[2]: http://another.url "A funky title"''')}}

<p>Here the text "link URL" gets linked to "http://url", and the lines
showing "[1]: http://url" won't show anything.</p>

<p>Or you can use a [shortcut][] reference, which links the text
"shortcut" to the link named "[shortcut]" on the next paragraph.</p>

<div class="codehilite"><pre>Or you can use a [shortcut][] reference, which links the text
"shortcut" to the link named "[shortcut]" on the next paragraph.

[shortcut]: http://goes/with/the/link/name/text</pre></div>
<p>Output:</p>
{{g.markdown.convert('''Or you can use a [shortcut][] reference, which links the text
"shortcut" to the link named "[shortcut]" on the next paragraph.

[shortcut]: http://goes/with/the/link/name/text''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_artlinks{{id}}">
<h2 id="md_ex_artlinks{{id}}">Artifact Links</h2>
<p>Any existing forge resource can be linked with surrounding square brackets ie [MyPage] or [#123].</p>

<p>Links to resources in other tools can be explicitly referenced by adding a tool identifier prefix to the link.
So for instance `[developerwiki:MyPage]` can refer to a wiki page in a `developerwiki` instance.
You can also link to tickets with `[tickets:#123]` assuming there's a 123 ticket in a Tracker instance mounted at `tickets`.
The same is true for forums, or any of the other tools you have installed.
You can even link to tickets in a subproject with `[subproject.tickets:#123]`.</p>

<div class="codehilite"><pre>
[MyPage]
[developerwiki:MyPage]
[#123]
[tickets:#123]
</pre></div>

<p>No example output is available for this one because it only works on real artifacts. Try it in your project!</p>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_text{{id}}">
<h2 id="md_ex_text{{id}}">Basic Text Formatting</h2>
<p>Use * or _ to emphasize things:</p>
<div class="codehilite"><pre>*this is in italic*  and _so is this_

**this is in bold**  and __so is this__

***this is bold and italic***  and ___so is this___
</pre></div>

<p>Output:</p>
{{g.markdown.convert("""*this is in italic*  and _so is this_

**this is in bold**  and __so is this__

***this is bold and italic***  and ___so is this___""")}}

<p>You can strike through text using HTML like this:</p>
<div class="codehilite"><pre>
&lt;s&gt;this is strike through text&lt;/s&gt;
</pre></div>

<p>Output:</p>
{{g.markdown.convert("""<s>this is strike through text</s>""")}}

<div class="codehilite"><pre>A carriage return
makes a line break.

Two carriage returns make a new paragraph.</pre></div>

<p>Output:</p>
{{g.markdown.convert("""A carriage return
makes a line break.

Two carriage returns make a new paragraph.""")}}
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_bq{{id}}">
<h2 id="md_ex_bq{{id}}">Blockquotes</h2>
<p>Use the &gt; character in front of a line, <i>just like in email</i></p>
<div class="codehilite"><pre>&gt; Use it if you're quoting a person, a song or whatever.

&gt; You can use *italic* or lists inside them also.
And just like with other paragraphs,
all of these lines are still
part of the blockquote, even without the &gt; character in front.

To end the blockquote, just put a blank line before the following
paragraph.
</pre></div>

<p>Output:</p>
{{g.markdown.convert("""> Use it if you're quoting a person, a song or whatever.

> You can use *italic* or lists inside them also.
And just like with other paragraphs,
all of these lines are still
part of the blockquote, even without the &gt; character in front.

To end the blockquote, just put a blank line before the following
paragraph.""")}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_pre{{id}}">
<h2 id="md_ex_pre{{id}}">Preformatted Text</h2>
<p>If you want some text to show up exactly as you write it, without
Markdown doing anything to it, just indent every line by at least 4
spaces (or 1 tab).  As an alternative to indenting, you can use 4 or
more tildes before and after the text.  See examples in the
<a href="#md_ex_code">Code Highlighting section</a>
</p>
<div class="codehilite"><pre>
    This line won't *have any markdown* formatting applied.
    I can even write &lt;b&gt;HTML&lt;/b&gt; and it will show up as text.
    This is great for showing program source code, or HTML or even
    Markdown. &lt;b&gt;this won't show up as HTML&lt;/b&gt; but
    exactly &lt;i&gt;as you see it in this text file&lt;/i&gt;.

Within a paragraph, you can use backquotes to do the same thing.
`This won't be *italic* or **bold** at all.`
</pre></div>

<p>Output:</p>
{{g.markdown.convert("""
    This line won't *have any markdown* formatting applied.
    I can even write <b>HTML</b> and it will show up as text.
    This is great for showing program source code, or HTML or even
    Markdown. <b>this won't show up as HTML</b> but
    exactly <i>as you see it in this text file</i>.

Within a paragraph, you can use backquotes to do the same thing.
`This won't be *italic* or **bold** at all.`""")}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_lists{{id}}">
<h2 id="md_ex_lists{{id}}">Lists</h2>
<div class="codehilite"><pre>* an asterisk starts an unordered list
* and this is another item in the list
+ or you can also use the + character
- or the - character

To start an ordered list, write this:

1. this starts a list *with* numbers
+  this will show as number "2"
*  this will show as number "3."
9. any number, +, -, or * will keep the list going.
    * just indent by 4 spaces (or tab) to make a sub-list
        1. keep indenting for more sub lists
    * here i'm back to the second level
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''* an asterisk starts an unordered list
* and this is another item in the list
+ or you can also use the + character
- or the - character

To start an ordered list, write this:

1. this starts a list *with* numbers
+  this will show as number "2"
*  this will show as number "3."
9. any number, +, -, or * will keep the list going.
    * just indent by 4 spaces (or tab) to make a sub-list
        1. keep indenting for more sub lists
    * here i\'m back to the second level''')}}
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_tables{{id}}">
<h2 id="md_ex_tables{{id}}">Tables</h2>
<p>You can create tables using pipes and dashes like this:</p>
<div class="codehilite"><pre>
  First Header  | Second Header
  ------------- | -------------
  Content Cell  | Content Cell
  Content Cell  | Content Cell
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
Content Cell  | Content Cell''')}}

<p>You can use markdown syntax within table cells for formatting:</p>

<div class="codehilite"><pre>
  First Header   | Second Header
  -------------  | -------------
  *Content Cell* | Content Cell
  Content Cell   | Content Cell
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
First Header   | Second Header
-------------  | -------------
*Content Cell* | Content Cell
Content Cell   | Content Cell''')}}

<p>You can also create tables using HTML code.</p>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_headers{{id}}">
<h2 id="md_ex_headers{{id}}">Headers</h2>
<p>Just put 1 or more dashes or equals signs (--- or ===) below the
title.</p>
<div class="codehilite"><pre>This is a huge header
==================

this is a smaller header
------------------
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''This is a huge header
==================

this is a smaller header
------------------''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_hr{{id}}">
<h2 id="md_ex_hr{{id}}">Horizontal Rule</h2>
<p>Just put three or more *'s or -'s on a line:</p>
<div class="codehilite"><pre>
----------------
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''----------------''')}}

<p>Or, you can use single spaces between then, like this:</p>

<div class="codehilite"><pre>
* * *
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''* * *''')}}

<p>or</p>

<div class="codehilite"><pre>
- - - - - - -
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''- - - - - - -''')}}

Make sure you have a blank line above the dashes, though, or else:

<div class="codehilite"><pre>
you will get a header
---
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''you will get a header
---''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_img{{id}}">
<h2 id="md_ex_img{{id}}">Images</h2>
<p>To include an image, just put a "!" in front of a text link:</p>
<div class="codehilite"><pre>
![alternate text](https://sourceforge.net/images/icon_linux.gif)
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''![alternate text](http://sourceforge.net/images/icon_linux.gif)''')}}

<p>The "alternate text" will show up if the browser can't load the
image.</p>
<p>You can also use a title if you want, like this:</p>
<div class="codehilite"><pre>
![tiny arrow](https://sourceforge.net/images/icon_linux.gif "tiny arrow")
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''![tiny arrow](http://sourceforge.net/images/icon_linux.gif "tiny arrow")''')}}

<p>To reference an attached image, just use the img macro.  You can add more attributes:</p>
<div class="codehilite"><pre>
[[img src=attached-image.jpg alt=foobar]]
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''[[img src=attached-image.jpg alt=foobar]]''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_escapes{{id}}">
<h2 id="md_ex_escapes{{id}}">Escapes and HTML</h2>
<p>What if you want to just show asterisks, not italics?</p>
<div class="codehilite"><pre>* this shows up in italics: *a happy day*
* this shows the asterisks: \*a happy day\*
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''* this shows up in italics: *a happy day*
* this shows the asterisks: \*a happy day\*''')}}

<p>The backslashes will disappear and leave the asterisks.  You can do the same with any of the
characters that have a special meaning<br>for Markdown.</p>

<p>Many simple HTML tags are allowed, for example &lt;b&gt;  And unknown tags will be dropped.
To show a literal &lt;b&gt; or an unknown tag like &lt;foobar&gt; you need escape it with
HTML entities:
:</p>
<div class="codehilite"><pre>
&lt;b&gt;this will be bold&lt;/b&gt;
you should escape &amp;lt;unknown&amp;gt; tags
&amp;copy; special entities work
&amp;amp;copy; if you want to escape it
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''<b>this will be bold</b>
you should escape &lt;unknown&gt; tags
&copy; special entities work
&amp;copy; if you want to escape it''')}}

<p>HTML tags that are block-level like &lt;div&gt; can be used, but if there is markdown formatting
within it, you must add a "markdown" attribute: &lt;div markdown&gt;  Some safe attributes are also
allowed, permitting basic styling and layout: &lt;div markdown style="float:left"&gt;</p>

<p>Individual ampersands (&amp;) and less-than signs (&lt;) are fine, they will be shown as expected.</p>
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_moreheaders{{id}}">
<h2 id="md_ex_moreheaders{{id}}">More Headers</h2>
<p>More ways of doing headers:</p>
<div class="codehilite"><pre># this is a huge header #
## this is a smaller header ##
### this is even smaller ###
#### more small ####
##### even smaller #####
###### smallest still: `&lt;h6&gt;` header
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''# this is a huge header #
## this is a smaller header ##
### this is even smaller ###
#### more small ####
##### even smaller #####
###### smallest still: `<h6>` header''')}}
<p>You can use up to 6 <code>#</code> characters at the beginning of the line.</p>
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_toc{{id}}">
<h2 id="md_ex_toc{{id}}">Table of Contents</h2>
<p>You can display a list of links to jump to headers in a document. Sub-headers will be nested.</p>
<div class="codehilite"><pre>[TOC]

# Section 1
## Sub-section 1
# Section 2</pre></div>

<p>Output:</p>
{{g.markdown.convert('''[TOC]

# Section 1
## Sub-section 1
# Section 2''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_code{{id}}">
<h2 id="md_ex_code{{id}}">Code Highlighting</h2>
<p>The Code highlighting used in the newforge is based on (http://www.freewisdom.org/projects/python-markdown/CodeHilite). It  follows the same syntax as regular Markdown code blocks, except that there are two ways to tell the highlighter what language to use for the code block.</p>

<p>If the first line of the codeblock contains a shebang, the language is derived from that and line numbers are used.</p>

<div class="codehilite"><pre>
    #!/usr/bin/python
    # Code goes here ...
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
    #!/usr/bin/python
    # Code goes here ...''')}}

<p>If the first line contains a shebang, but the shebang line does not contain a path (a single / or even a space) or If the first line begins with three or more colons, the text following the colons identifies the language. In both cases, the first line is removed from the code block before processing.</p>

<div class="codehilite"><pre>
    :::python
    # Code goes here ...
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
    :::python
    # Code goes here ...''')}}

<p>You can also designate a code block by surrounding it with lines of tildes. The type of code highlighting to apply will be inferred based on the code within, or you can specify like above.</p>

<div class="codehilite"><pre>
~~~~~~
&lt;a href="#">My code&lt;/a>
~~~~~~
</pre></div>

<p>Output:</p>
{{g.markdown.convert('''
~~~~~~
<a href="#">My code</a>
~~~~~~''')}}
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_includes{{id}}">
<h2 id="md_ex_includes{{id}}">Includes</h2>
<p>You can embed another wiki page directly:</p>
<div class="codehilite"><pre>
[[include ref=SamplePage]]
</pre></div>

<p>No example output is available for this one because it only works on real wiki pages. Try it in your wiki!</p>
</div>


<div class="markdown_syntax_section hidden_in_modal md_ex_neighborhood_notes{{id}}">
<h2 id="md_ex_neighborhood_notes{{id}}">Neighborhood Notifications</h2>
<p>You can list updates from all projects in a neighborhood by tool type. Max_number (default is 5) and sort (default is pubdate) are optional:</p>
<div class="codehilite"><pre>
[[neighborhood_feeds tool_name=Wiki max_number=10 sort=pubdate]]
</pre></div>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_neighborhood_blog_posts{{id}}">
<h2 id="md_ex_neighborhood_blog_posts{{id}}">Neighborhood Blog Posts</h2>
<p>You can view blog posts from all projects in a neighborhood. Max_number (default is 5) and sort (default is timestamp) are optional:</p>
<div class="codehilite"><pre>
[[neighborhood_blog_posts max_number=10 sort=timestamp]]
</pre></div>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_project_blog_posts{{id}}">
<h2 id="md_ex_project_blog_posts{{id}}">Project Blog Posts</h2>
<p>You can view blog posts from all blogs in a project. Max_number (default is 5), mount point (leave empty to view posts from all blog tools in a project), and sort (default is timestamp) are optional:</p>
<div class="codehilite"><pre>
[[project_blog_posts max_number=10 sort=timestamp mount_point=news]]
</pre></div>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_download_button{{id}}">
<h2 id="md_ex_download_button{{id}}">Download Button</h2>
<p>You can display a download button that links to the best download available for the active project. Please note that if you use this macro and there is no download associated with your project, the button will not appear.</p>
<div class="codehilite"><pre>
[[download_button]]
</pre></div>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_project_screenshots{{id}}">
<h2 id="md_ex_project_screenshots{{id}}">Project Screenshots</h2>
<p>You can show all the screenshots for the current project as thumbnails that are linked to the full-size image.</p>
<div class="codehilite"><pre>
[[project_screenshots]]
</pre></div>
</div>

<div class="markdown_syntax_section hidden_in_modal md_ex_thanks{{id}}">
<h2 id="md_ex_thanks{{id}}">Thanks</h2>
<p>Thanks to John Gruber and Aaron Swartz for creating Markdown.</p>
<p>
This page is based on some examples from Greg Schueler, <a href="mailto:greg@vario.us">greg@vario.us</a>
</p>
</div>
{% endmacro %}
