Class: Ox::Sax::Value
- Inherits:
-
Object
- Object
- Ox::Sax::Value
- Defined in:
- ext/ox/sax_as.c,
ext/ox/sax_as.c
Overview
Values in the SAX callbacks. They can be converted to various different types. with the _as_x()_ methods.
Instance Method Summary collapse
-
#as_bool ⇒ Object
return value as an boolean.
-
#as_f ⇒ Object
return value as an Float.
-
#as_i ⇒ Object
return value as an Fixnum.
-
#as_s ⇒ Object
return value as an String.
-
#as_sym ⇒ Object
return value as an Symbol.
-
#as_time ⇒ Object
return value as an Time.
-
#empty ⇒ Boolean
return true if the value is empty.
Instance Method Details
#as_bool ⇒ Object
return value as an boolean.
240 241 242 243 |
# File 'ext/ox/sax_as.c', line 240 static VALUE sax_value_as_bool(VALUE self) { return (0 == strcasecmp("true", ((SaxDrive)DATA_PTR(self))->buf.str)) ? Qtrue : Qfalse; } |
#as_f ⇒ Object
return value as an Float.
169 170 171 172 173 174 175 176 177 |
# File 'ext/ox/sax_as.c', line 169 static VALUE sax_value_as_f(VALUE self) { SaxDrive dr = DATA_PTR(self); if ('\0' == *dr->buf.str) { return Qnil; } return rb_float_new(strtod(dr->buf.str, 0)); } |
#as_i ⇒ Object
return value as an Fixnum.
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'ext/ox/sax_as.c', line 183 static VALUE sax_value_as_i(VALUE self) { SaxDrive dr = DATA_PTR(self); const char *s = dr->buf.str; long n = 0; int neg = 0; if ('\0' == *s) { return Qnil; } if ('-' == *s) { neg = 1; s++; } else if ('+' == *s) { s++; } for (; '\0' != *s; s++) { if ('0' <= *s && *s <= '9') { n = n * 10 + (*s - '0'); } else { rb_raise(ox_arg_error_class, "Not a valid Fixnum.\n"); } } if (neg) { n = -n; } return LONG2NUM(n); } |
#as_s ⇒ Object
return value as an String.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'ext/ox/sax_as.c', line 117 static VALUE sax_value_as_s(VALUE self) { SaxDrive dr = DATA_PTR(self); VALUE rs; if ('\0' == *dr->buf.str) { return Qnil; } if (dr->.convert_special) { ox_sax_collapse_special(dr, dr->buf.str, dr->buf.pos, dr->buf.line, dr->buf.col); } switch (dr->.skip) { case CrSkip: buf_collapse_return(dr->buf.str); break; case SpcSkip: buf_collapse_white(dr->buf.str); break; default: break; } rs = rb_str_new2(dr->buf.str); #if HAS_ENCODING_SUPPORT if (0 != dr->encoding) { rb_enc_associate(rs, dr->encoding); } #elif HAS_PRIVATE_ENCODING if (Qnil != dr->encoding) { rb_funcall(rs, ox_force_encoding_id, 1, dr->encoding); } #endif return rs; } |
#as_sym ⇒ Object
return value as an Symbol.
155 156 157 158 159 160 161 162 163 |
# File 'ext/ox/sax_as.c', line 155 static VALUE sax_value_as_sym(VALUE self) { SaxDrive dr = DATA_PTR(self); if ('\0' == *dr->buf.str) { return Qnil; } return str2sym(dr, dr->buf.str, 0); } |
#as_time ⇒ Object
return value as an Time.
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'ext/ox/sax_as.c', line 216 static VALUE sax_value_as_time(VALUE self) { SaxDrive dr = DATA_PTR(self); const char *str = dr->buf.str; VALUE t; if ('\0' == *str) { return Qnil; } if (Qnil == (t = parse_double_time(str)) && Qnil == (t = parse_xsd_time(str))) { VALUE args[1]; /*printf("**** time parse\n"); */ *args = rb_str_new2(str); t = rb_funcall2(ox_time_class, ox_parse_id, 1, args); } return t; } |
#empty ⇒ Boolean
return true if the value is empty.
249 250 251 252 |
# File 'ext/ox/sax_as.c', line 249 static VALUE sax_value_empty(VALUE self) { return ('\0' == *((SaxDrive)DATA_PTR(self))->buf.str) ? Qtrue : Qfalse; } |