elisp2any 0.0.2 → 0.0.4

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: 4aae6ce52e5bdc57b8acb26b343c1d7958f22571e977d15bc092b0ba08b956c5
4
- data.tar.gz: 7183789a0afe41c5d4bcccf55addf8f22fd49e99a524b69fa93ff5b70dd72e33
3
+ metadata.gz: 43ac0e60fb0505d1dfedf717b38966d20340412d119b4ad6842751e92b6d6774
4
+ data.tar.gz: ca6adc49a9eff939fac9aa31b97b2f07194d276042aea5c46b9bcc099a392326
5
5
  SHA512:
6
- metadata.gz: 11d32b8208f0e1898c5c98482fa2a716bd9156801e0713a0978ed564beb5ac6bd902114599d2d0cb0a6540a8566886f26e24875cd8d09576de33bd792fcd8930
7
- data.tar.gz: 5172b17c091939abb0867c83686e0b918b23c4366644c3c3ac89b89901cedba362acd53077527a649880cc3a1c7ff4021bf9719839b5397a5d1aab20d3b368e2
6
+ metadata.gz: 3ae7c237a6d260412d87ed8b506efb52694a3b85e10a27e2a0277839a6512ec06a4c3945a368bc2b9e876b1c8fe89c822ed282c1a0c921e864b651b911f84d7c
7
+ data.tar.gz: 257b9a436a46b010773af8e0180b4e8417be2469a464bda2214cafac6734d5bb85771bc0213a8073fead2fdfe461595a44952483c477f698a3b4514febce9228
data/.document ADDED
@@ -0,0 +1,4 @@
1
+ README.md
2
+ lib/**/*.rb
3
+ CHANGELOG.md
4
+ LICENSE.txt
data/.envrc CHANGED
@@ -1 +1,3 @@
1
+ watch_file manifest.scm
1
2
  export ELISP2ANY_GUIX_USE_PROFILE_PATH=yes
3
+ use guix
data/.rdoc_options ADDED
@@ -0,0 +1,2 @@
1
+ main_page: README.md
2
+ op_dir: html
data/.rubocop.yml CHANGED
@@ -3,14 +3,6 @@ AllCops:
3
3
  NewCops: enable
4
4
  DisabledByDefault: true
5
5
 
6
- Style/StringLiterals:
7
- Enabled: true
8
- EnforcedStyle: single_quotes
9
-
10
- Style/StringLiteralsInInterpolation:
11
- Enabled: true
12
- EnforcedStyle: single_quotes
13
-
14
6
  Layout/LineLength:
15
7
  Enabled: false
16
8
 
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Change log of Elisp2any
2
2
 
3
- ## Unreleased
3
+ ## 0.0.4 - 2025-02-08
4
+
5
+ * Improved shared object searching for Guix.
6
+
7
+ ## 0.0.3 - 2024-11-16
8
+
9
+ ### Added
10
+
11
+ * The `--css=PATH` option to the `elisp2any` program.
4
12
 
5
13
  ## 0.0.2 - 2023-11-25
6
14
 
data/Gemfile CHANGED
@@ -1,7 +1,2 @@
1
1
  source 'https://rubygems.org'
2
-
3
2
  gemspec
4
-
5
- gem 'rake', '~> 13.0'
6
- gem 'test-unit', '~> 3.0'
7
- gem 'rubocop', '~> 1.21'
data/Rakefile CHANGED
@@ -7,11 +7,22 @@ Rake::TestTask.new(:test) do |t|
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- require 'rubocop/rake_task'
10
+ default_tasks = %i[test]
11
11
 
12
- RuboCop::RakeTask.new
12
+ rubocop = true
13
13
 
14
- task default: %i[test rubocop]
14
+ begin
15
+ require 'rubocop/rake_task'
16
+ rescue LoadError
17
+ rubocop = false
18
+ end
19
+
20
+ if rubocop
21
+ RuboCop::RakeTask.new
22
+ default_tasks << :rubocop
23
+ end
24
+
25
+ task default: default_tasks
15
26
 
16
27
  require 'rdoc/task'
17
28
  RDoc::Task.new do |rdoc|
data/exe/elisp2any CHANGED
@@ -1,17 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  require_relative '../lib/elisp2any'
3
4
  require_relative '../lib/elisp2any/html_renderer'
