//////////////////////////////////////////

  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.

//////////////////////////////////////////

= Groovy Language Documentation
:doctype: book
ifndef::projectdir[:projectdir: ../../..]

include::{projectdir}/src/spec/doc/core-introduction.adoc[]

== Groovy Language Specification

include::{projectdir}/src/spec/doc/core-syntax.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-operators.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-program-structure.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-object-orientation.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-closures.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-semantics.adoc[leveloffset=+2]

== Tools

include::{projectdir}/src/spec/doc/tools-groovy.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/tools-groovyc.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-groovysh/{specfolder}/groovysh.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-console/{specfolder}/groovy-console.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-groovydoc/{specfolder}/groovydoc.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/tools-ide.adoc[leveloffset=+2]

== User Guides

include::{projectdir}/src/spec/doc/core-getting-started.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-differences-java.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-gdk.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-metaprogramming.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/grape.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-testing-guide.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-json/{specfolder}/json-userguide.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-sql/{specfolder}/sql-userguide.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-xml/{specfolder}/xml-userguide.adoc[leveloffset=+2]

=== Scripting Ant tasks

Groovy integrates very well with http://ant.apache.org[Apache Ant] thanks to <<_antbuilder,AntBuilder>>.

include::{projectdir}/subprojects/groovy-ant/{specfolder}/groovy-ant-task.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-templates/{specfolder}/template-engines.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-servlet/{specfolder}/servlet-userguide.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/guide-integrating.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/core-domain-specific-languages.adoc[leveloffset=+2]

include::{projectdir}/subprojects/groovy-jmx/src/spec/doc/jmx.adoc[leveloffset=+2]

=== Creating Swing UIs

Creating Swing UIs is made easy thanks to the use of <<swingbuilder,SwingBuilder>>.

=== Security

(TBD)


include::{projectdir}/src/spec/doc/design-pattern-in-groovy.adoc[leveloffset=+2]

== Acknowledgements

include::{projectdir}/src/spec/doc/contributors.adoc[leveloffset=+2]

include::{projectdir}/src/spec/doc/license.adoc[leveloffset=+2]

