<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtext - Web Editor Support</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="/Xtext/images/favicon.png">
	
	<link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'>
	<!-- cover flow -->
	<link href="/Xtext/css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="/css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "http://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>
  
    <header class="site-header">

  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/Xtext/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="/Xtext/news.html">News</a></li-->
            <li ><a href="/Xtext/download.html">Download</a></li>
            <li ><a href="/Xtext/documentation/index.html">Documentation</a></li>
            <li ><a href="/Xtext/community.html">Community</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="https://www.itemis.com/en/xtext/support-and-team/" target="_blank">itemis</a></li>
                <li><a href="https://typefox.io/trainings-2" target="_blank">TypeFox</a></li>
              </ul>
            </li>
            <li ><a href="http://xtend-lang.org">Xtend</a></li>
          </ul>
          <!--div class="nav pull-right">
            <li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li>
          </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->

</header>


    <div class="page-content">
  <script>
    function startSearch(event) {
        if (event.keyCode == 13) {
            var q = 'site:eclipse.org/Xtext/documentation+' + event.target.value;
            window.open('https://www.google.com/search?q=' + q, "_self");
        }
    }
  </script>
  <div class="wrapper">
  	<div id="page">  
      <div class="inner">
        <div id="maincontainer" class="container">
          <span class="edit-on-github pull-right">
            <a href="https://github.com/eclipse/xtext/edit/website-published/xtext-website/documentation/330_web_support.md">Edit on Github</a>
          </span>
          <div class="span3" style="margin-left: 0px;">
            <div class="search-bar">
              <img src="/Xtext/images/search-gray.png"/>
              <input type="search" id="google-search" onkeyup="startSearch(event);"/>
            </div>
            <ul id="nav-outline" style="margin-left: 0px;">
	<li class="nav-part">Getting Started</li>
	<li><a href="102_domainmodelwalkthrough.html">15 Minutes Tutorial</a></li>
	<li><a href="103_domainmodelnextsteps.html">15 Minutes Tutorial - Extended</a></li>
	<li><a href="104_jvmdomainmodel.html">Five simple steps to your JVM language</a></li>
		
	<li class="nav-part">Reference Documentation</li>
	<li><a href="301_grammarlanguage.html">The Grammar Language</a></li>
	<li><a href="302_configuration.html">Configuration</a></li>
	<li><a href="303_runtime_concepts.html">Language Implementation</a></li>
	<li><a href="305_xbase.html">Integration with Java</a></li>
	<li><a href="307_special_languages.html">Typical Language Configurations</a></li>
	<li><a href="308_emf_integration.html">Integration with EMF</a></li>
	<li><a href="310_eclipse_support.html">Eclipse Support</a></li>
	<!--li><a href="320_idea_support.html">IntelliJ IDEA Support</a></li-->
	<li><a href="330_web_support.html">Web Editor Support</a></li>
	<li><a href="350_continuous_integration.html">Continuous Integration</a></li>
</ul>
          </div>
          <div class="span8 doc-contents">
            <h1 id="web-integration">Web Editor Support</h1>

<p>Since version 2.9 Xtext offers an interface for integration of text editors in web applications. The text editors are implemented in JavaScript, and language-related services such as code completion are realized through HTTP requests to a server-side component.</p>

<h2 id="client">The Client</h2>

<p>Xtext supports three JavaScript text editor libraries:</p>

<ul>
  <li><a href="http://eclipse.org/orion/">Orion</a></li>
  <li><a href="http://ace.c9.io">Ace</a></li>
  <li><a href="http://codemirror.net">CodeMirror</a></li>
</ul>

<p>The set of supported language-related services depends on which editor library is chosen, as shown in the following table.</p>