4
5
  require 'optparse'
6
+
5
7
  input = $stdin
6
8
  output = $stdout
9
+ css = nil
10
+
7
11
  OptionParser.new do |parser|
8
12
  parser.on('--input=PATH') do |path|
9
13
  input = File.open(path)
10
14
  end
15
+
11
16
  parser.on('--output=PATH') do |path|
12
17
  output = File.open(path, 'w')
13
18
  end
19
+
20
+ parser.on('--css=PATH') do |path|
21
+ css = path
22
+ end
14
23
  end.parse!
24
+
15
25
  file = Elisp2any::File.parse(input)
16
- renderer = Elisp2any::HTMLRenderer.new(file)
26
+ renderer = Elisp2any::HTMLRenderer.new(file, css:)
17
27
  output.write(renderer.render)
data/fixtures/init.el CHANGED
@@ -1,4 +1,4 @@
1
- ;;; init.el --- Emacs configuration
1
+ ;;; init.el --- Emacs configuration -*- lexical-binding: t; -*-
2
2
 
3
3
  ;;; Commentary:
4
4
 
@@ -51,7 +51,7 @@ module Elisp2any
51
51
  ERB.new(source).result(binding)
52
52
  end
53
53
 
54
- extend Forwardable
54
+ extend Forwardable # :nodoc:
55
55
  def_delegators :@file, :name, :synopsis, :commentary, :code
56
56
  end
57
57
  end
@@ -0,0 +1,17 @@
1
+ module Elisp2any
2
+ class Blanklines
3
+ attr_reader :count
4
+
5
+ def self.scan(scanner)
6
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
7
+ count = 0
8
+ count += 1 while !scanner.eos? && scanner.skip(/ *\n/)
9
+ count.zero? and return
10
+ new(count:)
11
+ end
12
+
13
+ def initialize(count:) # :nodoc:
14
+ @count = count
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ require "elisp2any/top_heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+ require "elisp2any/section"
5
+
6
+ module Elisp2any
7
+ class Code
8
+ attr_reader :paragraphs, :sections
9
+
10
+ def self.scan(scanner)
11
+ pos = scanner.pos
12
+ heading = TopHeading.scan(scanner) or return
13
+ unless heading.content == "Code:"
14
+ scanner.pos = pos
15
+ return
16
+ end
17
+ Blanklines.scan(scanner) # optional
18
+ paragraphs = []
19
+ while (par = Paragraph.scan(scanner))
20
+ paragraphs << par
21
+ Blanklines.scan(scanner) # optional
22
+ end
23
+ section = Section.scan(scanner)
24
+ unless section.heading.level == 1
25
+ raise "TODO"
26
+ end
27
+ new(paragraphs:, sections: [section])
28
+ end
29
+
30
+ def initialize(paragraphs:, sections:)
31
+ @paragraphs = paragraphs
32
+ @sections = sections
33
+ end
34
+ end
35
+ end
@@ -1,7 +1,7 @@
1
1
  require 'forwardable'
2
2
 
3
3
  module Elisp2any
4
- class CodeBlock
4
+ class CodeBlock # :nodoc:
5
5
  def initialize(node) # :nodoc:
6
6
  @node = node
7
7
  end
@@ -10,7 +10,7 @@ module Elisp2any
10
10
  @node.append(source, end_byte)
11
11
  end
12
12
 
13
- extend Forwardable
13
+ extend Forwardable # :nodoc:
14
14
  def_delegators :@node, :content
15
15
  end
16
16
  end
