| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854 | 
							- <!doctype html>
 
- <html>
 
-   <head>
 
-     <title>CodeMirror: User Manual</title>
 
-     <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/>
 
-     <link rel="stylesheet" type="text/css" href="css/docs.css"/>
 
-     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 
-     <style>dl dl {margin: 0;}</style>
 
-   </head>
 
-   <body>
 
- <h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1>
 
- <pre class="grey">
 
- <img src="css/baboon.png" class="logo" alt="logo"/>/* User manual and
 
-    reference guide */
 
- </pre>
 
- <div class="clear"><div class="leftbig blk">
 
-     <h2 id="overview">Overview</h2>
 
-     <p>CodeMirror is a code-editor component that can be embedded in
 
-     Web pages. It provides <em>only</em> the editor component, no
 
-     accompanying buttons
 
-     (see <a href="http://www.octolabs.com/javascripts/codemirror-ui/">CodeMirror
 
-     UI</a> for a drop-in button bar), auto-completion, or other IDE
 
-     functionality. It does provide a rich API on top of which such
 
-     functionality can be straightforwardly implemented.</p>
 
-     <p>CodeMirror works with language-specific modes. Modes are
 
-     JavaScript programs that help color (and optionally indent) text
 
-     written in a given language. The distribution comes with a few
 
-     modes (see the <code>mode/</code> directory), and it isn't hard
 
-     to <a href="#modeapi">write new ones</a> for other languages.</p>
 
-     <h2 id="usage">Basic Usage</h2>
 
-     <p>The easiest way to use CodeMirror is to simply load the script
 
-     and style sheet found under <code>lib/</code> in the distribution,
 
-     plus a mode script from one of the <code>mode/</code> directories
 
-     and a theme stylesheet from <code>theme/</code>. (See
 
-     also <a href="compress.html">the compresion helper</a>.) For
 
-     example:</p>
 
-     <pre><script src="lib/codemirror.js"></script>
 
- <link rel="stylesheet" href="lib/codemirror.css">
 
- <script src="mode/javascript/javascript.js"></script>
 
- <link rel="stylesheet" href="theme/default.css"></pre>
 
-     <p>(If you use a them other than <code>default.css</code>, you
 
-     also have to specify the
 
-     <a href="#option_theme"><code>theme</code></a> option.) Having
 
-     done this, an editor instance can be created like this:</p>
 
-     <pre>var myCodeMirror = CodeMirror(document.body);</pre>
 
-     <p>The editor will be appended to the document body, will start
 
-     empty, and will use the mode that we loaded. To have more control
 
-     over the new editor, a configuration object can be passed
 
-     to <code>CodeMirror</code> as a second argument:</p>
 
-     <pre>var myCodeMirror = CodeMirror(document.body, {
 
-   value: "function myScript(){return 100;}\n",
 
-   mode:  "javascript"
 
- });</pre>
 
-     <p>This will initialize the editor with a piece of code already in
 
-     it, and explicitly tell it to use the JavaScript mode (which is
 
-     useful when multiple modes are loaded).
 
-     See <a href="#config">below</a> for a full discussion of the
 
-     configuration options that CodeMirror accepts.</p>
 
-     <p>In cases where you don't want to append the editor to an
 
-     element, and need more control over the way it is inserted, the
 
-     first argument to the <code>CodeMirror</code> function can also
 
-     be a function that, when given a DOM element, inserts it into the
 
-     document somewhere. This could be used to, for example, replace a
 
-     textarea with a real editor:</p>
 
-     <pre>var myCodeMirror = CodeMirror(function(elt) {
 
-   myTextArea.parentNode.replaceChild(elt, myTextArea);
 
- }, {value: myTextArea.value});</pre>
 
-     <p>However, for this use case, which is a common way to use
 
-     CodeMirror, the library provides a much more powerful
 
-     shortcut:</p>
 
-     <pre>var myCodeMirror = CodeMirror.fromTextArea(myTextArea);</pre>
 
-     <p>This will, among other things, ensure that the textarea's value
 
-     is updated when the form (if it is part of a form) is submitted.
 
-     See the <a href="#fromTextArea">API reference</a> for a full
 
-     description of this method.</p>
 
-     <h2 id="config">Configuration</h2>
 
-     <p>Both the <code>CodeMirror</code> function and
 
-     its <code>fromTextArea</code> method take as second (optional)
 
-     argument an object containing configuration options. Any option
 
-     not supplied like this will be taken
 
-     from <code>CodeMirror.defaults</code>, an object containing the
 
-     default options. You can update this object to change the defaults
 
-     on your page.</p>
 
-     <p>Options are not checked in any way, so setting bogus option
 
-     values is bound to lead to odd errors.</p>
 
-     <p><em>Note:</em> CodeMirror
 
-     2 <a href="internals.html#summary">does not support</a>
 
-     line-wrapping. I would have very much liked to support it, but it
 
-     combines extremely poorly with the way the editor is
 
-     implemented.</p>
 
-     <p>These are the supported options:</p>
 
-     <dl>
 
-       <dt id="option_value"><code>value (string)</code></dt>
 
-       <dd>The starting value of the editor.</dd>
 
-       <dt id="option_mode"><code>mode (string or object)</code></dt>
 
-       <dd>The mode to use. When not given, this will default to the
 
-       first mode that was loaded. It may be a string, which either
 
-       simply names the mode or is
 
-       a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type
 
