reveal-ck 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +13 -0
- data/bin/reveal-ck +23 -8
- data/lib/reveal-ck.rb +6 -0
- data/lib/reveal-ck/build_task.rb +14 -0
- data/lib/reveal-ck/builder.rb +21 -0
- data/lib/reveal-ck/config.rb +43 -0
- data/lib/reveal-ck/file_slicer.rb +19 -17
- data/lib/reveal-ck/file_splicer.rb +30 -28
- data/lib/reveal-ck/file_string_replacer.rb +17 -0
- data/lib/reveal-ck/haml_processor.rb +17 -15
- data/lib/reveal-ck/presentation_builder.rb +69 -0
- data/lib/reveal-ck/slide_builder.rb +66 -0
- data/lib/reveal-ck/version.rb +1 -1
- data/rakelib/cucumber.rake +14 -1
- data/reveal.js/Gruntfile.js +132 -0
- data/reveal.js/LICENSE +1 -1
- data/reveal.js/README.md +362 -50
- data/reveal.js/css/print/paper.css +14 -14
- data/reveal.js/css/print/pdf.css +60 -30
- data/reveal.js/css/reveal.css +444 -149
- data/reveal.js/css/reveal.min.css +2 -2
- data/reveal.js/css/theme/README.md +8 -10
- data/reveal.js/css/theme/beige.css +24 -45
- data/reveal.js/css/theme/default.css +24 -45
- data/reveal.js/css/theme/moon.css +142 -0
- data/reveal.js/css/theme/night.css +24 -44
- data/reveal.js/css/theme/serif.css +27 -45
- data/reveal.js/css/theme/simple.css +25 -45
- data/reveal.js/css/theme/sky.css +26 -43
- data/reveal.js/css/theme/solarized.css +142 -0
- data/reveal.js/css/theme/source/beige.scss +2 -2
- data/reveal.js/css/theme/source/default.scss +2 -2
- data/reveal.js/css/theme/source/moon.scss +68 -0
- data/reveal.js/css/theme/source/night.scss +4 -4
- data/reveal.js/css/theme/source/serif.scss +8 -6
- data/reveal.js/css/theme/source/simple.scss +5 -5
- data/reveal.js/css/theme/source/sky.scss +9 -4
- data/reveal.js/css/theme/source/solarized.scss +74 -0
- data/reveal.js/css/theme/template/settings.scss +2 -2
- data/reveal.js/examples/assets/image1.png +0 -0
- data/reveal.js/examples/assets/image2.png +0 -0
- data/reveal.js/examples/barebones.html +42 -0
- data/reveal.js/examples/embedded-media.html +49 -0
- data/reveal.js/examples/slide-backgrounds.html +101 -0
- data/reveal.js/index.html +63 -56
- data/reveal.js/js/reveal.js +997 -216
- data/reveal.js/js/reveal.min.js +3 -3
- data/reveal.js/package.json +43 -29
- data/reveal.js/plugin/highlight/highlight.js +28 -6
- data/reveal.js/plugin/markdown/example.html +97 -0
- data/reveal.js/plugin/markdown/example.md +29 -0
- data/reveal.js/plugin/markdown/markdown.js +164 -11
- data/reveal.js/plugin/markdown/marked.js +37 -0
- data/reveal.js/plugin/multiplex/client.js +13 -0
- data/reveal.js/plugin/multiplex/index.js +56 -0
- data/reveal.js/plugin/multiplex/master.js +50 -0
- data/reveal.js/plugin/notes-server/index.js +1 -0
- data/reveal.js/plugin/notes-server/notes.html +8 -5
- data/reveal.js/plugin/notes/notes.html +133 -44
- data/reveal.js/plugin/notes/notes.js +3 -1
- data/reveal.js/plugin/print-pdf/print-pdf.js +8 -3
- data/reveal.js/plugin/remotes/remotes.js +13 -4
- data/reveal.js/plugin/search/search.js +196 -0
- data/reveal.js/plugin/zoom-js/zoom.js +26 -21
- data/spec/data/config/config.toml +6 -0
- data/spec/data/string_replacer/after_replace +4 -0
- data/spec/data/string_replacer/before_replace +4 -0
- data/spec/lib/reveal-ck/config_spec.rb +50 -0
- data/spec/lib/reveal-ck/file_slicer_spec.rb +29 -27
- data/spec/lib/reveal-ck/file_splicer_spec.rb +28 -26
- data/spec/lib/reveal-ck/file_string_replacer_spec.rb +32 -0
- data/spec/lib/reveal-ck/haml_processor_spec.rb +28 -26
- metadata +82 -27
- data/rakelib/presentation.rake +0 -41
- data/rakelib/reveal.rake +0 -15
- data/reveal.js/css/shaders/tile-flip.fs +0 -64
- data/reveal.js/css/shaders/tile-flip.vs +0 -141
- data/reveal.js/grunt.js +0 -84
- data/reveal.js/plugin/markdown/showdown.js +0 -62
data/rakelib/presentation.rake
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'rake/clean'
|
2
|
-
|
3
|
-
# FileLists
|
4
|
-
DIR_IMAGES_FILES = FileList["images/**/*"]
|
5
|
-
|
6
|
-
revealjs = File.expand_path(File.join(File.dirname(__FILE__), '..', 'reveal.js'))
|
7
|
-
REVEAL_FILES = FileList["#{revealjs}/**/*"]
|
8
|
-
|
9
|
-
#
|
10
|
-
# task: slides
|
11
|
-
task 'slides' do
|
12
|
-
mkdir_p 'slides', verbose: false
|
13
|
-
end
|
14
|
-
CLEAN.include 'slides'
|
15
|
-
|
16
|
-
#
|
17
|
-
# task: slides.html
|
18
|
-
desc 'Build slides.html'
|
19
|
-
file 'slides/slides.html' => [ 'slides.haml', 'slides' ] do
|
20
|
-
processor = HamlProcessor.open 'slides.haml'
|
21
|
-
File.open('slides/slides.html', 'w') { |f| f << processor.html }
|
22
|
-
end
|
23
|
-
CLEAN.include 'slides/slides.html'
|
24
|
-
|
25
|
-
#
|
26
|
-
# task: presentation
|
27
|
-
desc 'Build presentation'
|
28
|
-
task :presentation => [ 'slides/slides.html'] do
|
29
|
-
cp_r REVEAL_FILES, 'slides', verbose: false
|
30
|
-
mkdir_p 'slides/images', verbose: false
|
31
|
-
cp_r DIR_IMAGES_FILES, 'slides/images', verbose: false
|
32
|
-
line_nums = {
|
33
|
-
default_slides: {
|
34
|
-
first: 37,
|
35
|
-
last: 338
|
36
|
-
}
|
37
|
-
}
|
38
|
-
default_slides = line_nums[:default_slides][:first]..line_nums[:default_slides][:last]
|
39
|
-
FileSlicer.remove! 'slides/index.html', default_slides
|
40
|
-
FileSplicer.insert! 'slides/slides.html', into: 'slides/index.html', after: '<div class="slides">'
|
41
|
-
end
|
data/rakelib/reveal.rake
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'rake/clean'
|
2
|
-
|
3
|
-
file 'reveal.js/index.html' do
|
4
|
-
`git submodule init`
|
5
|
-
`git submodule update`
|
6
|
-
end
|
7
|
-
|
8
|
-
CLOBBER.include 'reveal.js'
|
9
|
-
task :clobber do
|
10
|
-
# Spirit of clobber is to bring repository back to pristine state
|
11
|
-
# after cloning. If that's the case, then we want to rm -r reveal.js
|
12
|
-
# && mkdir reveal.js. By observation, redefining the task :clobber
|
13
|
-
# and adding this mkdir achieves that
|
14
|
-
mkdir 'reveal.js'
|
15
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved.
|
3
|
-
* Copyright (c) 2012 Branislav Ulicny
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
|
18
|
-
precision mediump float;
|
19
|
-
|
20
|
-
// Uniform values from CSS
|
21
|
-
|
22
|
-
uniform float amount;
|
23
|
-
uniform float tileOutline;
|
24
|
-
|
25
|
-
// Built-in uniforms
|
26
|
-
|
27
|
-
uniform vec2 u_meshSize;
|
28
|
-
uniform vec2 u_textureSize;
|
29
|
-
|
30
|
-
// Varyings passed in from vertex shader
|
31
|
-
|
32
|
-
varying float v_depth;
|
33
|
-
varying vec2 v_uv;
|
34
|
-
|
35
|
-
// Main
|
36
|
-
|
37
|
-
void main()
|
38
|
-
{
|
39
|
-
// FIXME: Must swap x and y as a workaround for:
|
40
|
-
// https://bugs.webkit.org/show_bug.cgi?id=96285
|
41
|
-
vec2 u_meshSize = u_meshSize.yx;
|
42
|
-
|
43
|
-
vec4 c = vec4(1.0);
|
44
|
-
|
45
|
-
// Fade out.
|
46
|
-
c.a = 1.0 - v_depth;
|
47
|
-
|
48
|
-
// Show grid outline.
|
49
|
-
if (tileOutline >= 0.5) {
|
50
|
-
float cell_width = u_textureSize.x / u_meshSize.y;
|
51
|
-
float cell_height = u_textureSize.y / u_meshSize.x;
|
52
|
-
float dd = 1.0;
|
53
|
-
|
54
|
-
if (mod(v_uv.x * u_textureSize.x + dd, cell_width) < 2.0
|
55
|
-
|| mod(v_uv.y * u_textureSize.y + dd, cell_height) < 2.0) {
|
56
|
-
if (amount > 0.0)
|
57
|
-
c.rgb = vec3(1.0 - sqrt(amount));
|
58
|
-
}
|
59
|
-
}
|
60
|
-
css_ColorMatrix = mat4(c.r, 0.0, 0.0, 0.0,
|
61
|
-
0.0, c.g, 0.0, 0.0,
|
62
|
-
0.0, 0.0, c.b, 0.0,
|
63
|
-
0.0, 0.0, 0.0, c.a);
|
64
|
-
}
|
@@ -1,141 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (c)2012 Adobe Systems Incorporated. All rights reserved.
|
3
|
-
* Copyright (c)2012 Branislav Ulicny
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
|
18
|
-
precision mediump float;
|
19
|
-
|
20
|
-
// Built-in attributes
|
21
|
-
|
22
|
-
attribute vec4 a_position;
|
23
|
-
attribute vec2 a_texCoord;
|
24
|
-
attribute vec3 a_triangleCoord;
|
25
|
-
|
26
|
-
// Built-in uniforms
|
27
|
-
|
28
|
-
uniform mat4 u_projectionMatrix;
|
29
|
-
uniform vec2 u_meshSize;
|
30
|
-
uniform vec2 u_textureSize;
|
31
|
-
|
32
|
-
// Uniform passed in from CSS
|
33
|
-
|
34
|
-
uniform mat4 transform;
|
35
|
-
uniform float amount;
|
36
|
-
uniform float randomness;
|
37
|
-
uniform vec3 flipAxis;
|
38
|
-
|
39
|
-
// Varyings
|
40
|
-
|
41
|
-
varying float v_depth;
|
42
|
-
varying vec2 v_uv;
|
43
|
-
|
44
|
-
// Constants
|
45
|
-
|
46
|
-
const float PI2 = 1.5707963267948966;
|
47
|
-
|
48
|
-
// Create perspective matrix
|
49
|
-
|
50
|
-
mat4 perspectiveMatrix(float p)
|
51
|
-
{
|
52
|
-
float perspective = - 1.0 / p;
|
53
|
-
return mat4(
|
54
|
-
1.0, 0.0, 0.0, 0.0,
|
55
|
-
0.0, 1.0, 0.0, 0.0,
|
56
|
-
0.0, 0.0, 1.0, perspective,
|
57
|
-
0.0, 0.0, 0.0, 1.0
|
58
|
-
);
|
59
|
-
}
|
60
|
-
|
61
|
-
// Rotate vector
|
62
|
-
|
63
|
-
vec3 rotateVectorByQuaternion(vec3 v, vec4 q)
|
64
|
-
{
|
65
|
-
vec3 dest = vec3(0.0);
|
66
|
-
|
67
|
-
float x = v.x, y = v.y, z = v.z;
|
68
|
-
float qx = q.x, qy = q.y, qz = q.z, qw = q.w;
|
69
|
-
|
70
|
-
// Calculate quaternion * vector.
|
71
|
-
|
72
|
-
float ix = qw * x + qy * z - qz * y,
|
73
|
-
iy = qw * y + qz * x - qx * z,
|
74
|
-
iz = qw * z + qx * y - qy * x,
|
75
|
-
iw = -qx * x - qy * y - qz * z;
|
76
|
-
|
77
|
-
// Calculate result * inverse quaternion.
|
78
|
-
|
79
|
-
dest.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
80
|
-
dest.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
81
|
-
dest.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
82
|
-
|
83
|
-
return dest;
|
84
|
-
}
|
85
|
-
|
86
|
-
// Convert rotation.
|
87
|
-
|
88
|
-
vec4 axisAngleToQuaternion(vec3 axis, float angle)
|
89
|
-
{
|
90
|
-
vec4 dest = vec4(0.0);
|
91
|
-
|
92
|
-
float halfAngle = angle / 2.0;
|
93
|
-
float s = sin(halfAngle);
|
94
|
-
|
95
|
-
dest.x = axis.x * s;
|
96
|
-
dest.y = axis.y * s;
|
97
|
-
dest.z = axis.z * s;
|
98
|
-
dest.w = cos(halfAngle);
|
99
|
-
|
100
|
-
return dest;
|
101
|
-
}
|
102
|
-
|
103
|
-
// Random function based on the tile coordinate.
|
104
|
-
// This will return the same value for all the vertices in the same tile (i.e. two triangles).
|
105
|
-
|
106
|
-
float random(vec2 scale)
|
107
|
-
{
|
108
|
-
// Use the fragment position as a different seed per-pixel.
|
109
|
-
return fract(sin(dot(vec2(a_triangleCoord.x, a_triangleCoord.y), scale)) * 4000.0);
|
110
|
-
}
|
111
|
-
|
112
|
-
// Main
|
113
|
-
|
114
|
-
void main()
|
115
|
-
{
|
116
|
-
// FIXME: We must swap x and y as a workaround for:
|
117
|
-
// https://bugs.webkit.org/show_bug.cgi?id=96285
|
118
|
-
vec2 u_meshSize = u_meshSize.yx;
|
119
|
-
|
120
|
-
vec4 pos = a_position;
|
121
|
-
float aspect = u_textureSize.x / u_textureSize.y;
|
122
|
-
|
123
|
-
float cx = a_triangleCoord.x / u_meshSize.y - 0.5 + 0.5 / u_meshSize.y;
|
124
|
-
float cy = a_triangleCoord.y / u_meshSize.x - 0.5 + 0.5 / u_meshSize.x;
|
125
|
-
|
126
|
-
vec3 centroid = vec3(cx, cy, 0.0);
|
127
|
-
float r = random(vec2(10.0, 80.0));
|
128
|
-
float rr = mix(0.0, PI2, amount * (1.0 + randomness * r));
|
129
|
-
|
130
|
-
vec4 rotation = vec4(flipAxis, rr);
|
131
|
-
vec4 qRotation = axisAngleToQuaternion(normalize(rotation.xyz), rotation.w);
|
132
|
-
|
133
|
-
vec3 newPosition = rotateVectorByQuaternion((pos.xyz - centroid)* vec3(aspect, 1., 1.0), qRotation) * vec3(1.0 / aspect, 1.0, 1.0) + centroid;
|
134
|
-
pos.xyz = newPosition;
|
135
|
-
|
136
|
-
gl_Position = u_projectionMatrix * transform * pos;
|
137
|
-
|
138
|
-
// Pass varyings to the fragment shader.
|
139
|
-
v_depth = abs(rr)/ PI2;
|
140
|
-
v_uv = a_texCoord;
|
141
|
-
}
|
data/reveal.js/grunt.js
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
/* global module:false */
|
2
|
-
module.exports = function(grunt) {
|
3
|
-
|
4
|
-
// Project configuration
|
5
|
-
grunt.initConfig({
|
6
|
-
pkg: '<json:package.json>',
|
7
|
-
|
8
|
-
inputJS: 'js/reveal.js',
|
9
|
-
inputCSS: 'css/reveal.css',
|
10
|
-
|
11
|
-
outputJS: 'js/reveal.min.js',
|
12
|
-
outputCSS: 'css/reveal.min.css',
|
13
|
-
|
14
|
-
meta: {
|
15
|
-
version: '2.2',
|
16
|
-
banner:
|
17
|
-
'/*!\n' +
|
18
|
-
' * reveal.js <%= meta.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
|
19
|
-
' * http://lab.hakim.se/reveal-js\n' +
|
20
|
-
' * MIT licensed\n' +
|
21
|
-
' *\n' +
|
22
|
-
' * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n' +
|
23
|
-
' */'
|
24
|
-
},
|
25
|
-
|
26
|
-
lint: {
|
27
|
-
files: [ 'grunt.js', '<%= inputJS %>' ]
|
28
|
-
},
|
29
|
-
|
30
|
-
// Tests will be added soon
|
31
|
-
qunit: {
|
32
|
-
files: [ 'test/**/*.html' ]
|
33
|
-
},
|
34
|
-
|
35
|
-
min: {
|
36
|
-
dist: {
|
37
|
-
src: [ '<banner:meta.banner>', '<%= inputJS %>' ],
|
38
|
-
dest: '<%= outputJS %>'
|
39
|
-
}
|
40
|
-
},
|
41
|
-
|
42
|
-
mincss: {
|
43
|
-
compress: {
|
44
|
-
files: {
|
45
|
-
'<%= outputCSS %>': [ '<%= inputCSS %>' ]
|
46
|
-
}
|
47
|
-
}
|
48
|
-
},
|
49
|
-
|
50
|
-
jshint: {
|
51
|
-
options: {
|
52
|
-
curly: false,
|
53
|
-
eqeqeq: true,
|
54
|
-
immed: true,
|
55
|
-
latedef: true,
|
56
|
-
newcap: true,
|
57
|
-
noarg: true,
|
58
|
-
sub: true,
|
59
|
-
undef: true,
|
60
|
-
eqnull: true,
|
61
|
-
browser: true,
|
62
|
-
expr: true
|
63
|
-
},
|
64
|
-
globals: {
|
65
|
-
head: false,
|
66
|
-
module: false,
|
67
|
-
console: false
|
68
|
-
}
|
69
|
-
},
|
70
|
-
|
71
|
-
watch: {
|
72
|
-
files: [ 'grunt.js', '<%= inputJS %>', '<%= inputCSS %>' ],
|
73
|
-
tasks: 'default'
|
74
|
-
}
|
75
|
-
|
76
|
-
});
|
77
|
-
|
78
|
-
// Dependencies
|
79
|
-
grunt.loadNpmTasks( 'grunt-contrib-mincss' );
|
80
|
-
|
81
|
-
// Default task
|
82
|
-
grunt.registerTask( 'default', [ 'lint', 'mincss', 'min' ] );
|
83
|
-
|
84
|
-
};
|
@@ -1,62 +0,0 @@
|
|
1
|
-
//
|
2
|
-
// showdown.js -- A javascript port of Markdown.
|
3
|
-
//
|
4
|
-
// Copyright (c) 2007 John Fraser.
|
5
|
-
//
|
6
|
-
// Original Markdown Copyright (c) 2004-2005 John Gruber
|
7
|
-
// <http://daringfireball.net/projects/markdown/>
|
8
|
-
//
|
9
|
-
// Redistributable under a BSD-style open source license.
|
10
|
-
// See license.txt for more information.
|
11
|
-
//
|
12
|
-
// The full source distribution is at:
|
13
|
-
//
|
14
|
-
// A A L
|
15
|
-
// T C A
|
16
|
-
// T K B
|
17
|
-
//
|
18
|
-
// <http://www.attacklab.net/>
|
19
|
-
//
|
20
|
-
//
|
21
|
-
// Wherever possible, Showdown is a straight, line-by-line port
|
22
|
-
// of the Perl version of Markdown.
|
23
|
-
//
|
24
|
-
// This is not a normal parser design; it's basically just a
|
25
|
-
// series of string substitutions. It's hard to read and
|
26
|
-
// maintain this way, but keeping Showdown close to the original
|
27
|
-
// design makes it easier to port new features.
|
28
|
-
//
|
29
|
-
// More importantly, Showdown behaves like markdown.pl in most
|
30
|
-
// edge cases. So web applications can do client-side preview
|
31
|
-
// in Javascript, and then build identical HTML on the server.
|
32
|
-
//
|
33
|
-
// This port needs the new RegExp functionality of ECMA 262,
|
34
|
-
// 3rd Edition (i.e. Javascript 1.5). Most modern web browsers
|
35
|
-
// should do fine. Even with the new regular expression features,
|
36
|
-
// We do a lot of work to emulate Perl's regex functionality.
|
37
|
-
// The tricky changes in this file mostly have the "attacklab:"
|
38
|
-
// label. Major or self-explanatory changes don't.
|
39
|
-
//
|
40
|
-
// Smart diff tools like Araxis Merge will be able to match up
|
41
|
-
// this file with markdown.pl in a useful way. A little tweaking
|
42
|
-
// helps: in a copy of markdown.pl, replace "#" with "//" and
|
43
|
-
// replace "$text" with "text". Be sure to ignore whitespace
|
44
|
-
// and line endings.
|
45
|
-
//
|
46
|
-
//
|
47
|
-
// Showdown usage:
|
48
|
-
//
|
49
|
-
// var text = "Markdown *rocks*.";
|
50
|
-
//
|
51
|
-
// var converter = new Showdown.converter();
|
52
|
-
// var html = converter.makeHtml(text);
|
53
|
-
//
|
54
|
-
// alert(html);
|
55
|
-
//
|
56
|
-
// Note: move the sample code to the bottom of this
|
57
|
-
// file before uncommenting it.
|
58
|
-
//
|
59
|
-
//
|
60
|
-
// Showdown namespace
|
61
|
-
//
|
62
|
-
var Showdown={};Showdown.converter=function(){var a,b,c,d=0;this.makeHtml=function(d){return a=new Array,b=new Array,c=new Array,d=d.replace(/~/g,"~T"),d=d.replace(/\$/g,"~D"),d=d.replace(/\r\n/g,"\n"),d=d.replace(/\r/g,"\n"),d="\n\n"+d+"\n\n",d=F(d),d=d.replace(/^[ \t]+$/mg,""),d=f(d),d=e(d),d=h(d),d=D(d),d=d.replace(/~D/g,"$$"),d=d.replace(/~T/g,"~"),d};var e=function(c){var c=c.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm,function(c,d,e,f,g){return d=d.toLowerCase(),a[d]=z(e),f?f+g:(g&&(b[d]=g.replace(/"/g,""")),"")});return c},f=function(a){a=a.replace(/\n/g,"\n\n");var b="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del",c="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math";return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,g),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,g),a=a.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,g),a=a.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,g),a=a.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,g),a=a.replace(/\n\n/g,"\n"),a},g=function(a,b){var d=b;return d=d.replace(/\n\n/g,"\n"),d=d.replace(/^\n/,""),d=d.replace(/\n+$/g,""),d="\n\n~K"+(c.push(d)-1)+"K\n\n",d},h=function(a){a=o(a);var b=t("<hr />");return a=a.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,b),a=q(a),a=s(a),a=r(a),a=x(a),a=f(a),a=y(a),a},i=function(a){return a=u(a),a=j(a),a=A(a),a=m(a),a=k(a),a=B(a),a=z(a),a=w(a),a=a.replace(/ +\n/g," <br />\n"),a},j=function(a){var b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\/?code>(?=.)/g,"$1`");return b=G(b,"\\`*_"),b}),a},k=function(a){return a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,l),a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,l),a=a.replace(/(\[([^\[\]]+)\])()()()()()/g,l),a},l=function(c,d,e,f,g,h,i,j){j==undefined&&(j="");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(a[m]!=undefined)n=a[m],b[m]!=undefined&&(o=b[m]);else{if(!(k.search(/\(\s*\)$/m)>-1))return k;n=""}}n=G(n,"*_");var p='<a href="'+n+'"';return o!=""&&(o=o.replace(/"/g,"""),o=G(o,"*_"),p+=' title="'+o+'"'),p+=">"+l+"</a>",p},m=function(a){return a=a.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,n),a=a.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,n),a},n=function(c,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o="");if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(a[m]==undefined)return k;n=a[m],b[m]!=undefined&&(o=b[m])}l=l.replace(/"/g,"""),n=G(n,"*_");var p='<img src="'+n+'" alt="'+l+'"';return o=o.replace(/"/g,"""),o=G(o,"*_"),p+=' title="'+o+'"',p+=" />",p},o=function(a){function b(a){return a.replace(/[^\w]/g,"").toLowerCase()}return a=a.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,function(a,c){return t('<h1 id="'+b(c)+'">'+i(c)+"</h1>")}),a=a.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(a,c){return t('<h2 id="'+b(c)+'">'+i(c)+"</h2>")}),a=a.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(a,c,d){var e=c.length;return t("<h"+e+' id="'+b(d)+'">'+i(d)+"</h"+e+">")}),a},p,q=function(a){a+="~0";var b=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;return d?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?"ul":"ol";d=d.replace(/\n{2,}/g,"\n\n\n");var f=p(d);return f=f.replace(/\s+$/,""),f="<"+e+">"+f+"</"+e+">\n",f}):(b=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?"ul":"ol",f=f.replace(/\n{2,}/g,"\n\n\n"),h=p(f);return h=e+"<"+g+">\n"+h+"</"+g+">\n",h})),a=a.replace(/~0/,""),a};p=function(a){return d++,a=a.replace(/\n{2,}$/,"\n"),a+="~0",a=a.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(a,b,c,d,e){var f=e,g=b,j=c;return g||f.search(/\n{2,}/)>-1?f=h(E(f)):(f=q(E(f)),f=f.replace(/\n$/,""),f=i(f)),"<li>"+f+"</li>\n"}),a=a.replace(/~0/g,""),d--,a};var r=function(a){return a+="~0",a=a.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=v(E(d)),d=F(d),d=d.replace(/^\n+/g,""),d=d.replace(/\n+$/g,""),d="<pre><code>"+d+"\n</code></pre>",t(d)+e}),a=a.replace(/~0/,""),a},s=function(a){return a+="~0",a=a.replace(/\n```(.*)\n([^`]+)\n```/g,function(a,b,c){var d=b,e=c;return e=v(e),e=F(e),e=e.replace(/^\n+/g,""),e=e.replace(/\n+$/g,""),e="<pre><code class="+d+">"+e+"\n</code></pre>",t(e)}),a=a.replace(/~0/,""),a},t=function(a){return a=a.replace(/(^\n+|\n+$)/g,""),"\n\n~K"+(c.push(a)-1)+"K\n\n"},u=function(a){return a=a.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ \t]*)/g,""),f=f.replace(/[ \t]*$/g,""),f=v(f),b+"<code>"+f+"</code>"}),a},v=function(a){return a=a.replace(/&/g,"&"),a=a.replace(/</g,"<"),a=a.replace(/>/g,">"),a=G(a,"*_{}[]\\",!1),a},w=function(a){return a=a.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"<strong>$2</strong>"),a=a.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>"),a},x=function(a){return a=a.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \t]*>[ \t]?/gm,"~0"),c=c.replace(/~0/g,""),c=c.replace(/^[ \t]+$/gm,""),c=h(c),c=c.replace(/(^|\n)/g,"$1 "),c=c.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^ /mg,"~0"),c=c.replace(/~0/g,""),c}),t("<blockquote>\n"+c+"\n</blockquote>")}),a},y=function(a){a=a.replace(/^\n+/g,""),a=a.replace(/\n+$/g,"");var b=a.split(/\n{2,}/g),d=new Array,e=b.length;for(var f=0;f<e;f++){var g=b[f];g.search(/~K(\d+)K/g)>=0?d.push(g):g.search(/\S/)>=0&&(g=i(g),g=g.replace(/^([ \t]*)/g,"<p>"),g+="</p>",d.push(g))}e=d.length;for(var f=0;f<e;f++)while(d[f].search(/~K(\d+)K/)>=0){var h=c[RegExp.$1];h=h.replace(/\$/g,"$$$$"),d[f]=d[f].replace(/~K\d+K/,h)}return d.join("\n\n")},z=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&"),a=a.replace(/<(?![a-z\/?\$!])/gi,"<"),a},A=function(a){return a=a.replace(/\\(\\)/g,H),a=a.replace(/\\([`*_{}\[\]()>#+-.!])/g,H),a},B=function(a){return a=a.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'<a href="$1">$1</a>'),a=a.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(a,b){return C(D(b))}),a},C=function(a){function b(a){var b="0123456789ABCDEF",c=a.charCodeAt(0);return b.charAt(c>>4)+b.charAt(c&15)}var c=[function(a){return"&#"+a.charCodeAt(0)+";"},function(a){return"&#x"+b(a)+";"},function(a){return a}];return a="mailto:"+a,a=a.replace(/./g,function(a){if(a=="@")a=c[Math.floor(Math.random()*2)](a);else if(a!=":"){var b=Math.random();a=b>.9?c[2](a):b>.45?c[1](a):c[0](a)}return a}),a='<a href="'+a+'">'+a+"</a>",a=a.replace(/">.+:/g,'">'),a},D=function(a){return a=a.replace(/~E(\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)}),a},E=function(a){return a=a.replace(/^(\t|[ ]{1,4})/gm,"~0"),a=a.replace(/~0/g,""),a},F=function(a){return a=a.replace(/\t(?=\t)/g," "),a=a.replace(/\t/g,"~A~B"),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f<e;f++)d+=" ";return d}),a=a.replace(/~A/g," "),a=a.replace(/~B/g,""),a},G=function(a,b,c){var d="(["+b.replace(/([\[\]\\])/g,"\\$1")+"])";c&&(d="\\\\"+d);var e=new RegExp(d,"g");return a=a.replace(e,H),a},H=function(a,b){var c=b.charCodeAt(0);return"~E"+c+"E"}},typeof exports!="undefined"&&(exports=Showdown);
|