<table class="table table-bordered">
  <thead>
    <tr>
      <th></th>
      <th>Orion</th>
      <th>Ace</th>
      <th>CodeMirror</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a href="#content-assist">Content assist</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="303_runtime_concepts.html#validation">Validation</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="#syntax-highlighting">Syntax highlighting</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="#semantic-highlighting">Semantic highlighting</a></td>
      <td><div class="supported"></div></td>
      <td><div class="not-supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="#mark-occurrences">Mark occurrences</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="#hover-info">Hover information</a></td>
      <td><div class="supported"></div></td>
      <td><div class="not-supported"></div></td>
      <td><div class="not-supported"></div></td>
    </tr>
    <tr>
      <td><a href="303_runtime_concepts.html#formatting">Formatting</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="303_runtime_concepts.html#code-generation">Code generator</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
    <tr>
      <td><a href="#persistence">Persistence</a></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
      <td><div class="supported"></div></td>
    </tr>
  </tbody>
</table>

<p>The JavaScript integration of Xtext uses <a href="http://requirejs.org">RequireJS</a> for managing modules and their dependencies. The main module is <code>xtext/xtext-orion</code>, <code>xtext/xtext-ace</code>, or <code>xtext/xtext-codemirror</code>, depending on which editor library is used. Examples for loading these libraries together with Xtext can be generated by the <code>WebIntegrationFragment</code> by setting the option <code>generateHtmlExample = true</code> (see <a href="302_configuration.html#generator">The Language Generator</a>). A minimal setup based on <a href="http://webjars.org">WebJars</a> is shown in the following listings.</p>

<h4 id="orion">Orion</h4>

<pre><code class="language-javascript">require.config({
    paths: {
        "text": "webjars/requirejs-text/&lt;version&gt;/text",
        "jquery": "webjars/jquery/&lt;version&gt;/jquery.min",
        "xtext/xtext-orion": "xtext/&lt;version&gt;/xtext-orion"
    }
});
require(["orion/code_edit/built-codeEdit-amd"], function() {
    require(["xtext/xtext-orion"], function(xtext) {
        xtext.createEditor();
    });
});
</code></pre>
<p>Since Orion is not available on WebJars, it has to be downloaded manually at <a href="http://download.eclipse.org/orion/">download.eclipse.org</a>.</p>

<h4 id="ace">Ace</h4>

<pre><code class="language-javascript">require.config({
    paths: {
        "jquery": "webjars/jquery/&lt;version&gt;/jquery.min",
        "ace/ext/language_tools": "webjars/ace/&lt;version&gt;/src/ext-language_tools",
        "xtext/xtext-ace": "xtext/&lt;version&gt;/xtext-ace"
    }
});
require(["webjars/ace/&lt;version&gt;/src/ace"], function() {
    require(["xtext/xtext-ace"], function(xtext) {
        xtext.createEditor();
    });
});
</code></pre>

<h4 id="codemirror">CodeMirror</h4>

<pre><code class="language-javascript">require.config({
    paths: {
        "jquery": "webjars/jquery/&lt;version&gt;/jquery.min",
        "xtext/xtext-codemirror": "xtext/&lt;version&gt;/xtext-codemirror"
    },
    packages: [{
        name: "codemirror",
        location: "webjars/codemirror/&lt;version&gt;",
        main: "lib/codemirror"
    }]
});
require(["xtext/xtext-codemirror"], function(xtext) {
    xtext.createEditor();
});
</code></pre>

<h3 id="javascript-api">JavaScript API</h3>

<h4 id="xtextcreateeditoroptions"><code>xtext.createEditor(options)</code></h4>

<p>Creates one or more editor instances and initializes Xtext services for them. The available options are described below. The return value is the created editor if exactly one was created, or an array of editors otherwise:</p>

<pre><code class="language-javascript">var editor = xtext.createEditor();
</code></pre>

<p>For Orion the editor is not returned directly, but through a <em>promise</em>:</p>

<pre><code class="language-javascript">xtext.createEditor().done(function(editorViewer) {
    ...
});
</code></pre>

<p>If the parent element for the editor is not specified through the options, this function looks for an element with <code>id="xtext-editor"</code>. If none exists, the function looks for elements with <code>class="xtext-editor"</code>.</p>

<h4 id="xtextcreateserviceseditor-options"><code>xtext.createServices(editor, options)</code></h4>

<p>Initializes Xtext services for an already created editor. Use this variant if you want full control over the editor creation.</p>

