<!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="330_web_support.html">Web Editor Support</a></li>
	<li><a href="340_lsp_support.html">LSP 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 the 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="https://www.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 the <a href="#persistence">Persistence</a> section 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 the 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 the <a href="#content-assist">Content Assist</a> section.</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 the <a href="#semantic-highlighting">Semantic Highlighting</a> section).</li>
  <li><code>getOccurrences()</code><br />
Returns the occurrences of the element at the current cursor position (see the <a href="#mark-occurrences">Mark Occurrences</a> section).</li>
  <li><code>getHoverInfo()</code><br />
Returns the hover information at the current cursor position (see the <a href="#hover-info">Hover Information</a> section).</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 the <a href="#syntax-highlighting">Syntax Highlighting</a> section 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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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.java">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 the <a href="https://github.com/eclipse/xtext-core/blob/master/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/labels/INameLabelProvider.java">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.java">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 the <a href="#getting-text-content">Getting the Text Content</a> section, 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.java">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.java">FileResourceHandler</a>.</p>

<hr />

<p><strong><a href="340_lsp_support.html">Next Chapter: LSP Support</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://www.planeteclipse.org/">Eclipse Planet</a></li>
              <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</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>