@@ -0,0 +1,17 @@
1
+ module Elisp2any
2
+ class Comment
3
+ attr_reader :colons, :content, :padding
4
+
5
+ def self.scan(scanner)
6
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
7
+ scanner.skip(/(?<colons>;+)(?<padding> *)(?<content>.*)\n?/) or return
8
+ new(colons: scanner[:colons].size, content: scanner[:content], padding: scanner[:padding])
9
+ end
10
+
11
+ def initialize(colons:, content:, padding:)
12
+ @colons = colons
13
+ @content = content
14
+ @padding = padding
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ require "elisp2any/top_heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+
5
+ module Elisp2any
6
+ class Commentary
7
+ attr_reader :paragraphs
8
+
9
+ def self.scan(scanner)
10
+ pos = scanner.pos
11
+ heading = TopHeading.scan(scanner) or return
12
+ unless heading.content == "Commentary:"
13
+ scanner.pos = pos
14
+ return
15
+ end
16
+ Blanklines.scan(scanner) # optional
17
+ paragraphs = []
18
+ while (par = Paragraph.scan(scanner))
19
+ paragraphs << par
20
+ Blanklines.scan(scanner) # optional
21
+ end
22
+ new(paragraphs:)
23
+ end
24
+
25
+ def initialize(paragraphs:)
26
+ @paragraphs = paragraphs
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Expression
3
+ attr_reader :content
4
+
5
+ def self.scan(scanner)
6
+ content = scanner.scan(/t\b/) or return
7
+ new(content:)
8
+ end
9
+
10
+ def initialize(content:)
11
+ @content = content
12
+ end
13
+ end
14
+ end
@@ -1,9 +1,25 @@
1
1
  require_relative 'node'
2
2
  require_relative 'tree_sitter_parser'
3
+ require "elisp2any/header_line"
4
+ require "elisp2any/blanklines"
5
+ require "elisp2any/commentary"
6
+ require "elisp2any/code"
3
7
 
4
8
  module Elisp2any
5
9
  class File
6
- attr_reader :name, :synopsis, :commentary, :code
10
+ attr_reader :name, # TODO: filename
11
+ :synopsis, # TODO: header_line, including description
12
+ :commentary, :code
13
+
14
+ def self.scan(scanner)
15
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
16
+ line = HeaderLine.scan(scanner) or return
17
+ Blanklines.scan(scanner) # optional
18
+ commentary = Commentary.scan(scanner)
19
+ Blanklines.scan(scanner) # optional
20
+ code = Code.scan(scanner)
21
+ new(name: line.filename, synopsis: line.description, commentary:, code:)
22
+ end
7
23
 
8
24
  def self.parse(source)
9
25
  source = source.respond_to?(:read) ? source.read : source
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Filename
3
+ attr_reader :content
4
+
5
+ def self.scan(scanner)
6
+ content = scanner.scan(/[a-z]+[.]el\b/) or return
7
+ new(content:)
8
+ end
9
+
10
+ def initialize(content:)
11
+ @content = content
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ require "elisp2any/comment"
2
+ require "elisp2any/filename"
3
+ require "elisp2any/header_line_variables"
4
+
5
+ module Elisp2any
6
+ class HeaderLine
7
+ attr_reader :filename, :description, :variables
8
+
9
+ def self.scan(scanner)
10
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:pos)
11
+ pos = scanner.pos
12
+ unless (heading = TopHeading.scan(scanner))
13
+ scanner.pos = pos
14
+ return
15
+ end
16
+ cscanner = StringScanner.new(heading.content)
17
+ unless (filename = Filename.scan(cscanner))
18
+ scanner.pos = pos
19
+ return
20
+ end
21
+ unless cscanner.skip(/ +--- +/)
22
+ scanner.pos = pos
23
+ return
24
+ end
25
+ description = +""
26
+ variables = nil
27
+ until cscanner.eos?
28
+ if (variables = HeaderLineVariables.scan(cscanner)) # nop
29
+ break
30
+ else
31
+ description << cscanner.getch
32
+ end
33
+ end
34
+ if description.empty?
35
+ scanner.pos = pos
36
+ return
37
+ end
38
+ new(filename: filename.content, description:, variables: variables.variables)
39
+ end
40
+
41
+ def initialize(filename:, description:, variables:)
42
+ @filename = filename
43
+ @description = description
44
+ @variables = variables
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ require "elisp2any/variable"
2
+ require "elisp2any/expression"
3
+
4
+ module Elisp2any
5
+ class HeaderLineVariableAssignment
6
+ attr_reader :variable, :expression
7
+
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ variable = Variable.scan(scanner) or return
11
+ unless scanner.skip(/ *: */)
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ unless (expression = Expression.scan(scanner))
16
+ scanner.pos = pos
17
+ return
18
+ end
19
+ new(variable: variable.name, expression: expression.content)
20
+ end
21
+
22
+ def initialize(variable:, expression:)
23
+ @variable = variable
24
+ @expression = expression
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ require "elisp2any/variable"
2
+ require "elisp2any/expression"
3
+ require "elisp2any/header_line_variable_assignment"
4
+
5
+ module Elisp2any
6
+ class HeaderLineVariables
7
+ attr_reader :variables
8
+
9
+ def self.scan(scanner)
10
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:pos)
11
+ pos = scanner.pos
12
+ scanner.skip(/ *-[*]- +/) or return
13
+ variables = {}
14
+ until scanner.skip(/ +-[*]- */)
15
+ if scanner.eos?
16
+ scanner.pos = pos
17
+ return
18
+ elsif (assign = HeaderLineVariableAssignment.scan(scanner))
19
+ variables[assign.variable] = assign.expression
20
+ elsif scanner.skip(";")
21
+ break
22
+ else
23
+ raise scanner.inspect
24
+ end
25
+ end
26
+ new(variables:)
27
+ end
28
+
29
+ def initialize(variables:)
30
+ @variables = variables
31
+ end
32
+ end
33
+ end
@@ -5,6 +5,17 @@ module Elisp2any
5
5
  class Heading