<h4 id="xtextremoveserviceseditor"><code>xtext.removeServices(editor)</code></h4>

<p>Removes all services and associated listeners from the given editor. The JavaScript-based syntax highlighting is not affected by this operation.</p>

<h3 id="options">Options</h3>

<p>Options can be specified with an object passed to the <code>createEditor</code> or <code>createServices</code> functions:</p>

<pre><code class="language-javascript">xtext.createEditor({
    resourceId: "example.statemachine",
    syntaxDefinition: "xtext/ace-mode-statemachine"
});
</code></pre>

<p>Alternatively, if <code>createEditor</code> is used, options can be set as attributes of the HTML element into which the editor is created. The attribute name is derived from the JavaScript option name by converting CamelCase to hyphen-separated and prefixing with <code>data-editor-</code>, e.g. <code>resourceId</code> becomes <code>data-editor-resource-id</code>:</p>

<pre><code class="language-html">&lt;div id="xtext-editor"
    data-editor-resource-id="example.statemachine"
    data-editor-syntax-definition="xtext/ace-mode-statemachine"&gt;&lt;/div&gt;
</code></pre>

<p>See below for a <a href="#options-reference">full list of available options</a>.</p>

<h3 id="getting-text-content">Getting the Text Content</h3>

<p>The text content is either loaded from the Xtext server or provided through JavaScript. In either case, the Xtext server needs to identify the language you are using in order to process any requests. A language is usually identified using a file extension or a content type. The file extension can be specified with the <code>xtextLang</code> option, while the content type is given with the <code>contentType</code> option.</p>

<h4 id="loading-text-from-the-server">Loading text from the server</h4>

<p>If you specify a value for the <code>resourceId</code> option, the language may be identified from the file extension included in that id. In this case it is not necessary to provide the <code>xtextLang</code> option. Another effect of using <code>resourceId</code> is that the server will try to load the respective resource from its persistence layer. The Xtext server does not define any default persistence, so you have to customize it as described in <a href="#persistence">Persistence</a> in order to use this approach.</p>

<p>The <code>resourceId</code> string may contain whatever information you need to identify a specific text content on the server. Usually the <a href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a> syntax is used, but this is not mandatory.</p>

<h4 id="providing-text-through-javascript">Providing text through JavaScript</h4>

<p>The persistence layer of the Xtext server is totally optional, so you can use whatever means you like to fetch the content, e.g. generate it in the client or request it through your own service. If the DOM element into which the editor is created already contains some text, this text is used as initial content. Otherwise the editor is initially empty, and you can use the API of the chosen editor framework to change the content whenever you like.</p>

<p>If you would like to specify a <code>resourceId</code> without using the persistence services shipped with Xtext, you can do so by setting the option <code>loadFromServer</code> to <code>false</code>.</p>

<h3 id="operation-modes">Operation Modes</h3>

<p>The web integration of Xtext supports two operation modes, which are described in the following.</p>

<h4 id="stateful-mode">Stateful mode</h4>

<p>This mode is active when <code>sendFullText</code> is <code>false</code>, which is the default setting. In stateful mode, an update request is sent to the server whenever the text content of the editor changes. With this approach a copy of the text is kept in the session state of the server, and many Xtext-related services such as AST parsing and validation are cached together with that copy. This means that services run much faster on the server, and the message size of most requests is very small. Use this mode in order to optimize response times of service requests.</p>

<h4 id="stateless-mode">Stateless mode</h4>

<p>This mode is active when <code>sendFullText</code> is set to <code>true</code>. In this case no update request is necessary when the text content changes, but the full text content is attached to all other service requests. This means that the text has to be parsed again for each request, and the message size is proportional to the size of the text content. Use this mode only when you want to avoid server-side sessions and respective session ids stored in cookies.</p>

<h3 id="syntax-highlighting">Syntax Highlighting</h3>

