function CursorConfiguration(languageIdentifier, oneIndent, modelOptions, configuration) {
            var c = configuration.editor;
            this.readOnly = c.readOnly;
            this.tabSize = modelOptions.tabSize;
            this.insertSpaces = modelOptions.insertSpaces;
            this.oneIndent = oneIndent;
            this.pageSize = Math.floor(c.layoutInfo.height / c.fontInfo.lineHeight) - 2;
            this.lineHeight = c.lineHeight;
            this.useTabStops = c.useTabStops;
            this.wordSeparators = c.wordSeparators;
            this.emptySelectionClipboard = c.emptySelectionClipboard;
            this.autoClosingBrackets = c.autoClosingBrackets;
            this.autoIndent = c.autoIndent;
            this.autoClosingPairsOpen = {};
            this.autoClosingPairsClose = {};
            this.surroundingPairs = {};
            this.electricChars = {};
            var electricChars = CursorConfiguration._getElectricCharacters(languageIdentifier);
            if (electricChars) {
                for (var i = 0; i < electricChars.length; i++) {
                    this.electricChars[electricChars[i]] = true;
                }
            }
            var autoClosingPairs = CursorConfiguration._getAutoClosingPairs(languageIdentifier);
            if (autoClosingPairs) {
                for (var i = 0; i < autoClosingPairs.length; i++) {
                    this.autoClosingPairsOpen[autoClosingPairs[i].open] = autoClosingPairs[i].close;
                    this.autoClosingPairsClose[autoClosingPairs[i].close] = autoClosingPairs[i].open;
                }
            }
            var surroundingPairs = CursorConfiguration._getSurroundingPairs(languageIdentifier);
            if (surroundingPairs) {
                for (var i = 0; i < surroundingPairs.length; i++) {
                    this.surroundingPairs[surroundingPairs[i].open] = surroundingPairs[i].close;
                }
            }
        }
@param strict Do NOT allow a position inside a high-low surrogate pair