6
6
  attr_reader :level, :content
7
7
 
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ comment = Comment.scan(scanner) or return
11
+ unless comment.colons >= 3
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ new(:TODO, comment.colons - 3, comment.content)
16
+ end
17
+
18
+ # TODO
8
19
  def initialize(node, level, content) # :nodoc:
9
20
  @node = node
10
21
  @level = level
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title><%= name %></title>
7
- <link rel="stylesheet" href="https://unpkg.com/mvp.css">
7
+ <link rel="stylesheet" href="<%= @css %>">
8
8
  </head>
9
9
  <body>
10
10
  <main>
@@ -8,8 +8,9 @@ require_relative 'code_block'
8
8
 
9
9
  module Elisp2any
10
10
  class HTMLRenderer
11
- def initialize(file)
11
+ def initialize(file, css: nil)
12
12
  @file = file
13
+ @css = css || "https://unpkg.com/mvp.css"
13
14
  end
14
15
 
15
16
  def render
@@ -56,7 +57,7 @@ module Elisp2any
56
57
  CGI.escape_html(string)
57
58
  end
58
59
 
59
- extend Forwardable
60
+ extend Forwardable # :nodoc:
60
61
  def_delegators :@file, :name, :synopsis, :commentary, :code
61
62
  end
62
63
  end
@@ -1,9 +1,23 @@
1
1
  require 'strscan'
2
2
  require 'forwardable'
3
3
  require_relative 'inline_code'
4
+ require "elisp2any/comment"
4
5
 
5
6
  module Elisp2any
6
7
  class Line
8
+ def self.scan(scanner)
9
+ pos = scanner.pos
10
+ comment = Comment.scan(scanner) or return
11
+ unless comment.colons == 2
12
+ scanner.pos = pos
13
+ return
14
+ end
15
+ unless comment.padding[0] == " "
16
+ raise Error, "line comment should have a whitespace padding"
17
+ end
18
+ new(["#{comment.padding[1..]}#{comment.content}"])
19
+ end
20
+
7
21
  def initialize(chunks) # :nodoc:
8
22
  @chunks = chunks
9
23
  end
@@ -19,25 +19,28 @@ module Elisp2any
19
19
  when :comment
20
20
  scanner = StringScanner.new(content)
21
21
  scanner.skip(';') or raise Error, 'no semicolon for comment'
22
- if scanner.skip(';')
23
- if (level = scanner.skip(/;+/))
24
- scanner.skip(' ') or raise Error, 'no space after heading semicolons'
25
- nodes << Heading.new(node, level, scanner.rest.chomp)
26
- elsif scanner.skip("\n")
27
- # nop
28
- else
29
- scanner.skip(' ') or raise Error, "no space after semicolons: #{scanner.inspect}"
30
- line = Line.parse(scanner.rest)
31
- if (last_node = nodes.last) && last_node.is_a?(Paragraph) && last_node.end_row + 1 == top_level_node.start_point.row
32
- last_node << line
33
- else
34
- paragraph = Paragraph.new(node, [line], top_level_node.end_point.row)
35
- nodes << paragraph
36
- end
22
+ scanner.skip(';') or
23
+ begin
24
+ (last_node = nodes.last) && last_node.is_a?(CodeBlock) or raise Error, 'no prior code for single semicolon comment'
25
+ last_node.append(source, range.end)
26
+ next
37
27
  end