<p>In contrast to <a href="#semantic-highlighting">semantic highlighting</a>, syntax highlighting can be computed purely in JavaScript without requiring a connection to the server. This is realized with the highlighting capabilities of the employed editor libraries. All three libraries offer a JavaScript API for specifying highlighting rules. The <code>WebIntegrationFragment</code> of the Xtext language generator is able to generate a highlighting specification that includes keywords and some basic tokens such as numbers and comments (see <a href="302_configuration.html#generator">The Language Generator</a>). If the highlighting generated in this way is not sufficient, you can still implement the specification yourself following the documentation of the chosen editor library.</p>

<p>The path to the highlighting specification is set with the <code>syntaxDefinition</code> option while setting up the Xtext editor. If no value is specified for that option, it is built from the <code>xtextLang</code> option in the form <code>'xtext-resources/{xtextLang}-syntax'</code> (Orion) or <code>'xtext-resources/mode-{xtextLang}'</code> (Ace). For CodeMirror syntax highlighting is configured by registering a <em>mode</em> and setting the <code>mode</code> option accordingly (default mode name: <code>'xtext/{xtextLang}'</code>).</p>

<h3 id="invoking-services">Invoking Services</h3>

<p>The <code>createEditor</code> and <code>createServices</code> functions set up listeners for editor events such that most services are invoked automatically while using the editor. However, all services can also be invoked programmatically using the <code>xtextServices</code> object that is attached to each editor instance. For example, the following code saves the resource associated with the editor when the button with the id <code>save-button</code> is clicked:</p>

<pre><code class="language-javascript">var editor = xtext.createEditor();
$("#save-button").click(function() {
    editor.xtextServices.saveResource();
});
</code></pre>

<p>The following functions are available, provided that the respective services are enabled and supported by the employed editor library. All functions return a <em>promise</em> that is eventually resolved to the requested data. Furthermore, all these functions can be supplied with an <code>options</code> parameter to override some of the options declared when the editor was built.</p>

<ul>
  <li><code>getContentAssist()</code><br />
Returns the content assist proposals in the format explained in Section <a href="#content-assist">Content Assist</a>.</li>
  <li><code>validate()</code><br />
Returns the validation result. The returned object has a property <code>issues</code>, which is an array of objects with the following properties:
    <ul>
      <li><code>description</code>: A description to be displayed to the user.</li>
      <li><code>severity</code>: one of <code>'error'</code>, <code>'warning'</code>, or <code>'info'</code></li>
      <li><code>line</code>: the line where the issue occurs (one-based)</li>
      <li><code>column</code>: the column where the issue occurs (one-based)</li>
      <li><code>offset</code>: the character offset in the document (zero-based)</li>
      <li><code>length</code>: the length of the affected text region</li>
    </ul>
  </li>
  <li><code>computeHighlighting()</code><br />
Returns the text styling data for semantic highlighting (see Section <a href="#semantic-highlighting">Semantic Highlighting</a>).</li>
  <li><code>getOccurrences()</code><br />
Returns the occurrences of the element at the current cursor position (see Section <a href="#mark-occurrences">Mark Occurrences</a>).</li>
  <li><code>getHoverInfo()</code><br />
Returns the hover information at the current cursor position (see Section <a href="#hover-info">Hover Information</a>).</li>
  <li><code>format()</code><br />
Formats the current selection (or the whole document if the selection has zero length) and returns the formatted text.</li>
  <li><code>generate()</code><br />
Returns the document generated from the associated resource. If more than one document has been generated, an object with a property <code>documents</code> is returned, which is an array of objects with the properties <code>name</code>, <code>contentType</code>, and <code>content</code>.</li>
  <li><code>loadResource()</code><br />
Loads the associated resource and returns an object with properties <code>fullText</code> and <code>dirty</code>. If the resource has been modified during the current session, the modified version is returned even if the page is reloaded.</li>
  <li><code>saveResource()</code><br />
Saves the current state of the resource.</li>
  <li><code>revertResource()</code><br />
Reverts the resource to the last saved state and returns an object with properties <code>fullText</code> and <code>dirty</code>.</li>
  <li><code>update()</code><br />
Computes the difference between the current editor content and the last version that has been committed to the server. If there is a difference, an update request is sent to refresh the server state. The return value has a single property <code>stateId</code>, which is an identifier for the new server state. All requests have to include the last obtained state identifier in order to succeed.</li>
</ul>

