Module: RplLang::Words::String

Includes:
Types
Included in:
Rpl
Defined in:
lib/rpl/words/string.rb

Instance Method Summary collapse

Methods included from Types

new_object

Instance Method Details

#populate_dictionaryObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rpl/words/string.rb', line 8

def populate_dictionary
  super

  category = 'String'

  @dictionary.add_word( ['→str', '->str'],
                        category,
                        '( a -- s ) convert element to string',
                        proc do
                          args = stack_extract( [:any] )

                          @stack << Types.new_object( RplString, "\"#{args[0]}\"" )
                        end )

  @dictionary.add_word( ['str→', 'str->'],
                        category,
                        '( s -- a ) convert string to element',
                        proc do
                          args = stack_extract( [[RplString]] )

                          @stack += Parser.parse( args[0].value )
                        end )

  @dictionary.add_word( ['chr'],
                        category,
                        '( n -- c ) convert ASCII character code in stack level 1 into a string',
                        proc do
                          args = stack_extract( [[RplNumeric]] )

                          @stack << Types.new_object( RplString, "\"#{args[0].value.to_i.chr}\"" )
                        end )

  @dictionary.add_word( ['num'],
                        category,
                        '( s -- n ) return ASCII code of the first character of the string in stack level 1 as a real number',
                        proc do
                          args = stack_extract( [[RplString]] )

                          @stack << Types.new_object( RplNumeric, args[0].value.ord )
                        end )

  @dictionary.add_word( ['size'],
                        category,
                        '( s -- n ) return the length of the string or list',
                        proc do
                          args = stack_extract( [[RplString, RplList]] )

                          @stack << Types.new_object( RplNumeric, args[0].value.length )
                        end )

  @dictionary.add_word( ['pos'],
                        category,
                        '( s s -- n ) search for the string in level 1 within the string in level 2',
                        proc do
                          args = stack_extract( [[RplString], [RplString]] )

                          @stack << Types.new_object( RplNumeric, args[1].value.index( args[0].value ) )
                        end )

  @dictionary.add_word( ['sub'],
                        category,
                        '( s n n -- s ) return a substring of the string in level 3',
                        proc do
                          args = stack_extract( [[RplNumeric], [RplNumeric], [RplString]] )

                          @stack << Types.new_object( RplString, "\"#{args[2].value[ (args[1].value - 1)..(args[0].value - 1) ]}\"" )
                        end )

  @dictionary.add_word( ['split'],
                        category,
                        '( s c -- … ) split string s on character c',
                        proc do
                          args = stack_extract( [[RplString], [RplString]] )

                          args[1].value.split( args[0].value ).each do |elt|
                            @stack << Types.new_object( RplString, "\"#{elt}\"" )
                          end
                        end )
end