<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.    
-->
<html>
<head>
	<script type="text/javascript">var xookiConfig = {level: 0};</script>	
	<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
	<textarea id="xooki-source">
IvyDE provides an editor of ivysettings.xml files. It provides completion on all tag and attribute names.

<center><img src="images/settings.jpg"/></center>

Completion comes with contextual help. The completion popup is displayed through the CTRL + SPACE shortcut.

<b>Available completions:</b><ul>
	<li><b>XML structure</b>: Allows you to quickly to insert valid tags in the right place. If the tag can have nested childrenm, both notations, simple tag and open tag, are proposed.
	    
	    <center><img src="images/settings_completion_struct.jpg"/></center>		</li>
	<li><b>Tag attributes</b>: When your cursor is placed inside a tag bracket, the completion shows available attributes for the enclosing tag.
    
	    <center><img src="images/settings_completion_att.jpg"/></center>
	</li>
</ul>


<b>Change colors:</b> you can change the color used by the editor in the <a href="preferences.html#xmleditor">global preferences page</a>.

</textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>
</html>
