nilac 0.0.2 → 0.0.3

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.
Files changed (3) hide show
  1. data/bin/nilac +20 -273
  2. data/lib/nilac/version.rb +1 -1
  3. metadata +1 -1
data/bin/nilac CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
 
4
3
  #Nilac is the official Nila compiler. It compiles Nila into pure Javascript. Nilac is currently
5
4
  #written in Ruby but will be self hosted in the upcoming years. Nila targets mostly the
@@ -210,83 +209,6 @@ def compile(input_file_path)
210
209
 
211
210
  end
212
211
 
213
- def compile_heredoc_strings(input_file_contents,temporary_nila_file)
214
-
215
- #This method will compile all the Heredoc strings in Nila into pure
216
- #Javascript strings. Ruby has two types of Heredocs. Currently, Nila doesn't support both of them.
217
- #Here is an example of what Nila supports
218
-
219
- #long_passage = <<-ipsumtext
220
- #
221
- #Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
222
- #incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
223
- #exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
224
- #irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
225
- #pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
226
- #deserunt mollit anim id est laborum.
227
- #
228
- #ipsumtext
229
-
230
- #Heredocs preserve all the formatting
231
-
232
- def find_all_matching_indices(input_string,pattern)
233
-
234
- locations = []
235
-
236
- index = input_string.index(pattern)
237
-
238
- while index != nil
239
-
240
- locations << index
241
-
242
- index = input_string.index(pattern,index+1)
243
-
244
-
245
- end
246
-
247
- return locations
248
-
249
-
250
- end
251
-
252
- joined_file_contents = input_file_contents.join
253
-
254
- modified_file_contents = joined_file_contents.dup
255
-
256
- heredoc_start_locations = find_all_matching_indices(joined_file_contents,"<<-")
257
-
258
- heredoc_start_locations.each do |location|
259
-
260
- string_extract = joined_file_contents[location..-1]
261
-
262
- end_of_first_line = string_extract.index("\n")
263
-
264
- name_of_heredoc = string_extract[3...end_of_first_line].rstrip
265
-
266
- heredoc_start,heredoc_end = find_all_matching_indices(string_extract,name_of_heredoc)
267
-
268
- heredoc = string_extract[heredoc_start..heredoc_end+name_of_heredoc.length-1]
269
-
270
- heredoc_content = heredoc.split(name_of_heredoc)
271
-
272
- heredoc_content = heredoc_content[1].lstrip.rstrip.gsub("\n","\\n").gsub("\t","\\t")
273
-
274
- modified_file_contents = modified_file_contents.sub(string_extract[heredoc_start-3..heredoc_end+name_of_heredoc.length-1],"\""+heredoc_content+"\"")
275
-
276
- end
277
-
278
- file_id = open(temporary_nila_file, 'w')
279
-
280
- file_id.write(modified_file_contents)
281
-
282
- file_id.close()
283
-
284
- line_by_line_contents = read_file_line_by_line(temporary_nila_file)
285
-
286
- return line_by_line_contents
287
-
288
- end
289
-
290
212
  def compile_interpolated_strings(input_file_contents)
291
213
 
292
214
  modified_file_contents = input_file_contents.dup
@@ -1361,38 +1283,6 @@ def compile(input_file_path)
1361
1283
 
1362
1284
  line_by_line_contents = read_file_line_by_line(temporary_nila_file)
1363
1285
 
1364
- var_declaration_index = 0
1365
-
1366
- for x in 0...line_by_line_contents.length
1367
-
1368
- current_row = line_by_line_contents[x]
1369
-
1370
- if current_row.lstrip.include?("var ")
1371
-
1372
- var_declaration_index = x
1373
-
1374
- break
1375
-
1376
- end
1377
-
1378
- end
1379
-
1380
- empty_check = line_by_line_contents[x+1..x+4]
1381
-
1382
- empty_check.each_with_index do |content,index|
1383
-
1384
- empty_check[index] = content.lstrip
1385
-
1386
- end
1387
-
1388
- empty_check = empty_check.delete_if {|content| content.empty?}
1389
-
1390
- if empty_check.empty?
1391
-
1392
- line_by_line_contents.delete_at(x+1);line_by_line_contents.delete_at(x+2)
1393
-
1394
- end
1395
-
1396
1286
  return line_by_line_contents
