File: CHANGES

package info (click to toggle)
ruby-citrus 3.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 420 kB
  • sloc: ruby: 3,417; makefile: 5
file content (132 lines) | stat: -rw-r--r-- 4,105 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
= 3.0.1 / 2014-03-14

  * Fixed bad 3.0.0 release.

= 3.0.0 / 2014-03-14

  * Moved Object#grammar to citrus/core_ext.rb. Citrus no longer installs core
    extensions by default. Use "require 'citrus/core_ext.rb'" instead of
    "require 'citrus'" to keep the previous behavior.

  * Removed Match#method_missing, added #capture(name) and #captures(name)

    Match#method_missing is unsafe as illustrated in Github issue #41. In
    particular, it makes composing a grammar with aribitrary gems unsafe (e.g.
    when the latter make core extensions), leads to unexpected results with
    labels match existing Kernel methods (e.g. `p`), and prevents Match from
    getting new methods in a backward compatible way. This commit therefore
    removes it.

    In Citrus 2.x, method_missing allowed rule productions to denote captured
    matches by label name:

        rule pair
          (foo ':' bar) {
            [foo.value, bar.value]
          }
        end

    Also, it allowed invoking String operators on the Match's text:

        rule int
          [0-9]+ { to_i }
        end

    Those two scenarios no longer work out of the box in Citrus 3.0. You must
    use capture(label) for the former, and to_str for the latter:

        rule pair
          (foo ':' bar) {
            [capture(:foo).value, capture(:bar).value]
          }
        end

        rule int
          [0-9]+ { to_str.to_i }
        end

    Match#captures now accepts an optional label name as first argument and
    returns the corresponding array of matches for that label (useful in case
    the label belongs to a repetition).

= 2.5.0 / 2014-03-13

  * Inputs may be generated from many different sources, including Pathname and
    IO objects (thanks blambeau).

  * Matches keep track of their offset in the original source  (thanks
    blambeau).

  * Citrus.load no longer raises Citrus::LoadError for files that can't be found
    or are not readable. Users must rescue Errno::ENOENT instead, for example.

  * Removed a few ruby warnings (thanks tbuehlmann)

= 2.4.1 / 2011-11-04

  * Fixed a bug that prevented rule names from starting with "super".

  * Several minor bug fixes.

= 2.4.0 / 2011-05-11

  * Fixed a bug that prevented parsing nested blocks correctly (issue #21).

  * Added URI example.

  * Moved example grammars inside lib/citrus/grammars and added
    lib/citrus/grammars.rb for easily requiring Citrus example grammars.

= 2.3.7 / 2011-02-20

  * Fixed a bug that prevented forward slashes from being used inside character
    class literals.

  * Added email address example.

= 2.3.6 / 2011-02-19

  * Fixed a bug that prevented memoization from advancing the input's pointer
    properly (thanks joachimm).

  * Several additions to the TextMate bundle (thanks joachimm).

= 2.3.5 / 2011-02-07

  * Fixed a bug that prevented Match objects from being printed properly using
    Kernel#puts (thanks joachimm).

  * Fixed a bug that prevented using rules with names that begin with "end"
    (thanks Mark Wilden).

  * Citrus#require accepts relative file paths, in addition to absolute ones.

  * Simplified/cleaned up some example files.

= 2.3.4 / 2011-01-17

  * Added CHANGES file.

= 2.3.3 / 2011-01-17

  * Added self to Match#captures hash. This means that a Match may retrieve a
    reference to itself by using its own label, proxy name, or index 0 in the
    hash.

  * Match#captures returns an empty array for unknown Symbol keys, coerces
    String keys to Symbols, and returns nil for unknown Numeric keys.

  * Moved Citrus::VERSION to its own file.

  * Citrus::LoadError is raised when Citrus is unable to load a file from the
    file system because it cannot be found or it is not readable.

  * Citrus::SyntaxError is raised when Citrus::File is unable to parse some
    Citrus syntax.

  * Added Citrus.require for requiring .citrus grammar files in a similar way
    to Ruby's Kernel.require. Also, overloaded the require operator in Citrus
    grammar files to failover to Citrus.require when Kernel.require raises a
    LoadError.

  * Improved UTF-8 support.