-       associated with the mode. Alternatively, it may be an object
 
-       containing configuration options for the mode, with
 
-       a <code>name</code> property that names the mode (for
 
-       example <code>{name: "javascript", json: true}</code>). The demo
 
-       pages for each mode contain information about what configuration
 
-       parameters the mode supports. You can ask CodeMirror which modes
 
-       and MIME types are loaded with
 
-       the <code>CodeMirror.listModes</code>
 
-       and <code>CodeMirror.listMIMEs</code> functions.</dd>
 
-       <dt id="option_theme"><code>theme (string)</code></dt>
 
-       <dd>The theme to style the editor with. You must make sure the
 
-       CSS file defining the corresponding <code>.cm-s-[name]</code>
 
-       styles is loaded (see
 
-       the <a href="theme/"><code>theme</code></a> directory in the
 
-       distribution).</dd>
 
-       <dt id="option_indentUnit"><code>indentUnit (integer)</code></dt>
 
-       <dd>How many spaces a block (whatever that means in the edited
 
-       language) should be indented. The default is 2.</dd>
 
-       <dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt>
 
-       <dd>Whether, when indenting, the first N*8 spaces should be
 
-       replaced by N tabs. Default is false.</dd>
 
-       <dt id="option_tabMode"><code>tabMode (string)</code></dt>
 
-       <dd>Determines what happens when the user presses the tab key.
 
-       Must be one of the following:
 
-         <dl>
 
-           <dt><code>"classic" (the default)</code></dt>
 
-           <dd>When nothing is selected, insert a tab. Otherwise,
 
-           behave like the <code>"shift"</code> mode. (When shift is
 
-           held, this behaves like the <code>"indent"</code> mode.)</dd>
 
-           <dt><code>"shift"</code></dt>
 
-           <dd>Indent all selected lines by
 
-           one <a href="#option_indentUnit"><code>indentUnit</code></a>.
 
-           If shift was held while pressing tab, un-indent all selected
 
-           lines one unit.</dd>
 
-           <dt><code>"indent"</code></dt>
 
-           <dd>Indent the line the 'correctly', based on its syntactic
 
-           context. Only works if the
 
-           mode <a href="#indent">supports</a> it.</dd>
 
-           <dt><code>"default"</code></dt>
 
-           <dd>Do not capture tab presses, let the browser apply its
 
-           default behaviour (which usually means it skips to the next
 
-           control).</dd>
 
-         </dl></dd>
 
-       <dt id="option_enterMode"><code>enterMode (string)</code></dt>
 
-       <dd>Determines whether and how new lines are indented when the
 
-       enter key is pressed. The following modes are supported:
 
-         <dl>
 
-           <dt><code>"indent" (the default)</code></dt>
 
-           <dd>Use the mode's indentation rules to give the new line
 
-           the correct indentation.</dd>
 
-           <dt><code>"keep"</code></dt>
 
-           <dd>Indent the line the same as the previous line.</dd>
 
-           <dt><code>"flat"</code></dt>
 
-           <dd>Do not indent the new line.</dd>
 
-         </dl></dd>
 
-       <dt id="option_electricChars"><code>electricChars (boolean)</code></dt>
 
-       <dd>Configures whether the editor should re-indent the current
 
-       line when a character is typed that might change its proper
 
-       indentation (only works if the mode supports indentation).
 
-       Default is true.</dd>
 
-       <dt id="option_lineNumbers"><code>lineNumbers (boolean)</code></dt>
 
-       <dd>Whether to show line numbers to the left of the editor.</dd>
 
-       <dt id="option_firstLineNumber"><code>firstLineNumber (integer)</code></dt>
 
-       <dd>At which number to start counting lines. Default is 1.</dd>
 
-       <dt id="option_gutter"><code>gutter (boolean)</code></dt>
 
-       <dd>Can be used to force a 'gutter' (empty space on the left of
 
-       the editor) to be shown even when no line numbers are active.
 
-       This is useful for setting <a href="#setMarker">markers</a>.</dd>
 
-       <dt id="option_readOnly"><code>readOnly (boolean)</code></dt>
 
-       <dd>This disables editing of the editor content by the user.
 
-       (Changes through API functions will still be possible.) If you
 
-       also want to disable the cursor, use <code>"nocursor"</code> as
 
-       a value for this option, instead of <code>true</code>.</dd>
 
-       <dt id="option_onChange"><code>onChange (function)</code></dt>
 
-       <dd>When given, this function will be called every time the
 
-       content of the editor is changed. It will be given the editor
 
-       instance as only argument.</dd>
 
-       <dt id="option_onCursorActivity"><code>onCursorActivity (function)</code></dt>
 
-       <dd>Like <code>onChange</code>, but will also be called when the
 
-       cursor moves without any changes being made.</dd>
 
-       <dt id="option_onGutterClick"><code>onGutterClick (function)</code></dt>
 
-       <dd>When given, will be called whenever the editor gutter (the
 
-       line-number area) is clicked. Will be given the editor instance
 
-       as first argument, and the (zero-based) number of the line that
 
-       was clicked as second argument.</dd>
 
-       <dt id="option_onFocus"><code>onFocus, onBlur (function)</code></dt>
 
-       <dd>The given functions will be called whenever the editor is
 
-       focused or unfocused.</dd>
 
-       <dt id="option_onScroll"><code>onScroll (function)</code></dt>
 
-       <dd>When given, will be called whenever the editor is
 
