jbe/bsw@0: function parse.boolean(str, dest_type, options) jbe/bsw@0: if dest_type ~= atom.boolean then jbe/bsw@0: error("parse.boolean(...) can only return booleans, but a different destination type than atom.boolean was given.") jbe/bsw@0: end jbe/bsw@0: local options = options or {} jbe/bsw@0: local trimmed_str = string.match(str or "", "^%s*(.-)%s*$") jbe/bsw@0: if options.true_as or options.false_as or options.nil_as then jbe/bsw@0: if trimmed_str == options.true_as then jbe/bsw@0: return true jbe/bsw@0: elseif trimmed_str == options.false_as then jbe/bsw@0: return false jbe/bsw@0: elseif trimmed_str == options.nil_as or trimmed_str == "" then jbe/bsw@0: return nil jbe/bsw@0: else jbe/bsw@0: error("Boolean value not recognized.") jbe/bsw@0: end jbe/bsw@0: else jbe/bsw@0: local char = string.upper(string.sub(trimmed_str, 1, 1)) jbe/bsw@0: if char == "1" or char == "T" or char == "Y" then jbe/bsw@0: return true jbe/bsw@0: elseif char == "0" or char == "F" or char == "N" then jbe/bsw@0: return false jbe/bsw@0: elseif char == "" then jbe/bsw@0: return nil jbe/bsw@0: else jbe/bsw@0: error("Boolean value not recognized.") jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: end