1397
1287
 
1398
1288
  end
@@ -1411,7 +1301,7 @@ def compile(input_file_path)
1411
1301
 
1412
1302
  def create_self_invoking_function(input_file_contents)
1413
1303
 
1414
- # A feature imported from Coffeescript. This makes all the function private by default
1304
+ # A feature imported from Coffeescript 1.6.1. This makes all the function private by default
1415
1305
  # and prevents global variables from leaking.
1416
1306
 
1417
1307
  modified_file_contents = ["(function() {\n\n",input_file_contents,"\n\n}).call(this);\n"].flatten
@@ -1420,170 +1310,15 @@ def compile(input_file_path)
1420
1310
 
1421
1311
  end
1422
1312
 
1423
- def compile_license_functions(input_file_contents,temporary_nila_file)
1424
-
1425
- #This method will make it easier for developers to add open source licensing to their projects
1426
-
1427
- #Currently the following licenses are supported
1428
-
1429
- #1. MIT License
1430
-
1431
- #Example of MIT License => mit_license(year,authors)
1432
-
1433
- #mit_license("2013","Adhithya Rajasekaran, Sri Madhavi Rajasekaran")
1434
-
1435
- def find_all_matching_indices(input_string,pattern)
1436
-
1437
- locations = []
1438
-
1439
- index = input_string.index(pattern)
1440
-
1441
- while index != nil
1442
-
1443
- locations << index
1444
-
1445
- index = input_string.index(pattern,index+1)
1446
-
1447
-
1448
- end
1449
-
1450
- return locations
1451
-
1452
-
1453
- end
1454
-
1455
- license_functions = ["mit_license(","apache_license"]
1456
-
1457
- mit_license = <<-licensetext
1458
-
1459
- /*
1460
-
1461
- Copyright yer, <auth>
1462
-
1463
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
1464
- to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
1465
- and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
1466
-
1467
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
1468
-
1469
- THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1470
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1471
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
1472
- IN THE SOFTWARE.
1473
-
1474
- */
1475
-
1476
-
1477
- licensetext
1478
-
1479
- apache_license = <<-licensetext
1480
-
1481
- /*
1482
-
1483
- Copyright [yer] [auth]
1484
-
1485
- Licensed under the Apache License, Version 2.0 (the "License");
1486
- you may not use this file except in compliance with the License.
1487
- You may obtain a copy of the License at
1488
-
1489
- http://www.apache.org/licenses/LICENSE-2.0
1490
-
1491
- Unless required by applicable law or agreed to in writing, software
1492
- distributed under the License is distributed on an "AS IS" BASIS,
1493
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1494
- See the License for the specific language governing permissions and
1495
- limitations under the License.
1496
-
1497
- */
1498
-
1499
-
1500
- licensetext
1501
-
1502
- license_texts = [mit_license,apache_license]
1503
-
1504
- license_params = [2,2]
1505
-
1506
- license_replaceables = ["yer","auth","orgg"]
1507
-
1508
- joined_file_contents = input_file_contents.join
1509
-
1510
- license_functions.each_with_index do |function,index|
1511
-
1512
- function_locations = find_all_matching_indices(joined_file_contents,function)
1513
-
1514
- function_locations.each do |location|
1515
-
1516
- string_extract = joined_file_contents[location..-1]
1517
-
1518
- function_end = string_extract.index(")")
1519
-
1520
- function_call = string_extract[0..function_end]
1521
-
1522
- parameters = function_call.split(function)[1][0...-1]
1523
-
1524
- parameters = parameters.split(":")
1525
-
1526
- parameters.each_with_index do |param,index|
1527
-
1528
- parameters[index] = param[1...-1]
1529
-
1530
- end
1531
-
1532
- replacement_string = license_texts[index]
1533
-
1534
- for x in 0...parameters.length
1535
-
1536
- replacement_string = replacement_string.sub(license_replaceables[x],parameters[x])
1537
-
1538
- end
1539
-
1540
- replacement_array = replacement_string.split("\n")
1541
-
1542
- modified_replacement_array = replacement_array.dup
1543
-
1544
- replacement_array.each_with_index do |line,index|
1545
-
1546
- modified_replacement_array[index] = line.lstrip
1547
-
1548
- end
1549
-
1550
- replacement_string = replacement_array.join("\n")
1551
-
1552
- if joined_file_contents.include?(function_call+";\n")
1553
-
1554
- joined_file_contents = joined_file_contents.sub(function_call+";\n","")
1555
-
1556
- else
1557
-
1558
- joined_file_contents = joined_file_contents.sub(function_call+";","")
1559
-
1560
- end
1561
-
1562
- joined_file_contents = replacement_string.lstrip + "\n\n" + joined_file_contents
1563
-
1564
- end
1565
-
1566
- end
1567
-
1568
- file_id = open(temporary_nila_file, 'w')
1569
-
1570
- file_id.write(joined_file_contents)
1571
-
1572
- file_id.close()
1573
-
1574
- line_by_line_contents = read_file_line_by_line(temporary_nila_file)
1575
-
1576
- return line_by_line_contents
1577
-
1578
- end
1579
-
1580
1313
  def output_javascript(file_contents,output_file,temporary_nila_file)