<h3 id="options-reference">Full List of Options</h3>

<ul>
  <li><code>baseUrl</code><br />
The path segment where the Xtext service is found (default: <code>'/'</code>). See the <code>serviceUrl</code> option.</li>
  <li><code>contentAssistCharTriggers</code><br />
Characters that invoke the content assist service when typed (Orion only).</li>
  <li><code>contentAssistExcludedStyles</code><br />
Excluded styles for character triggers (Orion only).</li>
  <li><code>contentType</code><br />
The content type included in requests to the Xtext server. If no content type is given, the file extension in the <code>resourceId</code> option is used to determine the language.</li>
  <li><code>dirtyElement</code><br />
An element into which the dirty status class is written when the editor is marked dirty; it can be either a DOM element or an id for a DOM element.</li>
  <li><code>dirtyStatusClass</code><br />
A CSS class name written into the dirtyElement when the editor is marked dirty (default: <code>'dirty'</code>).</li>
  <li><code>document</code><br />
The document; if not specified, the global document is used.</li>
  <li><code>enableContentAssistService</code><br />
Whether content assist should be enabled (default: <code>true</code>).</li>
  <li><code>enableCors</code><br />
Whether CORS should be enabled for service request (default: <code>false</code>).</li>
  <li><code>enableFormattingAction</code><br />
Whether the formatting action should be bound to the standard keystroke <kbd>Ctrl</kbd>+<kbd>⇧</kbd>+<kbd>F</kbd> (<kbd>Ctrl</kbd>+<kbd>⇧</kbd>+<kbd>S</kbd> on CodeMirror) / <kbd>⌘</kbd>+<kbd>⇧</kbd>+<kbd>F</kbd> (default: <code>false</code>).</li>
  <li><code>enableFormattingService</code><br />
Whether text formatting should be enabled (default: <code>true</code>).</li>
  <li><code>enableGeneratorService</code><br />
Whether code generation should be enabled (default: <code>true</code>). No default keystroke is bound for the generator, so it must be triggered through JavaScript code.</li>
  <li><code>enableHoverService</code><br />
Whether mouse hover information should be enabled (default: <code>true</code>).</li>
  <li><code>enableHighlightingService</code><br />
Whether semantic highlighting should be enabled (default: <code>true</code>). In contrast to <a href="#syntax-highlighting">syntax highlighting</a>, semantic highlighting is computed on the server.</li>
  <li><code>enableOccurrencesService</code><br />
Whether marking occurrences should be enabled (default: <code>true</code>).</li>
  <li><code>enableSaveAction</code><br />
Whether the save action should be bound to the standard keystroke <kbd>Ctrl</kbd>+<kbd>S</kbd> / <kbd>⌘</kbd>+<kbd>S</kbd> (default: <code>false</code>).</li>
  <li><code>enableValidationService</code><br />
Whether validation should be enabled (default: <code>true</code>).</li>
  <li><code>loadFromServer</code><br />
Whether to load the editor content from the server. The default value is <code>true</code> if the <code>resourceId</code> option is set and <code>false</code> otherwise.</li>
  <li><code>mouseHoverDelay</code><br />
The number of milliseconds to wait after a mouse hover before the information tooltip is displayed (default: 500).</li>
  <li><code>parent</code><br />
The parent element into which the editor should be created. It can be either a DOM element or an id for a DOM element (default: <code>'xtext-editor'</code>).</li>
  <li><code>parentClass</code><br />
If the <code>parent</code> option is not given, this option is used to find elements that match the given class name (default: <code>'xtext-editor'</code>).</li>
  <li><code>resourceId</code><br />
The identifier of the resource displayed in the text editor. This option is sent to the server to communicate required information on the respective resource.</li>
  <li><code>selectionUpdateDelay</code><br />
The number of milliseconds to wait after a selection change before Xtext services are invoked (default: 550).</li>
  <li><code>sendFullText</code><br />
Whether the full text shall be sent to the server with each request (default: <code>false</code>). Use this if you want the server to run in stateless mode. If the option is inactive, the server state is updated regularly.</li>
  <li><code>serviceUrl</code><br />
