Class: Sal::Code

Inherits:
Object
  • Object
show all
Defined in:
lib/sal/code.rb

Overview

The class code represent the complete code from a sal file. You can analyze the code now through the items, the libraries, … Only code in text format could be analyzed

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ Code

Initialize Code with filename The sourcecode will read and the format and version are analysed



19
20
21
22
# File 'lib/sal/code.rb', line 19

def initialize( filename )
  read_code_from_file filename
  get_format_and_version_from_code
end

Instance Attribute Details

#codeObject

Returns the value of attribute code.



36
37
38
# File 'lib/sal/code.rb', line 36

def code
  @code
end

#filenameObject

Returns the value of attribute filename.



36
37
38
# File 'lib/sal/code.rb', line 36

def filename
  @filename
end

#formatObject

Returns the value of attribute format.



36
37
38
# File 'lib/sal/code.rb', line 36

def format
  @format
end

#versionObject

Returns the value of attribute version.



36
37
38
# File 'lib/sal/code.rb', line 36

def version
  @version
end

Instance Method Details

#add_library(filename) ⇒ Object

Add a new library to the libraries section in the code



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/sal/code.rb', line 58

def add_library(filename)
  # .head 1 +  Libraries
  # .head 2 -  File Include: qckttip.apl
  # .head 2 -  File Include: vt.apl
  items.each do | item |
    if( item.level == 1 and item.code =~ /Libraries/ )
      include_item = item.copy
      include_item.parent = item
      include_item.childs = []
      include_item.code = "File Include: #{filename}"
      include_item.level = item.level + 1
      @items.insert(@items.index(item) + 1, include_item)
      item.childs.insert(0, include_item)
      item.refresh_child_indicator
      include_item.refresh_child_indicator
      @libraries = nil
      return include_item
    end
  end
end

#classesObject

Getter for the classes (lazy loading)



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/sal/code.rb', line 93

def classes
  if @classes.nil?
    @classes = []
    items.each do | item |
      if( item.level == 3 and !item.parent.nil? and item.parent.code.start_with?("Class Definitions") )
        @classes << Class.new(item) unless item.commented?
      end
    end
  end
  return @classes
end

#display(smart = true) ⇒ Object

Returns a short overview over the code (version, format, …)



119
120
121
122
123
124
125
# File 'lib/sal/code.rb', line 119

def display(smart = true)
  disp  = "#{File.basename @filename} " 
  disp += (smart ? "- " : ":\n")
  disp += "Version = #{@version.td} "
  disp += (smart ? "- " : "\n")
  disp += "Format = #{@format}"
end

#externalsObject

Getter for the externals (lazy loading)



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/sal/code.rb', line 80

def externals
  if @externals.nil?
    @externals = Array.new
    items.each do | item |
      if( item.level == 3 and !item.parent.nil? and item.parent.code =~ /External Functions/ )
        @externals << External.new(item) unless item.commented?
      end
    end
  end
  return @externals
end

#generated_codeObject

Returns the current code from the items



110
111
112
113
114
115
116
# File 'lib/sal/code.rb', line 110

def generated_code
  new_code = ""
  items.each do | item |
    new_code += item.line
  end
  new_code
end

#itemsObject

Getter for the items (lazy loading)



39
40
41
42
# File 'lib/sal/code.rb', line 39

def items
  get_items_from_code if @items.nil?
  @items
end

#librariesObject

Getter for the libraries (lazy loading)



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/sal/code.rb', line 45

def libraries
  if @libraries.nil?
    @libraries = Array.new
    items.each do | item |
      if( item.level == 2 and !item.parent.nil? and item.parent.code =~ /Libraries/)
        @libraries << Library.new(item) unless item.commented?
      end
    end
  end
  return @libraries
end

#save(new_filename = filename) ⇒ Object

Save the items of code back to disk Without parameters, the original file will be overridden



26
27
28
# File 'lib/sal/code.rb', line 26

def save( new_filename = filename )
  save_code_to_file new_filename
end

#save_as(new_filename) ⇒ Object

Save the items of code back to disk in a new file Alias for save with a new filename



32
33
34
# File 'lib/sal/code.rb', line 32

def save_as( new_filename )
  save_code_to_file new_filename
end

#to_sObject



105
106
107
# File 'lib/sal/code.rb', line 105

def to_s
  @file_name
end