my_precious 0.1.9 → 0.2.0
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 +4 -4
- data/lib/my_precious.rb +3 -3
- data/lib/my_precious/parser.rb +1 -1
- data/lib/my_precious/parser_2.rb +222 -0
- data/lib/my_precious/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5c18ec277c010e718d3f52a2296caec5f556dc95f961a7f39e6f75abe43aabd
|
4
|
+
data.tar.gz: c750e66840fe41511b26a2aa4be59ecf611c096bfd3213731703d54d0f70da4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9eb640feaecaa15025a08d722ee751db911c23e8461e49c68784b856a10aad87bb28e2e59537f97efa47dbfe0abf91830c380b8d95206646f798112b6bff0c50
|
7
|
+
data.tar.gz: f77cd35b4a1463ddb01ae5cc9b043b7ad76281c9109fca8f3c73f18155d76743894266892b3f3a842afdac5126230244331cfbbf3547a646764c282081094bef
|
data/lib/my_precious.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'my_precious/version'
|
3
|
-
require 'my_precious/
|
3
|
+
require 'my_precious/parser_2'
|
4
4
|
|
5
5
|
module MyPrecious
|
6
6
|
class Error < StandardError; end
|
@@ -18,8 +18,8 @@ module MyPrecious
|
|
18
18
|
exts_are_valid = check_reader_and_writer_exts(reader_file_name, writer_file_name)
|
19
19
|
if exts_are_valid
|
20
20
|
file = File.open(reader_file_name, 'r')
|
21
|
-
|
22
|
-
puts "You have successfully transcribed #{reader_file_name}.precious into #{writer_file_name}
|
21
|
+
Parser2.parse_file file, writer_file_name
|
22
|
+
puts "You have successfully transcribed #{reader_file_name}.precious into #{writer_file_name}"
|
23
23
|
file.close
|
24
24
|
end
|
25
25
|
end
|
data/lib/my_precious/parser.rb
CHANGED
@@ -11,7 +11,7 @@ class Parser
|
|
11
11
|
SUBTRACTION_KEYWORDS = ['leaves the fellowship', 'stabs', 'banishes', 'steals']
|
12
12
|
MULTIPLICATION_KEYWORDS = ['gives aid to', 'procreates', 'bolsters']
|
13
13
|
DIVISION_KEYWORDS = ['decapitates', 'dismembers']
|
14
|
-
COMPARISON_KEYWORDS = ['
|
14
|
+
COMPARISON_KEYWORDS = ['same', 'equal']
|
15
15
|
CONDITION_KEYWORDS = ['does', 'if', 'will']
|
16
16
|
END_KEYWORDS = ['you shall not pass']
|
17
17
|
TRUE_KEYWORDS = ['precious']
|
@@ -0,0 +1,222 @@
|
|
1
|
+
class Parser2
|
2
|
+
WRITER_FILE = 'output.rb'
|
3
|
+
# KEYWORDS
|
4
|
+
#LINE_KEYWORDS = [',', '.', '?', '!', ';']
|
5
|
+
PUT_KEYWORDS = ['bring forth the ring', 'says', 'screams', 'exclaims', 'sobbs', 'coughs']
|
6
|
+
COMMENT_KEYWORDS = ['second breakfast', 'wear the ring']
|
7
|
+
ASSIGNMENT_KEYWORDS = ['is', 'are', 'was', 'has']
|
8
|
+
INCREMENT_KEYWORDS = ['eats lembas bread', 'fortifies stronghold', 'rests', 'recieves Evenstar', 'reforges Narsil']
|
9
|
+
DECREMENT_KEYWORDS = ['runs out of lembas bread', 'lost', 'hunted by orcs']
|
10
|
+
ADDITION_KEYWORDS = ['joins', 'join', 'and', 'accompanies']
|
11
|
+
SUBTRACTION_KEYWORDS = ['leaves the fellowship', 'stabs', 'banishes', 'steals']
|
12
|
+
MULTIPLICATION_KEYWORDS = ['gives aid to', 'procreates', 'bolsters']
|
13
|
+
DIVISION_KEYWORDS = ['decapitates', 'dismembers']
|
14
|
+
COMPARISON_KEYWORDS = ['equal', 'same', 'similar']
|
15
|
+
CONDITION_KEYWORDS = ['does', 'if', 'will']
|
16
|
+
END_KEYWORDS = ['you shall not pass']
|
17
|
+
TRUE_KEYWORDS = ['precious']
|
18
|
+
LOOP_KEYWORDS = ['whilst', 'during the journey']
|
19
|
+
GREATER_THAN_KEYWORDS = ['stronger than', 'more']
|
20
|
+
LESS_THAN_KEYWORDS = ['weaker than', 'less']
|
21
|
+
FUNCTION_DEF_KEYWORDS = ['transcribe', 'tell a story']
|
22
|
+
FUNCTION_CALL_KEYWORDS = ["theyre taking the hobbits to"]
|
23
|
+
PARAM_KEYWORDS = ['with']
|
24
|
+
NEGATION_KEYWORDS = ['not']
|
25
|
+
CLASS_KEYWORDS = ['chapter']
|
26
|
+
OPERATOR_KEYWORDS = ['#', '+', '-', '=', '*', '/', '+=1', '-=1', 'puts', '==', 'if', 'end', 'true', 'while', '>', '<', '!', 'def', '(', ')', 'class']
|
27
|
+
|
28
|
+
ALICIA_KEYS = [END_KEYWORDS, PUT_KEYWORDS, ASSIGNMENT_KEYWORDS, INCREMENT_KEYWORDS, DECREMENT_KEYWORDS, ADDITION_KEYWORDS, SUBTRACTION_KEYWORDS, DIVISION_KEYWORDS, MULTIPLICATION_KEYWORDS, COMPARISON_KEYWORDS, CONDITION_KEYWORDS, TRUE_KEYWORDS, LOOP_KEYWORDS, GREATER_THAN_KEYWORDS, LESS_THAN_KEYWORDS, NEGATION_KEYWORDS, FUNCTION_DEF_KEYWORDS, FUNCTION_CALL_KEYWORDS, CLASS_KEYWORDS]
|
29
|
+
|
30
|
+
MAP = [{'puts': PUT_KEYWORDS}, {'#': COMMENT_KEYWORDS}, {'=': ASSIGNMENT_KEYWORDS}, {'+=1': INCREMENT_KEYWORDS}, {'-=1': DECREMENT_KEYWORDS}, {'+': ADDITION_KEYWORDS}, {'-': SUBTRACTION_KEYWORDS}, {'*': MULTIPLICATION_KEYWORDS}, {'/': DIVISION_KEYWORDS}, {'==': COMPARISON_KEYWORDS}, {'if': CONDITION_KEYWORDS}, {'end': END_KEYWORDS}, {'true': TRUE_KEYWORDS}, {'while': LOOP_KEYWORDS}, {'>': GREATER_THAN_KEYWORDS}, {'<': LESS_THAN_KEYWORDS}, {'!': NEGATION_KEYWORDS}, {'def': FUNCTION_DEF_KEYWORDS}, {'': FUNCTION_CALL_KEYWORDS},{'(': PARAM_KEYWORDS}, {'class': CLASS_KEYWORDS}]
|
31
|
+
|
32
|
+
def self.parse_file(file, output_file_name)
|
33
|
+
str = ""
|
34
|
+
writer_file_name = output_file_name
|
35
|
+
file.each_with_index do |file, index|
|
36
|
+
file.each_line do |line|
|
37
|
+
line = parse_line(line, index)
|
38
|
+
str << (line + "\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
write(str, writer_file_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.parse_line(line, index)
|
45
|
+
#error handeling
|
46
|
+
#ignore lines of length 1, its empty
|
47
|
+
if line.length == 1
|
48
|
+
# write("#{line}")
|
49
|
+
return line
|
50
|
+
else
|
51
|
+
|
52
|
+
#check if there are strings in line
|
53
|
+
quote = ""
|
54
|
+
if line.include? '"'
|
55
|
+
quote = get_quote(line)
|
56
|
+
line = line.gsub(quote, 'quote_placeholder')
|
57
|
+
end
|
58
|
+
|
59
|
+
#check if line is a comment
|
60
|
+
comment = ""
|
61
|
+
if COMMENT_KEYWORDS.any? { |word| line.include?(word) }
|
62
|
+
line = parse(line, COMMENT_KEYWORDS)
|
63
|
+
comment = store_important(line, '#')
|
64
|
+
line = line.gsub(comment, 'comment_placeholder')
|
65
|
+
end
|
66
|
+
|
67
|
+
#check if line has params
|
68
|
+
params = ""
|
69
|
+
if ((PARAM_KEYWORDS.any? { |word| line.include?(word) }) &&
|
70
|
+
((FUNCTION_DEF_KEYWORDS.any? { |word| line.include?(word) }) ||
|
71
|
+
(FUNCTION_CALL_KEYWORDS.any? { |word| line.include?(word) })))
|
72
|
+
line = parse(line, PARAM_KEYWORDS)
|
73
|
+
params = remove_newline(store_important(line, '('))
|
74
|
+
line = line.gsub(params, 'param_placeholder ') + ')'
|
75
|
+
end
|
76
|
+
|
77
|
+
class_word = ""
|
78
|
+
if CLASS_KEYWORDS.any? { |word| line.include?(word) }
|
79
|
+
line = parse(line, CLASS_KEYWORDS)
|
80
|
+
class_word = store_important(line, ':')
|
81
|
+
line = line.gsub(class_word, ' class_word_placeholder')
|
82
|
+
end
|
83
|
+
|
84
|
+
#get rid of special chars
|
85
|
+
line_array = line.split(" ")
|
86
|
+
line_array.each_with_index do |word, index|
|
87
|
+
line_array[index] = purify(word)
|
88
|
+
end
|
89
|
+
|
90
|
+
#check for keywords
|
91
|
+
#calls if statements
|
92
|
+
line = line_array.join(" ")
|
93
|
+
line = check_for_keywords(line)
|
94
|
+
|
95
|
+
#remove extra english words
|
96
|
+
line = only_valuable_words(line).downcase
|
97
|
+
|
98
|
+
#put string back into line
|
99
|
+
if line.include? ('"quote_placeholder"')
|
100
|
+
line = line.gsub('quote_placeholder', quote)
|
101
|
+
end
|
102
|
+
|
103
|
+
if line.include? ('comment_placeholder')
|
104
|
+
line = line.gsub('comment_placeholder', comment)
|
105
|
+
end
|
106
|
+
|
107
|
+
if line.include? ('param_placeholder')
|
108
|
+
line = line.gsub('param_placeholder', params.downcase)
|
109
|
+
line = format_function(line)
|
110
|
+
end
|
111
|
+
|
112
|
+
if line.include? ('class_word_placeholder')
|
113
|
+
line = line.gsub('class_word_placeholder', "#{class_word}")
|
114
|
+
end
|
115
|
+
|
116
|
+
# write("#{line}")
|
117
|
+
return line
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.check_for_keywords(line)
|
122
|
+
ALICIA_KEYS.each do |keywords|
|
123
|
+
line = parse(line, keywords)
|
124
|
+
end
|
125
|
+
line
|
126
|
+
end
|
127
|
+
|
128
|
+
# METHODS
|
129
|
+
def self.parse(line, keywords)
|
130
|
+
keywords.each do |keyword|
|
131
|
+
if line.include? keyword
|
132
|
+
puts keyword
|
133
|
+
replacement = find_replacement(keywords)
|
134
|
+
line = line.gsub(keyword, replacement)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
return line
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.remove_newline(line)
|
141
|
+
line.gsub(/\n/, "")
|
142
|
+
end
|
143
|
+
|
144
|
+
def self.only_valuable_words(line)
|
145
|
+
important_words = []
|
146
|
+
line_array = line.split(" ")
|
147
|
+
line_array.each do |word|
|
148
|
+
valuable_word = valuable?(word)
|
149
|
+
if valuable_word
|
150
|
+
important_words << word
|
151
|
+
end
|
152
|
+
end
|
153
|
+
line = important_words.join(" ")
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.valuable?(word)
|
157
|
+
valuable = false
|
158
|
+
if /[[:upper:]]/.match(word[0]) #if variable
|
159
|
+
valuable = true
|
160
|
+
elsif word == '"quote_placeholder"' #if string/quote
|
161
|
+
valuable = true
|
162
|
+
elsif word == '#comment_placeholder' #if comment
|
163
|
+
valuable = true
|
164
|
+
elsif word == '(param_placeholder' #if params
|
165
|
+
valuable = true
|
166
|
+
elsif word == 'class_word_placeholder' #if class
|
167
|
+
valuable = true
|
168
|
+
elsif word.to_i.to_s == word #if num
|
169
|
+
valuable = true
|
170
|
+
elsif OPERATOR_KEYWORDS.include? word #if operator
|
171
|
+
valuable = true
|
172
|
+
end
|
173
|
+
valuable
|
174
|
+
end
|
175
|
+
|
176
|
+
def self.get_quote(phrase)
|
177
|
+
phrase_array = phrase.split('')
|
178
|
+
index = phrase_array.find_index { |i| i == '"'} + 1
|
179
|
+
quote = ""
|
180
|
+
while phrase_array[index] != '"'
|
181
|
+
quote << phrase_array[index]
|
182
|
+
index += 1
|
183
|
+
end
|
184
|
+
quote
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.store_important(phrase, key)
|
188
|
+
phrase_array = phrase.split('')
|
189
|
+
index = phrase_array.find_index { |i| i == key} + 1
|
190
|
+
string = ""
|
191
|
+
while index < phrase_array.length
|
192
|
+
string << phrase_array[index]
|
193
|
+
index += 1
|
194
|
+
end
|
195
|
+
string
|
196
|
+
end
|
197
|
+
|
198
|
+
def self.find_replacement(keywords)
|
199
|
+
MAP.each do |hash|
|
200
|
+
hash.each do |key, value|
|
201
|
+
if value == keywords
|
202
|
+
return key.to_s
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
return nil
|
207
|
+
end
|
208
|
+
|
209
|
+
def self.format_function(line)
|
210
|
+
phrase_array = line.split('')
|
211
|
+
index = phrase_array.find_index { |i| i == "("}
|
212
|
+
phrase_array.delete_at(index - 1)
|
213
|
+
phrase_array.delete_at(index - 2)
|
214
|
+
phrase_array.join("")
|
215
|
+
end
|
216
|
+
|
217
|
+
def self.write(str, writer_file_name)
|
218
|
+
writer_file = File.open(writer_file_name, 'w')
|
219
|
+
writer_file.write(str)
|
220
|
+
end
|
221
|
+
|
222
|
+
end #end of Parser Class
|
data/lib/my_precious/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_precious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jessicabettsftw
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/my_precious.rb
|
80
80
|
- lib/my_precious/cli.rb
|
81
81
|
- lib/my_precious/parser.rb
|
82
|
+
- lib/my_precious/parser_2.rb
|
82
83
|
- lib/my_precious/version.rb
|
83
84
|
- middle_earth.precious
|
84
85
|
- my_precious.gemspec
|