-       scrolled.</dd>
 
-       <dt id="option_onHighlightComplete"><code>onHighlightComplete (function)</code></dt>
 
-       <dd>Whenever the editor's content has been fully highlighted,
 
-       this function (if given) will be called. It'll be given a single
 
-       argument, the editor instance.</dd>
 
-       <dt id="option_matchBrackets"><code>matchBrackets (boolean)</code></dt>
 
-       <dd>Determines whether brackets are matched whenever the cursor
 
-       is moved next to a bracket.</dd>
 
-       <dt id="option_workTime"><code>workTime, workDelay (number)</code></dt>
 
-       <dd>Highlighting is done by a pseudo background-thread that will
 
-       work for <code>workTime</code> milliseconds, and then use
 
-       timeout to sleep for <code>workDelay</code> milliseconds. The
 
-       defaults are 200 and 300, you can change these options to make
 
-       the highlighting more or less aggressive.</dd>
 
-       <dt id="option_undoDepth"><code>undoDepth (integer)</code></dt>
 
-       <dd>The maximum number of undo levels that the editor stores.
 
-       Defaults to 40.</dd>
 
-       <dt id="option_tabindex"><code>tabindex (integer)</code></dt>
 
-       <dd>The <a href="http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex">tab
 
-       index</a> to assign to the editor. If not given, no tab index
 
-       will be assigned.</dd>
 
-       <dt id="option_document"><code>document (DOM document)</code></dt>
 
-       <dd>Use this if you want to display the editor in another DOM.
 
-       By default it will use the global <code>document</code>
 
-       object.</dd>
 
-       <dt id="option_onKeyEvent"><code>onKeyEvent (function)</code></dt>
 
-       <dd>This provides a rather low-level hook into CodeMirror's key
 
-       handling. If provided, this function will be called on
 
-       every <code>keydown</code>, <code>keyup</code>,
 
-       and <code>keypress</code> event that CodeMirror captures. It
 
-       will be passed two arguments, the editor instance and the key
 
-       event. This key event is pretty much the raw key event, except
 
-       that a <code>stop()</code> method is always added to it. You
 
-       could feed it to, for example, <code>jQuery.Event</code> to
 
-       further normalize it.<br>This function can inspect the key
 
-       event, and handle it if it wants to. It may return true to tell
 
-       CodeMirror to ignore the event. Be wary that, on some browsers,
 
-       stopping a <code>keydown</code> does not stop
 
-       the <code>keypress</code> from firing, whereas on others it
 
-       does. If you respond to an event, you should probably inspect
 
-       its <code>type</code> property and only do something when it
 
-       is <code>keydown</code> (or <code>keypress</code> for actions
 
-       that need character data).</dd>
 
-     </dl>
 
-     <h2 id="styling">Customized Styling</h2>
 
-     <p>Up to a certain extent, CodeMirror's look can be changed by
 
-     modifying style sheet files. The style sheets supplied by modes
 
-     simply provide the colors for that mode, and can be adapted in a
 
-     very straightforward way. To style the editor itself, it is
 
-     possible to alter or override the styles defined
 
-     in <a href="lib/codemirror.css"><code>codemirror.css</code></a>.</p>
 
-     <p>Some care must be taken there, since a lot of the rules in this
 
-     file are necessary to have CodeMirror function properly. Adjusting
 
-     colors should be safe, of course, and with some care a lot of
 
-     other things can be changed as well. The CSS classes defined in
 
-     this file serve the following roles:</p>
 
-     <dl>
 
-       <dt id="class_CodeMirror"><code>CodeMirror</code></dt>
 
-       <dd>The outer element of the editor. This should be used for
 
-       borders and positioning. Can also be used to set styles that
 
-       should hold for everything inside the editor (such as font
 
-       and font size), or to set a background.</dd>
 
-       <dt id="class_CodeMirror_scroll"><code>CodeMirror-scroll</code></dt>
 
-       <dd>This determines whether the editor scrolls (<code>overflow:
 
-       auto</code> + fixed height). By default, it does. Giving
 
-       this <code>height: auto; overflow: visible;</code> will cause
 
-       the editor to resize to fit its content.</dd>
 
-       <dt id="class_CodeMirror_focused"><code>CodeMirror-focused</code></dt>
 
-       <dd>Whenever the editor is focused, the top element gets this
 
-       class. This is used to hide the cursor and give the selection a
 
-       different color when the editor is not focused.</dd>
 
-       <dt id="class_CodeMirror_gutter"><code>CodeMirror-gutter</code></dt>
 
-       <dd>Use this for giving a background or a border to the editor
 
-       gutter. Don't set any padding here,
 
-       use <code>CodeMirror-gutter-text</code> for that. By default,
 
-       the gutter is 'fluid', meaning it will adjust its width to the
 
-       maximum line number or line marker width. You can also set a
 
-       fixed width if you want.</dd>
 
-       <dt id="class_CodeMirror_gutter_text"><code>CodeMirror-gutter-text</code></dt>
 
-       <dd>Used to style the actual line numbers. For the numbers to
 
-       line up, you must make sure that the font in the gutter is the
 
-       same as the one in the rest of the editor, so you should
 
-       probably only set font style and size in
 
-       the <code>CodeMirror</code> class.</dd>
 
-       <dt id="class_CodeMirror_lines"><code>CodeMirror-lines</code></dt>
 
-       <dd>The visible lines. If this has vertical
 
