nexmo_markdown_renderer 0.5.1 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a77a40b7cc8162d5b8087bcf750f3cff31a5c0962991cb90d0f7d573ade580ec
4
- data.tar.gz: 0c15812da744a7215555c04a4d026b8fe3a61454952a98c4b17255c86fd08104
3
+ metadata.gz: 38cea45d573308382ed4530bfd3b3b392e87514a86df6b821881f522cb3dded4
4
+ data.tar.gz: 234917b592760ce49d22836c342a12c2286b70aec5671ad7fd11554e3b6a3ddf
5
5
  SHA512:
6
- metadata.gz: 6a37388e6c4173e69184d9836da5b7619a81439d49768bf3c08c89f84c53eb6257c1c142f91255fd2b0681c072dcfe37a9c94517ef210e356223a9e5ac56ac50
7
- data.tar.gz: b4cf624eb1215e4379f938ae1688d416a7fb3bbcb347650363afb3b1d7b81f8e5f76b8d12efd3ad7a83177398b32f1af8969f87532a3cc6d69586d66f6a91037
6
+ metadata.gz: 536ed550435b24e2b35fe0e08b7da328e4be38aff69b90710e525286a52fdc29ee10b83a34721117da42021c32633c65fc6124971659ab6f75830bd90c82949a
7
+ data.tar.gz: d491156845bae84395820e5e33cc0bbba312281e72b788152f055159c48a0055cfe364287ba1f739b813022e411ab09cfcdb0a2537511db2e41936fed65411bd
@@ -2,9 +2,16 @@ module Nexmo
2
2
  module Markdown
3
3
  module Concerns
4
4
  module PrismCodeSnippet
5
+ include OcticonsHelper
6
+
5
7
  def code_snippet_body(lexer, body)
6
8
  <<~HEREDOC
7
- <pre class="#{prism_css_classes(lexer)}"><code>#{body}</code></pre>
9
+ <div class="copy-wrapper">
10
+ <div class="copy-button" data-lang="#{code_language_to_prism(lexer.tag)}" data-section="code">
11
+ #{octicon "clippy", :class => 'top left'} <span>#{::I18n.t('code_snippets.copy_to_clipboard') }</span>
12
+ </div>
13
+ <pre class="#{prism_css_classes(lexer)}"><code>#{body}</code></pre>
14
+ </div>
8
15
  HEREDOC
9
16
  end
10
17
 
@@ -4,9 +4,20 @@ module Nexmo
4
4
  class FrontmatterFilter < Banzai::Filter
5
5
  def call(input)
6
6
  input.gsub(/\A(---.+?---)/mo) do |frontmatter|
7
- frontmatter.gsub(/(\w*:)/) do |_key|
8
- "```#{$1}```"
7
+ output = frontmatter.gsub(/^languages:\n(^\s+- ([a-zA-Z]+)\n)+/) do |languages|
8
+ languages.gsub(/^\s+- ([a-zA-Z]+)\n+/) do |language|
9
+ " - ```#{$1}```\n\n"
10
+ end
9
11
  end
12
+ output = output.gsub(/^(\w*:)(.*)\n/) do |_key|
13
+ if $1 == "products:"
14
+ "```#{$1}#{$2}```\n\n"
15
+ else
16
+ "```#{$1}```#{$2}\n\n"
17
+ end
18
+ end
19
+
20
+ output
10
21
  end
11
22
  end
12
23
  end
@@ -1,17 +1,33 @@
1
- module Nexmo
1
+ module Nexmo
2
2
  module Markdown
3
3
  module I18n
4
4
  module Smartling
5
5
  class FrontmatterFilter < Banzai::Filter
6
6
  def call(input)
7
- input.gsub(/\A\*\*\* \*\* \* \*\* \*\*\*\n*([^-]*)\n*-+/m) do |_frontmatter|
8
- front = $1.gsub(/`(.*):`(.*)/) do |_config|
7
+ input.gsub(/\A\*\*\* \*\* \* \*\* \*\*\*\n*(.*?\n)!?(\*\*\* \*\* \* \*\* \*\*\*|----+)\n*/m) do |_frontmatter|
8
+ front = $1.gsub(/`products: (.*)`\n\n/) do |products|
9
+ "products: #{$1}\n\n"
10
+ end
11
+
12
+ front = front.gsub(/`(.*):`(.*)/) do |_config|
9
13
  "#{$1}: #{$2}"
10
14
  end
15
+
16
+ front = front.gsub(/languages: \n\n(.*)\n/m) do |_languages|
17
+ languages = $1.split("\n\n").map do |lang|
18
+ lang.gsub(/\* `(.*)`/) { |_l| " - #{$1}" }
19
+ end
20
+ <<~LANGUAGES
21
+ languages:
22
+ #{languages.join("\n")}
23
+ LANGUAGES
24
+ end
25
+
11
26
  <<~FRONTMATTER
12
27
  ---
13
28
  #{front}
14
29
  ---
30
+
15
31
  FRONTMATTER
16
32
  end
17
33
  end
@@ -91,8 +91,10 @@ module Nexmo
91
91
  code.gsub! /^ /, "\t"
92
92
  end
93
93
 