The URL of the Xtext servlet. If no value is given, it is constructed using the <code>baseUrl</code> option in the form <code>{location.protocol}//{location.host}{baseUrl}xtext-service</code>.</li>
  <li><code>showErrorDialogs</code><br />
Whether errors should be displayed in popup dialogs (default: <code>false</code>).</li>
  <li><code>syntaxDefinition</code><br />
A path to a JS file containing a syntax definition. Set this option to <code>'none'</code> to disable syntax highlighting. See <a href="#syntax-highlighting">Syntax Highlighting</a> for more details.</li>
  <li><code>textUpdateDelay</code><br />
The number of milliseconds to wait after a text change before Xtext services are invoked (default: 500).</li>
  <li><code>xtextLang</code><br />
The language name (usually the file extension configured for the language). This is used to set the <code>resourceId</code> and <code>syntaxDefinition</code> options if they have not been specified.</li>
</ul>

<h2 id="server">The Server</h2>

<p>The language-specific resources are provided through HTTP requests which are processed by the <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web.servlet/src/main/java/org/eclipse/xtext/web/servlet/XtextServlet.xtend">XtextServlet</a>. This class is also responsible for managing the lifecycle of the language <a href="https://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/Injector.html">Injector</a> (see <a href="302_configuration.html#dependency-injection">Dependency Injection</a>). The default approach is to create an injector when the servlet is started and to register it in the <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext/src/org/eclipse/xtext/resource/IResourceServiceProvider.java">IResourceServiceProvider.Registry</a>. In order to override the default behavior, you can change or add bindings in the <code>&lt;LanguageName&gt;WebModule</code> or <code>&lt;LanguageName&gt;IdeModule</code> of your language.</p>

<p>The usual way to include the Xtext servlet in a server application is to create a subclass of <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web.servlet/src/main/java/org/eclipse/xtext/web/servlet/XtextServlet.xtend">XtextServlet</a>, override <code>init()</code> and <code>destroy()</code> to manage the runtime resources, and add a <a href="https://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebServlet.html">WebServlet</a> annotation with <code>urlPatterns = "/xtext-service/*"</code> as parameter. See <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web.example.jetty/src/main/java/org/eclipse/xtext/web/example/jetty/MyXtextServlet.xtend">MyXtextServlet</a> for an example.</p>

<p>If you want to implement your own communication channel to provide the language-specific services without using XtextServlet, you can do so by injecting an instance of <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/XtextServiceDispatcher.xtend">XtextServiceDispatcher</a> and calling <code>getService(IServiceContext)</code>. The input to this method is an <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/IServiceContext.xtend">IServiceContext</a>, which must be implemented to provide the request parameters and the client session. The return value is a descriptor that can be used to invoke the actual service. Furthermore, <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/XtextServiceDispatcher.xtend">XtextServiceDispatcher</a> can be subclassed in order to add custom services with access to the document AST and all related Xtext APIs.</p>

<p>The following sections describe how to customize the standard services for web editors.</p>

<h3 id="content-assist">Content Assist</h3>

<p>Content assist proposals for cross-references are created by <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/IdeCrossrefProposalProvider.xtend">IdeCrossrefProposalProvider</a>, while for other grammar elements <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/IdeContentProposalProvider.xtend">IdeContentProposalProvider</a> is used. In order to customize the proposals, create subclasses of these providers and register them in your IDE Guice module.</p>

<p><a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/IdeContentProposalProvider.xtend">IdeContentProposalProvider</a> has one <code>_createProposals(...)</code> dispatch method for each type of grammar element. In most cases the best choice is to override the method for <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext/emf-gen/org/eclipse/xtext/Assignment.java">Assignments</a> and to filter the correct assignments by comparing them with the instances in the generated GrammarAccess of your language. A proposal is submitted by creating and configuring an instance of <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/ContentAssistEntry.xtend">ContentAssistEntry</a> and passing it to the given acceptor. This entry class contains all information required to display the proposal in the web browser and to apply it to the document. Usually it is sent to the client in JSON format.</p>

