<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::Cover Version 1.26
Devel::Cover is copyright 2001-2012, Paul Johnson (paul@pjcj.net)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
<meta http-equiv="Content-Language" content="en-us"></meta>
<link rel="stylesheet" type="text/css" href="cover.css"></link>
<link rel="stylesheet" type="text/css" href="cover.css"></link>
<title>File Coverage: lib/Yukki/Web/Plugin/YukkiText.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">lib/Yukki/Web/Plugin/YukkiText.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c0">39.4%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Yukki::Web::Plugin::YukkiText;</td></tr>
<tr><td class="h">2</td><td colspan="7"></td></tr><tr><td class="h">3</td><td><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L3">1</a></div></td><td></td><td><div>500</div><div>3</div></td><td class="s">use v5.24;</td></tr>
<tr><td class="h">4</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L4">1</a></div></td><td></td><td><div>3</div><div>2</div><div>3</div></td><td class="s">use utf8;</td></tr>
<tr><td class="h">5</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L5">1</a></div></td><td></td><td><div>10</div><div>4</div><div>2</div></td><td class="s">use Moo;</td></tr>
<tr><td class="h">6</td><td colspan="7"></td></tr><tr><td class="h">7</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L7">1</a></div></td><td></td><td><div>184</div><div>1</div><div>6</div></td><td class="s">use Type::Utils;</td></tr>
<tr><td class="h">8</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L8">1</a></div></td><td></td><td><div>986</div><div>1</div><div>6</div></td><td class="s">use Types::Standard qw( HashRef Str );</td></tr>
<tr><td class="h">9</td><td colspan="7"></td></tr><tr><td class="h">10</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">extends 'Yukki::Web::Plugin';</td></tr>
<tr><td class="h">11</td><td colspan="7"></td></tr><tr><td class="h">12</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># ABSTRACT: format text/yukki files using markdown, etc.</td></tr>
<tr><td class="h">13</td><td colspan="7"></td></tr><tr><td class="h">14</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L14">1</a></div></td><td></td><td><div>442</div><div>2</div><div>26</div></td><td class="s">use Text::MultiMarkdown;</td></tr>
<tr><td class="h">15</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L15">1</a></div></td><td></td><td><div>2</div><div>3</div><div>24</div></td><td class="s">use Try::Tiny;</td></tr>
<tr><td class="h">16</td><td colspan="7"></td></tr><tr><td class="h">17</td><td><div class="c3">1</div><div class="c3">1</div><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L17">1</a></div></td><td></td><td><div>2</div><div>1</div><div>5</div></td><td class="s">use namespace::clean;</td></tr>
<tr><td class="h">18</td><td colspan="7"></td></tr><tr><td class="h">19 - 49</td><td colspan="6"></td><td class="s"><pre>=head1 SYNOPSIS
# Plugins are not used directly...
my $repo = $self->model('Repository', { name => 'main' });
my $file = $repo->file({ full_path => "some-file.yukki' });
my $html = $file->fetch_formatted($ctx);
=head1 DESCRIPTION
Yukkitext formatting is based on Multi-Markdown, which is an extension to regular markdown that adds tables, metadata, and a few other tidbits. In addition to this, yukkitext adds linking using double-bracket notation:
[[ A Link ]]
[[ ./A Sub-Page Link ]]
[[ ./A Sub-Dir/Sub-Page Link ]]
[[ ./a-sub-dir/sub-page-link.pdf | Sub-Page PDF ]]
This link format is based loosely upon the format used by MojoMojo, which I was using prior to developing Yukki.
It also adds support for format helpers usinga double-curly brace notation:
{{attachment:Path/To/Attachment.pdf}}
{{=:5 + 5}}
=head1 ATTRIBUTES
=head2 html_formatters
This returns the yukkitext formatter for "text/yukki".
=cut</pre></td></tr>
<tr><td class="h">50</td><td colspan="7"></td></tr><tr><td class="h">51</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has html_formatters => (</td></tr>
<tr><td class="h">52</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> is => 'ro',</td></tr>
<tr><td class="h">53</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> isa => HashRef[Str],</td></tr>
<tr><td class="h">54</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> required => 1,</td></tr>
<tr><td class="h">55</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> default => sub { +{</td></tr>
<tr><td class="h">56</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> 'text/yukki' => 'yukkitext',</td></tr>
<tr><td class="h">57</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> } },</td></tr>
<tr><td class="h">58</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">59</td><td colspan="7"></td></tr><tr><td class="h">60</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">with 'Yukki::Web::Plugin::Role::Formatter';</td></tr>
<tr><td class="h">61</td><td colspan="7"></td></tr><tr><td class="h">62 - 69</td><td colspan="6"></td><td class="s"><pre>=head2 markdown
This is the L<Text::MultiMarkdown> object for rendering L</yukkitext>. Do not
use.
Provides a C<format_markdown> method delegated to C<markdown>. Do not use.
=cut</pre></td></tr>
<tr><td class="h">70</td><td colspan="7"></td></tr><tr><td class="h">71</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has markdown => (</td></tr>
<tr><td class="h">72</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> is => 'ro',</td></tr>
<tr><td class="h">73</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> isa => class_type('Text::MultiMarkdown'),</td></tr>
<tr><td class="h">74</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> required => 1,</td></tr>
<tr><td class="h">75</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> lazy => 1,</td></tr>
<tr><td class="h">76</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> builder => '_build_markdown',</td></tr>
<tr><td class="h">77</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> handles => {</td></tr>
<tr><td class="h">78</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> 'format_markdown' => 'markdown',</td></tr>
<tr><td class="h">79</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> },</td></tr>
<tr><td class="h">80</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">);</td></tr>
<tr><td class="h">81</td><td colspan="7"></td></tr><tr><td class="h">82</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _build_markdown {</td></tr>
<tr><td class="h">83</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L83">1</a></div></td><td></td><td><div>40</div></td><td class="s"> Text::MultiMarkdown->new(</td></tr>
<tr><td class="h">84</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> markdown_in_html_blocks => 1,</td></tr>
<tr><td class="h">85</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> heading_ids => 0,</td></tr>
<tr><td class="h">86</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> strip_metadata => 1,</td></tr>
<tr><td class="h">87</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> );</td></tr>
<tr><td class="h">88</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">89</td><td colspan="7"></td></tr><tr><td class="h">90 - 96</td><td colspan="6"></td><td class="s"><pre>=head1 METHODS
=head2 yukkilink
Used to help render yukkilinks. Do not use.
=cut</pre></td></tr>
<tr><td class="h">97</td><td colspan="7"></td></tr><tr><td class="h">98</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub yukkilink {</td></tr>
<tr><td class="h">99</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L99">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s"> my ($self, $params) = @_;</td></tr>
<tr><td class="h">100</td><td colspan="7"></td></tr><tr><td class="h">101</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $file = $params->{file};</td></tr>
<tr><td class="h">102</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $ctx = $params->{context};</td></tr>
<tr><td class="h">103</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $repository = $file->repository_name;</td></tr>
<tr><td class="h">104</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $link = $params->{link};</td></tr>
<tr><td class="h">105</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $label = $params->{label};</td></tr>
<tr><td class="h">106</td><td colspan="7"></td></tr><tr><td class="h">107</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div><div>0</div></td><td class="s"> $link =~ s/^\s+//; $link =~ s/\s+$//;</td></tr>
<tr><td class="h">108</td><td colspan="7"></td></tr><tr><td class="h">109</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L109">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my ($repo_name, $local_link) = split /:/, $link, 2 if $link =~ /:/;</td></tr>
<tr><td class="h">110</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L110">0</a></div></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--condition.html#L110">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s"> if (defined $repo_name and defined $self->app->settings->{repositories}{$repo_name}) {</td></tr>
<tr><td class="h">111</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $repository = $repo_name;</td></tr>
<tr><td class="h">112</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $link = $local_link;</td></tr>
<tr><td class="h">113</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">114</td><td colspan="7"></td></tr><tr><td class="h">115</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # If we did not get a label, make the label into the link</td></tr>
<tr><td class="h">116</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L116">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> if (not defined $label) {</td></tr>
<tr><td class="h">117</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> ($label) = $link =~ m{([^/]+)$};</td></tr>
<tr><td class="h">118</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $link = $self->app->munge_label($link);</td></tr>
<tr><td class="h">119</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">120</td><td colspan="7"></td></tr><tr><td class="h">121</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my @base_name;</td></tr>
<tr><td class="h">122</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L122">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> if ($file->full_path) {</td></tr>
<tr><td class="h">123</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $base_name[0] = $file->full_path;</td></tr>
<tr><td class="h">124</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $base_name[0] =~ s/\.yukki$//g;</td></tr>
<tr><td class="h">125</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">126</td><td colspan="7"></td></tr><tr><td class="h">127</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L127">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $link = join '/', @base_name, $link if $link =~ m{^\./};</td></tr>
<tr><td class="h">128</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $link =~ s{^/}{};</td></tr>
<tr><td class="h">129</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $link =~ s{/\./}{/}g;</td></tr>
<tr><td class="h">130</td><td colspan="7"></td></tr><tr><td class="h">131</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div><div>0</div></td><td class="s"> $label =~ s/^\s*//; $label =~ s/\s*$//;</td></tr>
<tr><td class="h">132</td><td colspan="7"></td></tr><tr><td class="h">133</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L133">0</a></div></td><td></td><td><div>0</div><div>0</div></td><td class="s"> my $b = sub { $ctx->rebase_url($_[0]) };</td></tr>
<tr><td class="h">134</td><td colspan="7"></td></tr><tr><td class="h">135</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $link_repo = $self->model('Repository', { name => $repository });</td></tr>
<tr><td class="h">136</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $link_file = $link_repo->file({ full_path => $link });</td></tr>
<tr><td class="h">137</td><td colspan="7"></td></tr><tr><td class="h">138</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L138">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $class = $link_file->exists ? 'exists' : 'not-exists';</td></tr>
<tr><td class="h">139</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> return qq{<a class="$class" href="}.$b->("page/view/$repository/$link").qq{">$label</a>};</td></tr>
<tr><td class="h">140</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">141</td><td colspan="7"></td></tr><tr><td class="h">142 - 146</td><td colspan="6"></td><td class="s"><pre>=head2 yukkiplugin
Used to render plugged in markup. Do not use.
=cut</pre></td></tr>
<tr><td class="h">147</td><td colspan="7"></td></tr><tr><td class="h">148</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub yukkiplugin {</td></tr>
<tr><td class="h">149</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L149">0</a></div></td><td><div class="c3">1</div></td><td><div>0</div></td><td class="s"> my ($self, $params) = @_;</td></tr>
<tr><td class="h">150</td><td colspan="7"></td></tr><tr><td class="h">151</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $ctx = $params->{context};</td></tr>
<tr><td class="h">152</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $plugin_name = $params->{plugin_name};</td></tr>
<tr><td class="h">153</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $arg = $params->{arg};</td></tr>
<tr><td class="h">154</td><td colspan="7"></td></tr><tr><td class="h">155</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $text;</td></tr>
<tr><td class="h">156</td><td colspan="7"></td></tr><tr><td class="h">157</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my @plugins = $self->app->format_helper_plugins;</td></tr>
<tr><td class="h">158</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> PLUGIN: for my $plugin (@plugins) {</td></tr>
<tr><td class="h">159</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> my $helpers = $plugin->format_helpers;</td></tr>
<tr><td class="h">160</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L160">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> if (defined $helpers->{ $plugin_name }) {</td></tr>
<tr><td class="h">161</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> $text = try {</td></tr>
<tr><td class="h">162</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L162">0</a></div></td><td></td><td><div>0</div></td><td class="s"> my $helper = $helpers->{ $plugin_name };</td></tr>
<tr><td class="h">163</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> $plugin->$helper({</td></tr>
<tr><td class="h">164</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> context => $ctx,</td></tr>
<tr><td class="h">165</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> file => $params->{file},</td></tr>
<tr><td class="h">166</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> helper_name => $plugin_name,</td></tr>
<tr><td class="h">167</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> arg => $arg,</td></tr>
<tr><td class="h">168</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> });</td></tr>
<tr><td class="h">169</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">170</td><td colspan="7"></td></tr><tr><td class="h">171</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> catch {</td></tr>
<tr><td class="h">172</td><td><div class="c0">0</div></td><td></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L172">0</a></div></td><td></td><td><div>0</div></td><td class="s"> warn "Plugin Error: $_";</td></tr>
<tr><td class="h">173</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> };</td></tr>
<tr><td class="h">174</td><td colspan="7"></td></tr><tr><td class="h">175</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L175">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> last PLUGIN if defined $text;</td></tr>
<tr><td class="h">176</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">177</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }</td></tr>
<tr><td class="h">178</td><td colspan="7"></td></tr><tr><td class="h">179</td><td><div class="c0">0</div></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--condition.html#L179">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s"> $text //= "{{$plugin_name:$arg}}";</td></tr>
<tr><td class="h">180</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> return $text;</td></tr>
<tr><td class="h">181</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">182</td><td colspan="7"></td></tr><tr><td class="h">183 - 200</td><td colspan="6"></td><td class="s"><pre>=head2 yukkitext
my $html = $view->yukkitext({
context => $ctx,
repository => $repository_name,
page => $page,
file => $file,
});
Yukkitext is markdown plus some extra stuff. The extra stuff is:
[[ main:/link/to/page.yukki | Link Title ]] - wiki link
[[ /link/to/page.yukki | Link Title ]] - wiki link
[[ /link/to/page.yukki ]] - wiki link
{{attachment:file.pdf}} - attachment URL
=cut</pre></td></tr>
<tr><td class="h">201</td><td colspan="7"></td></tr><tr><td class="h">202</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub yukkitext {</td></tr>
<tr><td class="h">203</td><td><div class="c3">1</div></td><td></td><td></td><td><div class="c3"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--subroutine.html#L203">1</a></div></td><td><div class="c3">1</div></td><td><div>2</div></td><td class="s"> my ($self, $params) = @_;</td></tr>
<tr><td class="h">204</td><td colspan="7"></td></tr><tr><td class="h">205</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s"> my $file = $params->{file};</td></tr>
<tr><td class="h">206</td><td><div class="c3">1</div></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--condition.html#L206">50</a></div></td><td></td><td></td><td><div>4</div></td><td class="s"> my $position = 0 + ($params->{position} // -1);</td></tr>
<tr><td class="h">207</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>17</div></td><td class="s"> my $repository = $file->repository_name;</td></tr>
<tr><td class="h">208</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>31</div></td><td class="s"> my $yukkitext = $file->fetch;</td></tr>
<tr><td class="h">209</td><td colspan="7"></td></tr><tr><td class="h">210</td><td><div class="c3">1</div></td><td><div class="c0" title="-/F"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--branch.html#L210">50</a></div></td><td></td><td></td><td></td><td><div>14196</div></td><td class="s"> $yukkitext =~ s[(.{$position}.*?)$][$1<span id="yukkitext-caret"></span>]sm</td></tr>
<tr><td class="h">211</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> if $position >= 0;</td></tr>
<tr><td class="h">212</td><td colspan="7"></td></tr><tr><td class="h">213</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # Yukki Links</td></tr>
<tr><td class="h">214</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>7</div></td><td class="s"> $yukkitext =~ s{</td></tr>
<tr><td class="h">215</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?<!\\) # \ will escape the link</td></tr>
<tr><td class="h">216</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \[\[ \s* # [[ to start it</td></tr>
<tr><td class="h">217</td><td colspan="7"></td></tr><tr><td class="h">218</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?: ([\w]+) : )? # repository: is optional</td></tr>
<tr><td class="h">219</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> ([^|\]]+) \s* # link/to/page is mandatory</td></tr>
<tr><td class="h">220</td><td colspan="7"></td></tr><tr><td class="h">221</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?: \| # | to split link from label</td></tr>
<tr><td class="h">222</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> ([^\]]+) # a pretty label (needs trimming)</td></tr>
<tr><td class="h">223</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> )? # is optional</td></tr>
<tr><td class="h">224</td><td colspan="7"></td></tr><tr><td class="h">225</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \]\] # ]] to end</td></tr>
<tr><td class="h">226</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }{</td></tr>
<tr><td class="h">227</td><td><div class="c0">0</div></td><td></td><td><div class="c0"><a href="lib-Yukki-Web-Plugin-YukkiText-pm--condition.html#L227">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s"> $self->yukkilink({</td></tr>
<tr><td class="h">228</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> %$params,</td></tr>
<tr><td class="h">229</td><td colspan="7"></td></tr><tr><td class="h">230</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> repository => $1 // $repository,</td></tr>
<tr><td class="h">231</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> link => $2,</td></tr>
<tr><td class="h">232</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> label => $3,</td></tr>
<tr><td class="h">233</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> });</td></tr>
<tr><td class="h">234</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }xeg;</td></tr>
<tr><td class="h">235</td><td colspan="7"></td></tr><tr><td class="h">236</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # Handle escaped links, hide the escape</td></tr>
<tr><td class="h">237</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>4</div></td><td class="s"> $yukkitext =~ s{</td></tr>
<tr><td class="h">238</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \\ # \ will escape the link</td></tr>
<tr><td class="h">239</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (\[\[ \s* # [[ to start it</td></tr>
<tr><td class="h">240</td><td colspan="7"></td></tr><tr><td class="h">241</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?: [\w]+ : )? # repository: is optional</td></tr>
<tr><td class="h">242</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> [^|\]]+ \s* # link/to/page is mandatory</td></tr>
<tr><td class="h">243</td><td colspan="7"></td></tr><tr><td class="h">244</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?: \| # | to split link from label</td></tr>
<tr><td class="h">245</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> [^\]]+ # a pretty label (needs trimming)</td></tr>
<tr><td class="h">246</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> )? # is optional</td></tr>
<tr><td class="h">247</td><td colspan="7"></td></tr><tr><td class="h">248</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \]\]) # ]] to end</td></tr>
<tr><td class="h">249</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }{$1}gx;</td></tr>
<tr><td class="h">250</td><td colspan="7"></td></tr><tr><td class="h">251</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # Yukki Plugins</td></tr>
<tr><td class="h">252</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>3</div></td><td class="s"> $yukkitext =~ s{</td></tr>
<tr><td class="h">253</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (?<!\\) # \ will escape the plugin</td></tr>
<tr><td class="h">254</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \{\{ \s* # {{ to start it</td></tr>
<tr><td class="h">255</td><td colspan="7"></td></tr><tr><td class="h">256</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> ([^:]+) : # plugin_name: is required</td></tr>
<tr><td class="h">257</td><td colspan="7"></td></tr><tr><td class="h">258</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (.*?) # plugin arguments</td></tr>
<tr><td class="h">259</td><td colspan="7"></td></tr><tr><td class="h">260</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \}\} # }} to end</td></tr>
<tr><td class="h">261</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }{</td></tr>
<tr><td class="h">262</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s"> $self->yukkiplugin({</td></tr>
<tr><td class="h">263</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> %$params,</td></tr>
<tr><td class="h">264</td><td colspan="7"></td></tr><tr><td class="h">265</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> plugin_name => $1,</td></tr>
<tr><td class="h">266</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> arg => $2,</td></tr>
<tr><td class="h">267</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> });</td></tr>
<tr><td class="h">268</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }xegms;</td></tr>
<tr><td class="h">269</td><td colspan="7"></td></tr><tr><td class="h">270</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # Handle the escaped plugin thing</td></tr>
<tr><td class="h">271</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>4</div></td><td class="s"> $yukkitext =~ s{</td></tr>
<tr><td class="h">272</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \\ # \ will escape the plugin</td></tr>
<tr><td class="h">273</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> (\{\{ \s* # {{ to start it</td></tr>
<tr><td class="h">274</td><td colspan="7"></td></tr><tr><td class="h">275</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> [^:]+ : # plugin_name: is required</td></tr>
<tr><td class="h">276</td><td colspan="7"></td></tr><tr><td class="h">277</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> .*? # plugin arguments</td></tr>
<tr><td class="h">278</td><td colspan="7"></td></tr><tr><td class="h">279</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> \}\}) # }} to end</td></tr>
<tr><td class="h">280</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> }{$1}xgms;</td></tr>
<tr><td class="h">281</td><td colspan="7"></td></tr><tr><td class="h">282</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>49</div></td><td class="s"> my $formatted = '<div>' . $self->format_markdown($yukkitext) . '</div>';</td></tr>
<tr><td class="h">283</td><td colspan="7"></td></tr><tr><td class="h">284</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> # Just in case markdown mangled the caret marker:</td></tr>
<tr><td class="h">285</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>3318</div></td><td class="s"> $formatted =~ s[&lt;span id="yukkitext-caret"&gt;&lt;/span&gt;]</td></tr>
<tr><td class="h">286</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"> [<span id="yukkitext-caret"></span>];</td></tr>
<tr><td class="h">287</td><td colspan="7"></td></tr><tr><td class="h">288</td><td><div class="c3">1</div></td><td></td><td></td><td></td><td></td><td><div>22</div></td><td class="s"> return $formatted;</td></tr>
<tr><td class="h">289</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">290</td><td colspan="7"></td></tr><tr><td class="h">291</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>