94
- formatter = ::Rouge::Formatters::HTMLLegacy.new(:css_class => prism_css_classes(lexer))
95
- formatter.format(lexer.lex(code))
94
+ formatter ||= Rouge::Formatters::HTML.new
95
+ highlighted_source = formatter.format(lexer.lex(code))
96
+
97
+ code_snippet_body(lexer, highlighted_source)
96
98
  end
97
99
  end
98
100
  end
@@ -0,0 +1,38 @@
1
+ module Nexmo
2
+ module Markdown
3
+ class SnippetVariablesFilter < Banzai::Filter
4
+ def call(input)
5
+ input.gsub(/```snippet_variables(.+?)```/m) do |_s|
6
+ config = YAML.safe_load(Regexp.last_match(1))
7
+
8
+ raise 'No variables provided' unless config
9
+ raise 'Must provide an array' unless config.is_a?(Array)
10
+
11
+ output = <<~HEREDOC
12
+ Key | Description
13
+ -- | --
14
+ HEREDOC
15
+ config.each do |key|
16
+
17
+ details = variables[key]
18
+ raise "#{key} is not a valid snippet variable" unless details
19
+
20
+ # We have some variables in the format TO_NUMBER.SMS etc, and we only want to render the first segment
21
+ # This can be multiple segments e.g. UUID.MODIFY.VOICE will be rendered as UUID
22
+ title = key.split('.').first
23
+
24
+ output += <<~HEREDOC
25
+ `#{title}` | #{details}
26
+ HEREDOC
27
+ end
28
+
29
+ output
30
+ end
31
+ end
32
+
33
+ def variables
34
+ @variables ||= YAML.safe_load(File.read("#{Nexmo::Markdown::Config.docs_base_path}/config/code_snippet_variables.yml"))
35
+ end
36
+ end
37
+ end
38
+ end
@@ -29,6 +29,7 @@ module Nexmo
29
29
  ConceptListFilter.new(options),
30
30
  LanguageFilter,
31
31
  ColumnsFilter,
32
+ SnippetVariablesFilter,
32
33
  MarkdownFilter.new(options),
33
34
 
34
35
  # As HTML
@@ -65,7 +65,7 @@ module Nexmo
65
65
  end
66
66
 
67
67
  private_class_method def self.files
68
- Dir.glob("#{origin}/**/*.md")
68
+ Dir.glob("#{origin}/#{::I18n.default_locale}/**/*.md")
69
69
  end
70
70
  end
71
71
  end
@@ -6,8 +6,7 @@ module Nexmo
6
6
  def initialize(_options = {})
7
7
  super(
8
8
  I18n::Smartling::FrontmatterFilter,
9
- I18n::Smartling::EscapeFilter,
10
- I18n::Smartling::CodeBlockFilter
9
+ I18n::Smartling::EscapeFilter
11
10
  )
12
11
  end
13
12
  end
@@ -5,7 +5,7 @@ module Nexmo
5
5
  class Preprocessor < Banzai::Pipeline
6
6
  def initialize(_options = {})
7
7
  super(
8
- I18n::FrontmatterFilter
8
+ I18n::FrontmatterFilter,
9
9
  )
10
10
  end
11
11
  end
@@ -1,7 +1,7 @@
1
1
  # :nocov:
2
2
  module Nexmo
3
3
  module Markdown
4
- VERSION = '0.5.1'
4
+ VERSION = '0.7.3'
5
5
  end
6
6
  end
7
7
  # :nocov:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexmo_markdown_renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nexmo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2020-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: banzai
@@ -260,7 +260,6 @@ files:
260
260
  - lib/nexmo_markdown_renderer/filters/frontmatter_filter.rb
261
261
  - lib/nexmo_markdown_renderer/filters/heading_filter.rb
262
262
  - lib/nexmo_markdown_renderer/filters/i18n/frontmatter_filter.rb
263
- - lib/nexmo_markdown_renderer/filters/i18n/smartling/code_block_filter.rb
264
263
  - lib/nexmo_markdown_renderer/filters/i18n/smartling/escape_filter.rb
265
264
  - lib/nexmo_markdown_renderer/filters/i18n/smartling/frontmatter_filter.rb
266
265
  - lib/nexmo_markdown_renderer/filters/icon_filter.rb
@@ -276,6 +275,7 @@ files:
276
275
  - lib/nexmo_markdown_renderer/filters/php_inliner_filter.rb
277
276
  - lib/nexmo_markdown_renderer/filters/relative_link_filter.rb
278
277
  - lib/nexmo_markdown_renderer/filters/screenshot_filter.rb
278
+ - lib/nexmo_markdown_renderer/filters/snippet_variables_filter.rb
279
279
  - lib/nexmo_markdown_renderer/filters/tab_filter.rb
280
280
  - lib/nexmo_markdown_renderer/filters/techio_filter.rb
281
281
  - lib/nexmo_markdown_renderer/filters/tooltip_filter.rb
@@ -1,20 +0,0 @@
1
- module Nexmo
2
- module Markdown
3
- module I18n
4
- module Smartling
5
- class CodeBlockFilter < Banzai::Filter
6
- def call(input)
7
- input.gsub(/\n\n\s{4}(.*?)\n\n/m) do
8
- <<~CODE_BLOCK
9
-
10
- ````
11
- #{$1.split(/\n\s{4}/).join("\n")}
12
- ````
13
- CODE_BLOCK
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end