pufferfish 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/clinput.rb +39 -0
- data/bin/command_exec.rb +22 -0
- data/bin/puf +12 -0
- data/lib/pufferfish.rb +72 -0
- metadata +63 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c23b78cec13deaf002496287f1302a75d49f0bcf8916b11bf0ebaf6cfe05f753
|
4
|
+
data.tar.gz: 248b77373342bddceca181ed68294a9ee31858f703dd96118f6542badebfc1ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8683b990de9fa3af6c9b3227f71b2559f9dd485d8eb05f92eae3538b75b0732f745a6af51275d7acc2edd18eed541c6cfacd31a91259255bd7b81bd081204927
|
7
|
+
data.tar.gz: 46bced3ad600485d5e77747494a9546b056c2227db69a37c8958948588aebb522f436fbe3778d3304283e7320a23feb5fa1749958046a4cac27c2192e5474d96
|
data/bin/clinput.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
Input = Struct.new(:cmd, :args)
|
3
|
+
|
4
|
+
# Parse CLI input
|
5
|
+
class CLI
|
6
|
+
def initialize(input)
|
7
|
+
@input = input
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse
|
11
|
+
@input.each_with_index do |var, idx|
|
12
|
+
case var
|
13
|
+
when "-p" || "--pretty"
|
14
|
+
# Pretifies the html before returning
|
15
|
+
@prettify = true
|
16
|
+
when "-d" || "--base-directory"
|
17
|
+
# sets the base directory for searching files
|
18
|
+
# ! look out for absolute paths -> don't convert them
|
19
|
+
@parse_next = :base_dir
|
20
|
+
else
|
21
|
+
if @parse_next == :base_dir
|
22
|
+
@base = var
|
23
|
+
@parse_next = nil
|
24
|
+
elsif @file.nil?
|
25
|
+
@file = var
|
26
|
+
elsif @outputFile.nil?
|
27
|
+
@outputFile = var
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
vars = Hash.new
|
33
|
+
vars[:file] = @file
|
34
|
+
vars[:outputFile] = @outputFile
|
35
|
+
vars[:base_dir] = @base
|
36
|
+
vars[:pretty] = @prettify.nil? ? false : true
|
37
|
+
Input.new(:parse, vars)
|
38
|
+
end
|
39
|
+
end
|
data/bin/command_exec.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'pufferfish'
|
2
|
+
require 'htmlbeautifier'
|
3
|
+
|
4
|
+
# Executes CLI commands
|
5
|
+
class CommandExecutor
|
6
|
+
def initialize(cmd)
|
7
|
+
@cmd = cmd
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
case @cmd.cmd
|
12
|
+
when :parse
|
13
|
+
file = @cmd.args[:file]
|
14
|
+
output = Pufferfish::Parser::parse_file(file, @cmd.args[:base_dir])
|
15
|
+
if @cmd.args[:pretty]
|
16
|
+
HtmlBeautifier.beautify(output)
|
17
|
+
else
|
18
|
+
output
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/bin/puf
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require_relative('clinput.rb')
|
3
|
+
require_relative('command_exec.rb')
|
4
|
+
|
5
|
+
cmd = CLI.new(ARGV).parse
|
6
|
+
output = CommandExecutor.new(cmd).execute
|
7
|
+
# Check if output file was given
|
8
|
+
if cmd.args[:outputFile].nil?
|
9
|
+
puts output
|
10
|
+
else
|
11
|
+
File.write(cmd.args[:outputFile], output)
|
12
|
+
end
|
data/lib/pufferfish.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module Pufferfish
|
2
|
+
# Parser
|
3
|
+
module Parser
|
4
|
+
# Parses html
|
5
|
+
#
|
6
|
+
# ### Params
|
7
|
+
# file: String
|
8
|
+
def self.parse_file(file, base_dir)
|
9
|
+
contents = File.read(file)
|
10
|
+
|
11
|
+
# ^\\ -> don't count escape characters \%
|
12
|
+
contents = contents.gsub(/%(.*[^\\])%/) { |_|
|
13
|
+
match = Regexp.last_match.captures
|
14
|
+
file = match[0]
|
15
|
+
if not (file =~ /.*\..*/)
|
16
|
+
file.concat(".html")
|
17
|
+
# Parse base dir
|
18
|
+
if not base_dir.nil?
|
19
|
+
if file =~ /\A\/.*\z/
|
20
|
+
parse_file(file, base_dir)
|
21
|
+
elsif base_dir =~ /\A.*\/\z/
|
22
|
+
parse_file("#{base_dir}#{file}", base_dir)
|
23
|
+
else
|
24
|
+
parse_file("#{base_dir}/#{file}", base_dir)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
parse_file(file, base_dir)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
}
|
31
|
+
|
32
|
+
# Replace escape characters and return
|
33
|
+
contents.gsub(/\\%/, "%")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Builder
|
38
|
+
class Builder
|
39
|
+
def initialize(fn)
|
40
|
+
builder_info = PufferfishBuilderInfo.new
|
41
|
+
answer = fn.call(builder_info)
|
42
|
+
build(builder_info)
|
43
|
+
end
|
44
|
+
|
45
|
+
def build(info)
|
46
|
+
Dir.glob("#{info.html_dir}/**/*") do |filename|
|
47
|
+
if info.verbose
|
48
|
+
STDERR.puts "compiling #{filename}..."
|
49
|
+
end
|
50
|
+
# TODO: replace with ruby calls
|
51
|
+
system "puf #{filename} #{info.output_dir}/#{filename.gsub(/\A\/?.*\//, "")} -d #{info.template_dir}" + (info.pretty ? " -p" : "")
|
52
|
+
if info.minify
|
53
|
+
file_content = `html-minifier #{info.output_dir}/#{filename.gsub(/\A\/?.*\//, "")} #{info.minify_flags}`
|
54
|
+
File.write("#{info.output_dir}/#{filename.gsub(/\A\/?.*\//, "")}", file_content)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class PufferfishBuilderInfo
|
61
|
+
attr_accessor :html_dir, :template_dir, :output_dir, :pretty, :minify, :minify_flags, :verbose
|
62
|
+
def initialize
|
63
|
+
@html_dir = "."
|
64
|
+
@template_dir = "."
|
65
|
+
@output_dir = "."
|
66
|
+
@pretty = false
|
67
|
+
@minify = false
|
68
|
+
@minify_flags = ""
|
69
|
+
@verbose = false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pufferfish
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonas everaert
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: htmlbeautifier
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.4.1
|
27
|
+
description: Pufferfish is a templating language for html. It generates raw html,
|
28
|
+
meaning that it will not affect load times.
|
29
|
+
email:
|
30
|
+
- info@jonaseveraert.be
|
31
|
+
executables:
|
32
|
+
- puf
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- bin/clinput.rb
|
37
|
+
- bin/command_exec.rb
|
38
|
+
- bin/puf
|
39
|
+
- lib/pufferfish.rb
|
40
|
+
homepage: https://github.com/jomy10/pufferfish
|
41
|
+
licenses:
|
42
|
+
- MIT
|
43
|
+
metadata: {}
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubygems_version: 3.3.3
|
60
|
+
signing_key:
|
61
|
+
specification_version: 4
|
62
|
+
summary: An html templating engine that generates static html.
|
63
|
+
test_files: []
|