28
+
29
+ if (level = scanner.skip(/;+/))
30
+ scanner.skip(' ') or raise Error, 'no space after heading semicolons'
31
+ nodes << Heading.new(node, level, scanner.rest.chomp)
32
+ next
33
+ elsif scanner.skip("\n")
34
+ next
35
+ end
36
+
37
+ scanner.skip(' ') or raise Error, "no space after semicolons: #{scanner.inspect}"
38
+ line = Line.parse(scanner.rest)
39
+ if (last_node = nodes.last) && last_node.is_a?(Paragraph) && last_node.end_row + 1 == top_level_node.start_point.row
40
+ last_node << line
38
41
  else
39
- (last_node = nodes.last) && last_node.is_a?(CodeBlock) or raise Error, 'no prior code for single semicolon comment'
40
- last_node.append(source, range.end)
42
+ paragraph = Paragraph.new(node, [line], top_level_node.end_point.row)
43
+ nodes << paragraph
41
44
  end
42
45
  else
43
46
  if (last_node = nodes.last) && last_node.is_a?(CodeBlock)
@@ -1,9 +1,24 @@
1
1
  require 'forwardable'
2
+ require "elisp2any/line"
2
3
 
3
4
  module Elisp2any
4
5
  class Paragraph
6
+ attr_reader :lines
7
+
8
+ def self.scan(scanner)
9
+ scanner = StringScanner.new(scanner) unless scanner.respond_to?(:skip)
10
+ lines = []
11
+ while (line = Line.scan(scanner))
12
+ lines << line
13
+ end
14
+ lines.empty? and return
15
+ new(:TODO, lines, :TODO)
16
+ end
17
+
18
+ # TODO: delete
5
19
  attr_reader :end_row # :nodoc:
6
20
 
21
+ # TODO: delete node and end_row
7
22
  def initialize(node, lines, end_row) # :nodoc:
8
23
  @node = node
9
24
  @lines = lines
@@ -0,0 +1,25 @@
1
+ require "elisp2any/heading"
2
+ require "elisp2any/paragraph"
3
+ require "elisp2any/blanklines"
4
+
5
+ module Elisp2any
6
+ class Section
7
+ attr_reader :heading
8
+
9
+ def self.scan(scanner)
10
+ heading = Heading.scan(scanner) or return
11
+ Blanklines.scan(scanner) # optional
12
+ paragraphs = []
13
+ while (par = Paragraph.scan(scanner))
14
+ paragraphs << par
15
+ Blanklines.scan(scanner) # optional
16
+ end
17
+ new(heading:, paragraphs:)
18
+ end
19
+
20
+ def initialize(heading:, paragraphs:)
21
+ @heading = heading
22
+ @paragraphs = paragraphs
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ require "elisp2any/heading"
2
+
3
+ module Elisp2any
4
+ class TopHeading
5
+ attr_reader :content
6
+
7
+ def self.scan(scanner)
8
+ pos = scanner.pos
9
+ heading = Heading.scan(scanner)
10
+ unless heading.level.zero?
11
+ scanner.pos = pos
12
+ return
13
+ end
14
+ new(content: heading.content)
15
+ end
16
+
17
+ def initialize(content:)
18
+ @content = content
19
+ end
20
+ end
21
+ end
@@ -27,8 +27,7 @@ module Elisp2any
27
27
 
28
28
  # Set this env var for Guix shell environment or shared object file is not found
29
29
  if ENV['ELISP2ANY_GUIX_USE_PROFILE_PATH']
30
- profile = ::File.dirname(ENV['PATH'].split(':').select { |path| path.start_with?('/gnu/store/') }.first)
31
- shared_object = ::File.join(profile, 'lib/tree-sitter', shared_object)
30
+ shared_object = ::File.join(ENV["GUIX_ENVIRONMENT"], "lib/tree-sitter", shared_object)
32
31
  end
33
32
 
34
33
  shared_object
@@ -0,0 +1,14 @@
1
+ module Elisp2any
2
+ class Variable
3
+ attr_reader :name
4
+
5
+ def self.scan(scanner)
6
+ name = scanner.scan(/[a-z-]+/) or return
7
+ new(name:)
8
+ end
9
+
10
+ def initialize(name:)
11
+ @name = name
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Elisp2any
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.4'
3
3
  end