1581
1314
 
1582
1315
  file_id = open(output_file, 'w')
1583
1316
 
1584
1317
  File.delete(temporary_nila_file)
1585
1318
 
1586
- file_id.write("// Generated by Nilac 0.0.1 Visit http://adhithyan15.github.com/nila to know more\n\n")
1319
+ file_id.write("//Written in Nila and compiled into Javascript.Have fun!\n\n")
1320
+
1321
+ file_id.write("//Visit http://adhithyan15.github.com/nila to know more!\n\n")
1587
1322
 
1588
1323
  file_id.write(file_contents.join)
1589
1324
 
@@ -1599,7 +1334,7 @@ def compile(input_file_path)
1599
1334
 
1600
1335
  file_contents = split_semicolon_seperated_expressions(file_contents)
1601
1336
 
1602
- file_contents = compile_heredoc_strings(file_contents,temp_file)
1337
+ #file_contents = compile_heredoc_strings(file_contents,temp_file)
1603
1338
 
1604
1339
  file_contents = compile_interpolated_strings(file_contents)
1605
1340
 
@@ -1629,8 +1364,6 @@ def compile(input_file_path)
1629
1364
 
1630
1365
  file_contents = create_self_invoking_function(file_contents)
1631
1366
 
1632
- file_contents = compile_license_functions(file_contents,temp_file)
1633
-
1634
1367
  file_contents = pretty_print_javascript(file_contents,temp_file)
1635
1368
 
1636
1369
  output_javascript(file_contents,output_js_file,temp_file)
@@ -1640,6 +1373,18 @@ end
1640
1373
 
1641
1374
  def create_executable(input_file)
1642
1375
 
1376
+ def read_file_line_by_line(input_path)
1377
+
1378
+ file_id = open(input_path)
1379
+
1380
+ file_line_by_line = file_id.readlines()
1381
+
1382
+ file_id.close
1383
+
1384
+ return file_line_by_line
1385
+
1386
+ end
1387
+
1643
1388
  windows_output = `ocra --add-all-core #{input_file}`
1644
1389
 
1645
1390
  end
@@ -1714,7 +1459,9 @@ OptionParser.new do |opts|
1714
1459
 
1715
1460
  opts.on("-b", "--build", "Builds Itself") do
1716
1461
 
1717
- create_executable("nilac.rb")
1462
+ file_path = Dir.pwd + "/nilac.rb"
1463
+
1464
+ create_executable(file_path)
1718
1465
 
1719
1466
  puts "Build Successful!"
1720
1467
 
data/lib/nilac/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nilac
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nilac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: