Blame view

node_modules/yamljs/src/Unescaper.coffee 2.69 KB
f7563de62   Palak Handa   first commit
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
  
  Utils   = require './Utils'
  Pattern = require './Pattern'
  
  # Unescaper encapsulates unescaping rules for single and double-quoted YAML strings.
  #
  class Unescaper
  
      # Regex fragment that matches an escaped character in
      # a double quoted string.
      @PATTERN_ESCAPED_CHARACTER:     new Pattern '\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})';
  
  
      # Unescapes a single quoted string.
      #
      # @param [String]       value A single quoted string.
      #
      # @return [String]      The unescaped string.
      #
      @unescapeSingleQuotedString: (value) ->
          return value.replace(/\'\'/g, '\'')
  
  
      # Unescapes a double quoted string.
      #
      # @param [String]       value A double quoted string.
      #
      # @return [String]      The unescaped string.
      #
      @unescapeDoubleQuotedString: (value) ->
          @_unescapeCallback ?= (str) =>
              return @unescapeCharacter(str)
  
          # Evaluate the string
          return @PATTERN_ESCAPED_CHARACTER.replace value, @_unescapeCallback
  
  
      # Unescapes a character that was found in a double-quoted string
      #
      # @param [String]       value An escaped character
      #
      # @return [String]      The unescaped character
      #
      @unescapeCharacter: (value) ->
          ch = String.fromCharCode
          switch value.charAt(1)
              when '0'
                  return ch(0)
              when 'a'
                  return ch(7)
              when 'b'
                  return ch(8)
              when 't'
                  return "\t"
              when "\t"
                  return "\t"
              when 'n'
                  return "
  "
              when 'v'
                  return ch(11)
              when 'f'
                  return ch(12)
              when 'r'
                  return ch(13)
              when 'e'
                  return ch(27)
              when ' '
                  return ' '
              when '"'
                  return '"'
              when '/'
                  return '/'
              when '\\'
                  return '\\'
              when 'N'
                  # U+0085 NEXT LINE
                  return ch(0x0085)
              when '_'
                  # U+00A0 NO-BREAK SPACE
                  return ch(0x00A0)
              when 'L'
                  # U+2028 LINE SEPARATOR
                  return ch(0x2028)
              when 'P'
                  # U+2029 PARAGRAPH SEPARATOR
                  return ch(0x2029)
              when 'x'
                  return Utils.utf8chr(Utils.hexDec(value.substr(2, 2)))
              when 'u'
                  return Utils.utf8chr(Utils.hexDec(value.substr(2, 4)))
              when 'U'
                  return Utils.utf8chr(Utils.hexDec(value.substr(2, 8)))
              else
                  return ''
  
  module.exports = Unescaper