-       padding, <code>CodeMirror-gutter</code> should have the same
 
-       padding.</dd>
 
-       <dt id="class_CodeMirror_cursor"><code>CodeMirror-cursor</code></dt>
 
-       <dd>The cursor is a block element that is absolutely positioned.
 
-       You can make it look whichever way you want.</dd>
 
-       <dt id="class_CodeMirror_selected"><code>CodeMirror-selected</code></dt>
 
-       <dd>The selection is represented by <code>span</code> elements
 
-       with this class.</dd>
 
-       <dt id="class_CodeMirror_matchingbracket"><code>CodeMirror-matchingbracket</code>,
 
-         <code>CodeMirror-nonmatchingbracket</code></dt>
 
-       <dd>These are used to style matched (or unmatched) brackets.</dd>
 
-     </dl>
 
-     <p>The actual lines, as well as the cursor, are represented
 
-     by <code>pre</code> elements. By default no text styling (such as
 
-     bold) that might change line height is applied. If you do want
 
-     such effects, you'll have to give <code>CodeMirror pre</code> a
 
-     fixed height. Also, you must still take care that character width
 
-     is constant.</p>
 
-     <p>If your page's style sheets do funky things to
 
-     all <code>div</code> or <code>pre</code> elements (you probably
 
-     shouldn't do that), you'll have to define rules to cancel these
 
-     effects out again for elements under the <code>CodeMirror</code>
 
-     class.</p>
 
-     <h2 id="api">Programming API</h2>
 
-     <p>A lot of CodeMirror features are only available through its API.
 
-     This has the disadvantage that you need to do work to enable them,
 
-     and the advantage that CodeMirror will fit seamlessly into your
 
-     application.</p>
 
-     <p>Whenever points in the document are represented, the API uses
 
-     objects with <code>line</code> and <code>ch</code> properties.
 
-     Both are zero-based. CodeMirror makes sure to 'clip' any positions
 
-     passed by client code so that they fit inside the document, so you
 
-     shouldn't worry too much about sanitizing your coordinates. If you
 
-     give <code>ch</code> a value of <code>null</code>, or don't
 
-     specify it, it will be replaced with the length of the specified
 
-     line.</p>
 
-     <dl>
 
-       <dt id="getValue"><code>getValue() → string</code></dt>
 
-       <dd>Get the current editor content.</dd>
 
-       <dt id="setValue"><code>setValue(string)</code></dt>
 
-       <dd>Set the editor content.</dd>
 
-       <dt id="getSelection"><code>getSelection() → string</code></dt>
 
-       <dd>Get the currently selected code.</dd>
 
-       <dt id="replaceSelection"><code>replaceSelection(string)</code></dt>
 
-       <dd>Replace the selection with the given string.</dd>
 
-       <dt id="focus"><code>focus()</code></dt>
 
-       <dd>Give the editor focus.</dd>
 
-       <dt id="setOption"><code>setOption(option, value)</code></dt>
 
-       <dd>Change the configuration of the editor. <code>option</code>
 
-       should the name of an <a href="#config">option</a>,
 
-       and <code>value</code> should be a valid value for that
 
-       option.</dd>
 
-       <dt id="getOption"><code>getOption(option) → value</code></dt>
 
-       <dd>Retrieves the current value of the given option for this
 
-       editor instance.</dd>
 
-       <dt id="cursorCoords"><code>cursorCoords(start) → object</code></dt>
 
-       <dd>Returns an <code>{x, y, yBot}</code> object containing the
 
-       coordinates of the cursor relative to the top-left corner of the
 
-       page. <code>yBot</code> is the coordinate of the bottom of the
 
-       cursor. <code>start</code> is a boolean indicating whether you
 
-       want the start or the end of the selection.</dd>
 
-       <dt id="charCoords"><code>charCoords(pos) → object</code></dt>
 
-       <dd>Like <code>cursorCoords</code>, but returns the position of
 
-       an arbitrary characters. <code>pos</code> should be
 
-       a <code>{line, ch}</code> object.</dd>
 
-       <dt id="coordsChar"><code>coordsChar(object) → pos</code></dt>
 
-       <dd>Given an <code>{x, y}</code> object (in page coordinates),
 
-       returns the <code>{line, ch}</code> position that corresponds to
 
-       it.</dd>
 
-       <dt id="undo"><code>undo()</code></dt>
 
-       <dd>Undo one edit (if any undo events are stored).</dd>
 
-       <dt id="redo"><code>redo()</code></dt>
 
-       <dd>Redo one undone edit.</dd>
 
-       <dt id="historySize"><code>historySize() → object</code></dt>
 
-       <dd>Returns an object with <code>{undo, redo}</code> properties,
 
-       both of which hold integers, indicating the amount of stored
 
-       undo and redo operations.</dd>
 
-       <dt id="indentLine"><code>indentLine(line)</code></dt>
 
-       <dd>Reset the given line's indentation to the indentation
 
-       prescribed by the mode.</dd>
 
-       <dt id="getSearchCursor"><code>getSearchCursor(query, start, caseFold) → cursor</code></dt>
 
-       <dd>Used to implement search/replace
 
-       functionality. <code>query</code> can be a regular expression or
 
-       a string (only strings will match across lines—if they contain
 
-       newlines). <code>start</code> provides the starting position of
 
-       the search. It can be a <code>{line, ch}</code> object, or can
 
-       be left off to default to the start of the
 
-       document. <code>caseFold</code> is only relevant when matching a
 
-       string. It will cause the search to be case-insensitive. A
 
-       search cursor has the following methods:
 
-         <dl>
 
-           <dt><code>findNext(), findPrevious() → boolean</code></dt>
 
-           <dd>Search forward or backward from the current position.
 
-           The return value indicates whether a match was found. If
 
-           matching a regular expression, the return value will be the
 
-           array returned by the <code>match</code> method, in case you
 
-           want to extract matched groups.</dd>
 
-           <dt><code>from(), to() → object</code></dt>
 
-           <dd>These are only valid when the last call
 
-           to <code>findNext</code> or <code>findPrevious</code> did
 
-           not return false. They will return <code>{line, ch}</code>
 
-           objects pointing at the start and end of the match.</dd>
 
-           <dt><code>replace(text)</code></dt>
 
-           <dd>Replaces the currently found match with the given text
 
-           and adjusts the cursor position to reflect the
 
-           replacement.</dd>
 
-         </dl></dd>
 
-       <dt id="getTokenAt"><code>getTokenAt(pos) → object</code></dt>
 
-       <dd>Retrieves information about the token the current mode found
 
-       at the given position (a <code>{line, ch}</code> object). The
 
-       returned object has the following properties:
 
-       <dl>
 
-         <dt><code>start</code></dt><dd>The character (on the given line) at which the token starts.</dd>
 
-         <dt><code>end</code></dt><dd>The character at which the token ends.</dd>
 
-         <dt><code>string</code></dt><dd>The token's string.</dd>
 
-         <dt><code>className</code></dt><dd>The class the mode assigned
 
-         to the token. (Can be null when no class was assigned.)</dd>
 
-         <dt><code>state</code></dt><dd>The mode's state at the end of this token.</dd>
 
-       </dl></dd>
 
-       <dt id="markText"><code>markText(from, to, className) → function</code></dt>
 
-       <dd>Can be used to mark a range of text with a specific CSS
 
-       class name. <code>from</code> and <code>to</code> should
 
-       be <code>{line, ch}</code> objects. The method will return a
 
-       function that can be called to remove the marking.</dd>
 
-       <dt id="setMarker"><code>setMarker(line, text, className) → lineHandle</code></dt>
 
-       <dd>Add a gutter marker for the given line. Gutter markers are
 
-       shown in the line-number area (instead of the number for this
 
-       line). Both <code>text</code> and <code>className</code> are
 
-       optional. Setting <code>text</code> to a Unicode character like
 
-       ● tends to give a nice effect. To put a picture in the gutter,
 
-       set <code>text</code> to a space and <code>className</code> to
 
-       something that sets a background image. If you
 
-       specify <code>text</code>, the given text (which may contain
 
-       HTML) will, by default, replace the line number for that line.
 
-       If this is not what you want, you can include the
 
-       string <code>%N%</code> in the text, which will be replaced by
 
-       the line number.</dd>
 
-       <dt id="clearMarker"><code>clearMarker(line)</code></dt>
 
-       <dd>Clears a marker created
 
-       with <code>setMarker</code>. <code>line</code> can be either a
 
-       number or a handle returned by <code>setMarker</code> (since a
 
-       number may now refer to a different line if something was added
 
-       or deleted).</dd>
 
-       <dt id="setLineClass"><code>setLineClass(line, className) → lineHandle</code></dt>
 
-       <dd>Set a CSS class name for the given line. <code>line</code>
 
-       can be a number or a line handle (as returned
 
-       by <code>setMarker</code> or this function).
 
-       Pass <code>null</code> to clear the class for a line.</dd>
 
-       <dt id="lineInfo"><code>lineInfo(line) → object</code></dt>
 
-       <dd>Returns the line number, text content, and marker status of
 
-       the given line, which can be either a number or a handle
 
-       returned by <code>setMarker</code>. The returned object has the
 
-       structure <code>{line, text, markerText, markerClass}</code>.</dd>
 
-       <dt id="addWidget"><code>addWidget(pos, node, scrollIntoView)</code></dt>
 
-       <dd>Puts <code>node</code>, which should be an absolutely
 
-       positioned DOM node, into the editor, positioned right below the
 
-       given <code>{line, ch}</code> position.
 
-       When <code>scrollIntoView</code> is true, the editor will ensure
 
-       that the entire node is visible (if possible). To remove the
 
-       widget again, simply use DOM methods (move it somewhere else, or
 
-       call <code>removeChild</code> on its parent).</dd>
 
-       <dt id="matchBrackets"><code>matchBrackets()</code></dt>
 
-       <dd>Force matching-bracket-highlighting to happen.</dd>
 
-       <dt id="lineCount"><code>lineCount() → number</code></dt>
 
-       <dd>Get the number of lines in the editor.</dd>
 
-       <dt id="getCursor"><code>getCursor(start) → object</code></dt>
 
-       <dd><code>start</code> is a boolean indicating whether the start
 
-       or the end of the selection must be retrieved. If it is not
 
-       given, the current cursor pos, i.e. the side of the selection
 
-       that would move if you pressed an arrow key, is chosen.
 
-       A <code>{line, ch}</code> object will be returned.</dd>
 
-       <dt id="somethingSelected"><code>somethingSelected() → boolean</code></dt>
 
-       <dd>Return true if any text is selected.</dd>
 
-       <dt id="setCursor"><code>setCursor(pos)</code></dt>
 
-       <dd>Set the cursor position. You can either pass a
 
-       single <code>{line, ch}</code> object, or the line and the
 
-       character as two separate parameters.</dd>
 
-       <dt id="setSelection"><code>setSelection(start, end)</code></dt>
 
-       <dd>Set the selection range. <code>start</code>
 
-       and <code>end</code> should be <code>{line, ch}</code> objects.</dd>
 
-       <dt id="getLine"><code>getLine(n) → string</code></dt>
 
-       <dd>Get the content of line <code>n</code>.</dd>
 
-       <dt id="setLine"><code>setLine(n, text)</code></dt>
 
-       <dd>Set the content of line <code>n</code>.</dd>
 
-       <dt id="removeLine"><code>removeLine(n)</code></dt>
 
-       <dd>Remove the given line from the document.</dd>
 
-       <dt id="getRange"><code>getRange(from, to) → string</code></td>
 
-       <dd>Get the text between the given points in the editor, which
 
-       should be <code>{line, ch}</code> objects.</dd>
 
-       <dt id="replaceRange"><code>replaceRange(string, from, to)</code></dt>
 
-       <dd>Replace the part of the document between <code>from</code>
 
-       and <code>to</code> with the given string. <code>from</code>
 
-       and <code>to</code> must be <code>{line, ch}</code>
 
-       objects. <code>to</code> can be left off to simply insert the
 
-       string at position <code>from</code>.</dd>
 
-     </dl>
 
-     <p>The following are more low-level methods:</p>
 
-     <dl>
 
-       <dt id="operation"><code>operation(func) → result</code></dt>
 
-       <dd>CodeMirror internally buffers changes and only updates its
 
-       DOM structure after it has finished performing some operation.
 
-       If you need to perform a lot of operations on a CodeMirror
 
-       instance, you can call this method with a function argument. It
 
-       will call the function, buffering up all changes, and only doing
 
-       the expensive update after the function returns. This can be a
 
-       lot faster. The return value from this method will be the return
 
-       value of your function.</dd>
 
-       <dt id="refresh"><code>refresh()</code></dt>
 
-       <dd>If your code does something to change the size of the editor
 
-       element (window resizes are already listened for), or unhides
 
-       it, you should probably follow up by calling this method to
 
-       ensure CodeMirror is still looking as intended.</dd>
 
-       <dt id="getInputField"><code>getInputField() → textarea</code></dt>
 
-       <dd>Returns the hiden textarea used to read input.</dd>
 
-       <dt id="getWrapperElement"><code>getWrapperElement() → node</code></dt>
 
-       <dd>Returns the DOM node that represents the editor. Remove this
 
-       from your tree to delete an editor instance.</dd>
 
-       <dt id="getScrollerElement"><code>getScrollerElement() → node</code></dt>
 
-       <dd>Returns the DOM node that is responsible for the sizing and
 
-       the scrolling of the editor. You can change
 
-       the <code>height</code> and <code>width</code> styles of this
 
-       element to resize an editor. (You might have to call
 
-       the <a href="#refresh"><code>refresh</code></a> method
 
-       afterwards.)</dd>
 
-       <dt id="getStateAfter"><code>getStateAfter(line) → state</code></dt>
 
-       <dd>Returns the mode's parser state, if any, at the end of the
 
-       given line number. If no line number is given, the state at the
 
-       end of the document is returned. This can be useful for storing
 
-       parsing errors in the state, or getting other kinds of
 
-       contextual information for a line.</dd>
 
-     </dl>
 
-     <p id="fromTextArea">Finally, the <code>CodeMirror</code> object
 
-     itself has a method <code>fromTextArea</code>. This takes a
 
-     textarea DOM node as first argument and an optional configuration
 
-     object as second. It will replace the textarea with a CodeMirror
 
-     instance, and wire up the form of that textarea (if any) to make
 
-     sure the editor contents are put into the textarea when the form
 
-     is submitted. A CodeMirror instance created this way has two
 
-     additional methods:</p>
 
-     <dl>
 
-       <dt id="save"><code>save()</code></dt>
 
-       <dd>Copy the content of the editor into the textarea.</dd>
 
-       <dt id="toTextArea"><code>toTextArea()</code></dt>
 
-       <dd>Remove the editor, and restore the original textarea (with
 
-       the editor's current content).</dd>
 
-     </dl>
 
-     <p id="defineExtension">If you want define extra methods in terms
 
-     of the CodeMirror API, is it possible to
 
-     use <code>CodeMirror.defineExtension(name, value)</code>. This
 
-     will cause the given value (usually a method) to be added to all
 
-     CodeMirror instances created from then on.</p>
 
-     <h2 id="modeapi">Writing CodeMirror Modes</h2>
 
-     <p>Modes typically consist of a JavaScript file and a CSS file.
 
-     The CSS file (see, for
 
-     example <a href="mode/javascript/javascript.css"><code>javascript.css</code></a>)
 
-     defines the classes that will be used to style the syntactic
 
-     elements of the code, and the script contains the logic to
 
-     actually assign these classes to the right pieces of text.</p>
 
-     <p>You'll usually want to use some kind of prefix for your CSS
 
-     classes, so that they are unlikely to clash with other classes,
 
-     both those used by other modes and those defined by the page in
 
-     which CodeMirror is embedded.</p>
 
-     <p id="defineMode">The mode script should
 
-     call <code>CodeMirror.defineMode</code> to register itself with
 
-     CodeMirror. This function takes two arguments. The first should be
 
-     the name of the mode, for which you should use a lowercase string,
 
-     preferably one that is also the name of the files that define the
 
-     mode (i.e. <code>"xml"</code> is defined <code>xml.js</code>). The
 
-     second argument should be a function that, given a CodeMirror
 
-     configuration object (the thing passed to
 
-     the <code>CodeMirror</code> function) and a mode configuration
 
-     object (as in the <a href="#option_mode"><code>mode</code></a>
 
-     option), returns a mode object.</p>
 
-     <p>Typically, you should use this second argument
 
-     to <code>defineMode</code> as your module scope function (modes
 
-     should not leak anything into the global scope!), i.e. write your
 
-     whole mode inside this function.</p>
 
-     <p>The main responsibility of a mode script is <em>parsing</em>
 
-     the content of the editor. Depending on the language and the
 
-     amount of functionality desired, this can be done in really easy
 
-     or extremely complicated ways. Some parsers can be stateless,
 
-     meaning that they look at one element (<em>token</em>) of the code
 
-     at a time, with no memory of what came before. Most, however, will
 
-     need to remember something. This is done by using a <em>state
 
-     object</em>, which is an object that can be mutated every time a
 
-     new token is read.</p>
 
-     <p id="startState">Modes that use a state must define
 
-     a <code>startState</code> method on their mode object. This is a
 
-     function of no arguments that produces a state object to be used
 
-     at the start of a document.</p>
 
-     <p id="token">The most important part of a mode object is
 
-     its <code>token(stream, state)</code> method. All modes must
 
-     define this method. It should read one token from the stream it is
 
-     given as an argument, optionally update its state, and return a
 
-     style string, or <code>null</code> for tokens that do not have to
 
-     be styled. For your styles, you can either use the 'standard' ones
 
-     defined in the themes (without the <code>cm-</code> prefix), or
 
-     define your own (as the <a href="../mode/diff/index.html">diff</a>
 
-     mode does) and have people include a custom theme for your
 
-     mode.<p>
 
-     <p id="StringStream">The stream object encapsulates a line of code
 
-     (tokens may never span lines) and our current position in that
 
-     line. It has the following API:</p>
 
-     <dl>
 
-       <dt><code>eol() → boolean</code></dt>
 
-       <dd>Returns true only if the stream is at the end of the
 
-       line.</dd>
 
-       <dt><code>sol() → boolean</code></dt>
 
-       <dd>Returns true only if the stream is at the start of the
 
-       line.</dd>
 
-       <dt><code>peek() → character</code></dt>
 
-       <dd>Returns the next character in the stream without advancing
 
-       it. Will return <code>undefined</code> at the end of the
 
-       line.</dd>
 
-       <dt><code>next() → character</code></dt>
 
-       <dd>Returns the next character in the stream and advances it.
 
-       Also returns <code>undefined</code> when no more characters are
 
-       available.</dd>
 
-       <dt><code>eat(match) → character</code></dt>
 
-       <dd><code>match</code> can be a character, a regular expression,
 
-       or a function that takes a character and returns a boolean. If
 
-       the next character in the stream 'matches' the given argument,
 
-       it is consumed and returned. Otherwise, <code>undefined</code>
 
-       is returned.</dd>
 
-       <dt><code>eatWhile(match) → boolean</code></dt>
 
-       <dd>Repeatedly calls <code>eat</code> with the given argument,
 
-       until it fails. Returns true if any characters were eaten.</dd>
 
-       <dt><code>eatSpace() → boolean</code></dt>
 
-       <dd>Shortcut for <code>eatWhile</code> when matching
 
-       white-space.</dd>
 
-       <dt><code>skipToEnd()</code></dt>
 
-       <dd>Moves the position to the end of the line.</dd>
 
-       <dt><code>skipTo(ch) → boolean</code></dt>
 
-       <dd>Skips to the next occurrence of the given character, if
 
-       found. Returns true if the character was found.</dd>
 
-       <dt><code>match(pattern, consume, caseFold) → boolean</code></dt>
 
-       <dd>Act like a
 
-       multi-character <code>eat</code>—if <code>consume</code> is true
 
-       or not given—or a look-ahead that doesn't update the stream
 
-       position—if it is false. <code>pattern</code> can be either a
 
-       string or a regular expression starting with <code>^</code>.
 
-       When it is a string, <code>caseFold</code> can be set to true to
 
-       make the match case-insensitive. When successfully matching a
 
-       regular expression, the returned value will be the array
 
-       returned by <code>match</code>, in case you need to extract
 
-       matched groups.</dd>
 
-       <dt><code>backUp(n)</code></dt>
 
-       <dd>Backs up the stream <code>n</code> characters. Backing it up
 
-       further than the start of the current token will cause things to
 
-       break, so be careful.</dd>
 
-       <dt><code>column() → integer</code></dt>
 
-       <dd>Returns the column (taking into account tabs) at which the
 
-       current token starts. Can be used to find out whether a token
 
-       starts a new line.</dd>
 
-       <dt><code>indentation() → integer</code></dt>
 
-       <dd>Tells you how far the current line has been indented, in
 
-       spaces. Corrects for tab characters.</dd>
 
-       <dt><code>current() → string</code></dt>
 
-       <dd>Get the string between the start of the current token and
 
-       the current stream position.</dd>
 
-     </dl>
 
-     <p id="blankLine">By default, blank lines are simply skipped when
 
-     tokenizing a document. For languages that have significant blank
 
-     lines, you can define a <code>blankLine(state)</code> method on
 
-     your mode that will get called whenever a blank line is passed
 
-     over, so that it can update the parser state.</p>
 
-     <p id="copyState">Because state object are mutated, and CodeMirror
 
-     needs to keep valid versions of a state around so that it can
 
-     restart a parse at any line, copies must be made of state objects.
 
-     The default algorithm used is that a new state object is created,
 
-     which gets all the properties of the old object. Any properties
 
-     which hold arrays get a copy of these arrays (since arrays tend to
 
-     be used as mutable stacks). When this is not correct, for example
 
-     because a mode mutates non-array properties of its state object, a
 
-     mode object should define a <code>copyState</code> method,
 
-     which is given a state and should return a safe copy of that
 
-     state.</p>
 
-     <p id="compareStates">By default, CodeMirror will stop re-parsing
 
-     a document as soon as it encounters a few lines that were
 
-     highlighted the same in the old parse as in the new one. It is
 
-     possible to provide an explicit way to test whether a state is
 
-     equivalent to another one, which CodeMirror will use (instead of
 
-     the unchanged-lines heuristic) to decide when to stop
 
-     highlighting. You do this by providing
 
-     a <code>compareStates</code> method on your mode object, which
 
-     takes two state arguments and returns a boolean indicating whether
 
-     they are equivalent. See the XML mode, which uses this to provide
 
-     reliable highlighting of bad closing tags, as an example.</p>
 
-     <p id="indent">If you want your mode to provide smart indentation
 
-     (see <a href="#option_enterMode"><code>entermode</code></a>
 
-     and <a href="#option_tabMode"><code>tabMode</code></a> when they
 
-     have a value of <code>"indent"</code>), you must define
 
-     an <code>indent(state, textAfter)</code> method on your mode
 
-     object.</p>
 
-     <p>The indentation method should inspect the given state object,
 
-     and optionally the <code>textAfter</code> string, which contains
 
-     the text on the line that is being indented, and return an
 
-     integer, the amount of spaces to indent. It should usually take
 
-     the <a href="#option_indentUnit"><code>indentUnit</code></a>
 
-     option into account.</p>
 
-     <p id="electricChars">Finally, a mode may define
 
-     an <code>electricChars</code> property, which should hold a string
 
-     containing all the characters that should trigger the behaviour
 
-     described for
 
-     the <a href="#option_electricChars"><code>electricChars</code></a>
 
-     option.</p>
 
-     <p>So, to summarize, a mode <em>must</em> provide
 
-     a <code>token</code> method, and it <em>may</em>
 
-     provide <code>startState</code>, <code>copyState</code>,
 
-     and <code>indent</code> methods. For an example of a trivial mode,
 
-     see the <a href="mode/diff/diff.js">diff mode</a>, for a more
 
-     involved example, see
 
-     the <a href="mode/javascript/javascript.js">JavaScript
 
-     mode</a>.</p>
 
-     <p>Sometimes, it is useful for modes to <em>nest</em>—to have one
 
-     mode delegate work to another mode. An example of this kind of
 
-     mode is the <a href="mode/htmlmixed/htmlmixed.js">mixed-mode HTML
 
-     mode</a>. To implement such nesting, it is usually necessary to
 
-     create mode objects and copy states yourself. To create a mode
 
-     object, there are <code>CodeMirror.getMode(options,
 
-     parserConfig)</code>, where the first argument is a configuration
 
-     object as passed to the mode constructor function, and the second
 
-     argument is a mode specification as in
 
-     the <a href="#option_mode"><code>mode</code></a> option. To copy a
 
-     state object, call <code>CodeMirror.copyState(mode, state)</code>,
 
-     where <code>mode</code> is the mode that created the given
 
-     state.</p>
 
-     <p>To make indentation work properly in a nested parser, it is
 
-     advisable to give the <code>startState</code> method of modes that
 
-     are intended to be nested an optional argument that provides the
 
-     base indentation for the block of code. The JavaScript and CSS
 
-     parser do this, for example, to allow JavaScript and CSS code
 
-     inside the mixed-mode HTML mode to be properly indented.</p>
 
-     <p>Finally, it is possible to associate your mode, or a certain
 
-     configuration of your mode, with
 
-     a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type. For
 
-     example, the JavaScript mode associates itself
 
-     with <code>text/javascript</code>, and its JSON variant
 
-     with <code>application/json</code>. To do this,
 
-     call <code>CodeMirror.defineMIME(mime, modeSpec)</code>,
 
-     where <code>modeSpec</code> can be a string or object specifying a
 
-     mode, as in the <a href="#option_mode"><code>mode</code></a>
 
-     option.</p>
 
- </div><div class="rightsmall blk">
 
-     <h2>Contents</h2>
 
-     <ul>
 
-       <li><a href="#overview">Overview</a></li>
 
-       <li><a href="#usage">Basic Usage</a></li>
 
-       <li><a href="#config">Configuration</a></li>
 
-       <li><a href="#styling">Customized Styling</a></li>
 
-       <li><a href="#api">Programming API</a></li>
 
-       <li><a href="#modeapi">Writing CodeMirror Modes</a></li>
 
-     </ul>
 
- </div></div>
 
- <div style="height: 2em"> </div>
 
-   </body>
 
- </html>
 
 
  |