data/lib/elisp2any.rb CHANGED
@@ -2,5 +2,7 @@ require_relative 'elisp2any/version'
2
2
  require_relative 'elisp2any/file'
3
3
 
4
4
  module Elisp2any
5
- class Error < StandardError; end
5
+ autoload :HeaderLine, "elisp2any/header_line.rb"
6
+ autoload :Blanklines, "elisp2any/blanklines.rb"
7
+ Error = Class.new(StandardError)
6
8
  end
data/manifest.scm CHANGED
@@ -1,6 +1,87 @@
1
- (specifications->manifest (list "ruby@3.1"
2
- "ruby-tree-sitter"
3
- "tree-sitter-elisp"
4
- "ruby-webrick"
5
- "ruby-rubocop"
6
- "ruby-asciidoctor"))
1
+ (use-modules (guix packages)
2
+ ((guix licenses) #:prefix license:)
3
+ (guix git-download)
4
+ (guix build-system ruby)
5
+ (guix build-system tree-sitter)
6
+ (gnu packages tree-sitter)
7
+ (gnu packages ruby))
8
+
9
+ (define-public ruby-tree-sitter
10
+ (let ((commit "2c56b04283f2a8cfed7d6c527ca36b8e1127ee8c")
11
+ (revision "0"))
12
+ (package
13
+ (name "ruby-tree-sitter")
14
+ (version (git-version "0.20.8.1" revision commit))
15
+ (source
16
+ (origin
17
+ (method git-fetch)
18
+ (uri (git-reference
19
+ (url "https://github.com/Faveod/ruby-tree-sitter")
20
+ (commit commit)))
21
+ (file-name (git-file-name name version))
22
+ (sha256
23
+ (base32 "144kp0ya4rl03bgwpix17bgq2ak2kqk63pwniy6sfxfjqp5yzr7f"))))
24
+ (build-system ruby-build-system)
25
+ (arguments
26
+ (list
27
+ #:phases #~(modify-phases %standard-phases
28
+ (add-after 'extract-gemspec 'remove-depends
29
+ (lambda _
30
+ (substitute* "tree_sitter.gemspec"
31
+ ((".*minitest-color.*")
32
+ "\n")
33
+ ((".*pry.*")
34
+ "\n")
35
+ ((".*rake.*")
36
+ "\n"))
37
+ (substitute* "test/test_helper.rb"
38
+ ((".*minitest/color.*")
39
+ "\n"))))
40
+ (add-before 'build 'compile
41
+ (lambda _
42
+ (invoke "rake" "compile")))
43
+ (add-before 'check 'set-path
44
+ (lambda* (#:key inputs #:allow-other-keys)
45
+ (let ((ruby (assoc-ref inputs "tree-sitter-ruby")))
46
+ (setenv "TREE_SITTER_PARSERS"
47
+ (string-append ruby "/lib/tree-sitter")))))
48
+ (add-before 'check 'remove-failing-test
49
+ (lambda _
50
+ (delete-file "test/tree_sitter/node_test.rb"))))))
51
+ (native-inputs (list ruby-minitest ruby-rake-compiler
52
+ ruby-rake-compiler-dock ruby-ruby-memcheck
53
+ tree-sitter-ruby))
54
+ (inputs (list tree-sitter))
55
+ (synopsis "Ruby bindings for Tree-Sitter")
56
+ (description "Ruby bindings for Tree-Sitter")
57
+ (home-page "https://www.github.com/Faveod/ruby-tree-sitter")
58
+ (license license:expat))))
59
+
60
+ (define-public tree-sitter-elisp
61
+ (let ((commit "e5524fdccf8c22fc726474a910e4ade976dfc7bb")
62
+ (revision "0"))
63
+ (package
64
+ (name "tree-sitter-elisp")
65
+ (version (git-version "0.1.4" revision commit))
66
+ (source
67
+ (origin
68
+ (method git-fetch)
69
+ (uri (git-reference
70
+ (url "https://github.com/Wilfred/tree-sitter-elisp")
71
+ (commit commit)))
72
+ (file-name (git-file-name name version))
73
+ (sha256
74
+ (base32 "1wyzfb27zgpvm4110jgv0sl598mxv5dkrg2cwjw3p9g2bq9mav5d"))))
75
+ (build-system tree-sitter-build-system)
76
+ (home-page "https://github.com/Wilfred/tree-sitter-elisp")
77
+ (synopsis "Tree-sitter grammar for Emacs Lisp")
78
+ (description "This package provides an Emacs Lisp grammar for the Tree-sitter library.")
79
+ (license license:expat))))
80
+
81
+ (concatenate-manifests
82
+ (list
83
+ (packages->manifest (list ruby-tree-sitter tree-sitter-elisp))
84
+ (specifications->manifest (list "ruby@3.1"
85
+ "ruby-webrick"
86
+ "ruby-rubocop"
87
+ "ruby-asciidoctor"))))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elisp2any
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - gemmaro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-25 00:00:00.000000000 Z
11
+ date: 2025-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby_tree_sitter
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.20.8.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: webrick
28
+ name: asciidoctor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -38,22 +38,50 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '13.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '13.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rubocop
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '1.21'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '1.21'
55
69
  - !ruby/object:Gem::Dependency
56
- name: asciidoctor
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webrick
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - ">="
@@ -67,7 +95,7 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  description: elisp2any is a command line tool and library for converting Emacs Lisp
70
- source to some document markup, such as HTML or Markdown.
98
+ source to some document markup, such as HTML or AsciiDoc.
71
99
  email:
72
100
  - gemmaro.dev@gmail.com
73
101
  executables:
@@ -75,7 +103,9 @@ executables:
75
103
  extensions: []
76
104
  extra_rdoc_files: []
77
105
  files:
106
+ - ".document"
78
107
  - ".envrc"
108
+ - ".rdoc_options"
79
109
  - ".rubocop.yml"
80
110
  - CHANGELOG.md
81
111
  - Gemfile
@@ -87,8 +117,17 @@ files:
87
117
  - lib/elisp2any.rb
88
118
  - lib/elisp2any/asciidoc_renderer.rb
89
119
  - lib/elisp2any/asciidoc_renderer/index.adoc.erb
120
+ - lib/elisp2any/blanklines.rb
121
+ - lib/elisp2any/code.rb
90
122
  - lib/elisp2any/code_block.rb
123
+ - lib/elisp2any/comment.rb
124
+ - lib/elisp2any/commentary.rb
125
+ - lib/elisp2any/expression.rb
91
126
  - lib/elisp2any/file.rb
127
+ - lib/elisp2any/filename.rb
128
+ - lib/elisp2any/header_line.rb
129
+ - lib/elisp2any/header_line_variable_assignment.rb
130
+ - lib/elisp2any/header_line_variables.rb
92
131
  - lib/elisp2any/heading.rb
93
132
  - lib/elisp2any/html_renderer.rb
94
133
  - lib/elisp2any/html_renderer/index.html.erb
@@ -96,15 +135,25 @@ files:
96
135
  - lib/elisp2any/line.rb
97
136
  - lib/elisp2any/node.rb
98
137
  - lib/elisp2any/paragraph.rb
138
+ - lib/elisp2any/section.rb
139
+ - lib/elisp2any/top_heading.rb
99
140
  - lib/elisp2any/tree_sitter_parser.rb
141
+ - lib/elisp2any/variable.rb
100
142
  - lib/elisp2any/version.rb
101
143
  - manifest.scm
102
144
  - sig/elisp2any.gen.rbs
103
145
  - sig/elisp2any.rbs
104
- homepage:
105
- licenses: []
146
+ homepage: https://codeberg.org/gemmaro/elisp2any
147
+ licenses:
148
+ - Apache-2.0
106
149
  metadata:
107
150
  rubygems_mfa_required: 'true'
151
+ bug_tracker_uri: https://codeberg.org/gemmaro/elisp2any/issues
152
+ changelog_uri: https://codeberg.org/gemmaro/elisp2any/src/branch/main/CHANGELOG.md
153
+ documentation_uri: https://www.rubydoc.info/gems/elisp2any
154
+ homepage_uri: https://codeberg.org/gemmaro/elisp2any
155
+ source_code_uri: https://codeberg.org/gemmaro/elisp2any
156
+ wiki_uri: https://codeberg.org/gemmaro/elisp2any/wiki
108
157
  post_install_message:
109
158
  rdoc_options: []
110
159
  require_paths: