/**
 * String module.
 * @namespace lib.string
 * @author Taka Okunishi
 *
 */

var prototype = require('./_prototype.js');
/**
 * Define an object property getter to access prototype property.
 * @private
 */
function getPrototypeProperty (key) {
    return {
        enumerable: true,
        get: function () {
            return prototype[key];
        }
    };
}

// Export prototype properties with lazy loading.
Object.defineProperties(exports, {
    _patterns: getPrototypeProperty('_patterns'),
    camelize: getPrototypeProperty('camelize'),
    capitalize: getPrototypeProperty('capitalize'),
    decapitalize: getPrototypeProperty('decapitalize'),
    isString: getPrototypeProperty('isString'),
    sprintf: getPrototypeProperty('sprintf'),
    toHankaku: getPrototypeProperty('toHankaku'),
    toHiragana: getPrototypeProperty('toHiragana'),
    toKatakana: getPrototypeProperty('toKatakana'),
    toZenkaku: getPrototypeProperty('toZenkaku'),
    underscorize: getPrototypeProperty('underscorize')

});


/**
 * Define an object property getter with require function.
 * @private
 */
function getRequire (moduleName) {
    return {
        enumerable: true,
        get: function () {
            return require(moduleName);
        }
    };
}

// Export modules with lazy loading.
Object.defineProperties(exports, {
    padZero: getRequire('./pad_zero'),
    pluralize: getRequire('./pluralize')

});