<p>The typical customization point for <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/IdeCrossrefProposalProvider.xtend">IdeCrossrefProposalProvider</a> is the method <code>createProposal(...)</code>, which is called for each element found by the scope provider. Here you can fine-tune the information to put into the <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/contentassist/ContentAssistEntry.xtend">ContentAssistEntry</a>.</p>

<h3 id="semantic-highlighting">Semantic Highlighting</h3>

<p>The default behavior of Xtext editors is to have no semantic highlighting (syntactic highlighting, e.g. for keywords and strings, is done on the client side as described in <a href="#syntax-highlighting">Syntax Highlighting</a>). In order to add styling to your text, create a subclass of <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/syntaxcoloring/DefaultSemanticHighlightingCalculator.java">DefaultSemanticHighlightingCalculator</a> and override <code>highlightElement(...)</code>. Here you can mark text regions with CSS classes by submitting a text offset, a length, and the CSS class name to the given acceptor. You can specify the actual text style in a CSS file that is included by the web page containing the Xtext editor.</p>

<h3 id="mark-occurrences">Mark Occurrences</h3>

<p>The service for marking occurrences of a selected element is handled by <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/occurrences/OccurrencesService.xtend">OccurrencesService</a>. Here you can override <code>filter(EObject)</code> to exclude some elements from this service. The actual text regions to be marked are computed automatically from the cross-references present in the model.</p>

<h3 id="hover-info">Hover Information</h3>

<p>The information displayed for mouse hover popups is created in HTML format and consists of two parts: a title and a description.</p>

<p>The title is composed of a text label and an image. The label is computed by <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/labels/INameLabelProvider.xtend">INameLabelProvider</a>, and the default is the value of the <code>name</code> property of an element, if it exists. The image is determined by an implementation of <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/labels/IImageDescriptionProvider.xtend">IImageDescriptionProvider</a>. The default behavior is to generate a <code>&lt;div&gt;</code> and annotate it with a CSS class of the form <code>&lt;class&gt;-icon</code>, where <code>&lt;class&gt;</code> is the name of the EClass of the corresponding element. The actual images can be assigned to these classes in a CSS file using the <code>background-image</code> CSS property.</p>

<p>The description part of the hover popup is determined by the <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext/src/org/eclipse/xtext/documentation/IEObjectDocumentationProvider.java">IEObjectDocumentationProvider</a>. For this part the default content is fetched from the comments in the document: if the definition of the element is preceded by a multi-line comment (e.g. <code>/* ... */</code>), the content of that comment is used as description.</p>

<h3 id="persistence">Persistence</h3>

<p>Without further adaptation the Xtext server does not provide any persistence functionality. As described in <a href="#getting-text-content">Getting the Text Content</a>, there are multiple ways to fill the web editor with text. If you would like to use the persistence service included in the Xtext server, you need to implement <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/persistence/IServerResourceHandler.xtend">IServerResourceHandler</a>. The <code>get</code> and <code>put</code> operations declared in that interface should delegate to the persistence layer you would like to connect. For a simple example see <a href="https://github.com/eclipse/xtext-web/blob/master/org.eclipse.xtext.web/src/main/java/org/eclipse/xtext/web/server/persistence/FileResourceHandler.xtend">FileResourceHandler</a>.</p>

<hr />

<p><strong><a href="350_continuous_integration.html">Next Chapter: Continuous Integration</a></strong></p>

          </div>
        </div>
      </div>
    </div>
  </div>
</div>
    
    <footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
              <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
              <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
              <li><a href="http://www.eclipse.org/legal/">Legal</a></li>
            </ul>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org">Eclipse Home</a></li>
              <li><a href="http://marketplace.eclipse.org/">Market Place</a></li>
              <li><a href="http://live.eclipse.org/">Eclipse Live</a></li>
              <li><a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            </ul>
          </div>
          <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header"">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  
  <script src="/Xtext/js/jquery-1.11.3.min.js"></script>
  <script src="/Xtext/js/bootstrap.min.js"></script>
  <script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/Xtext/js/prettify.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-common.js" type="text/javascript"></script>
  <script src="/Xtext/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  <script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
