Gitlab Tecnalia dejara de estar disponible mañana 18 de Octubre a las 14:00 por mantenimiento programado de data center.

Gitlab Tecnalia won´t be available starting 18th october 2:00PM due to data center scheduled maintenance.

Commit c325855c authored by pilula2018's avatar pilula2018

Merge branch 'graphene' into 'master'

GrapheneMR

See merge request !8
parents c1a36a21 e4f81586
Pipeline #7343 passed with stage
in 5 seconds
nodejs_run:
graphene_test:
stage: test
script:
- npm install
- npm test
\ No newline at end of file
- ./configure
- ninja -C _build test
# Contributing to Graphene
If you found a bug (which I'm sure there will be plenty), or if you want
to add your own pet feature, then follow these steps:
1. Fork the [ebassi/graphene](https://github.com/ebassi/graphene) repo
2. Fix bugs or add new features and push them to your clone
3. Open [a new issue](https://github.com/ebassi/graphene/issues/new)
4. Open [a pull request](https://github.com/ebassi/graphene/pulls)
5. Wait for me to give feedback on the pull request
6. Celebrate when your code gets merged
That's pretty much it.
Please, respect the coding style when writing patches for Graphene. The
coding style can be immediately gleaned from the existing code, but here is
a short version:
* Indentation is made of spaces, and only spaces — **no tabs**
* Each indentation level is 2 spaces
* Curly braces for blocks go on a separate indentation level
* Except for functions
* Do not use curly braces for single-statement blocks
* When declaring or defining a function, arguments go on separate
lines
* When calling a function never break a line between the function
name and the opening parenthesis, and between the opening parenthesis
and the first argument
* Leave a space between functions and parenthesis
A more comprehensive coding style document is available in the `docs`
directory.
Copyright 2014 Emmanuele Bassi. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
# Graphene
### A thin layer of types for graphic libraries
[![Build Status](https://travis-ci.org/ebassi/graphene.svg?branch=master)](https://travis-ci.org/ebassi/graphene)
[![Build status](https://ci.appveyor.com/api/projects/status/pw7o5grgko1l06hd/branch/master?svg=true)](https://ci.appveyor.com/project/ebassi/graphene/branch/master)
When creating graphic libraries you most likely end up dealing with points
and rectangles. If you're particularly unlucky, you may end up dealing
with affine matrices and 2D transformations. If you're writing a graphic
library with 3D transformations, though, you are going to hit the jackpot:
4x4 matrices, projections, transformations, vectors, and quaternions.
Most of this stuff exists, in various forms, in other libraries, but it
has the major drawback of coming along with the rest of those libraries,
which may or may not be what you want. Those libraries are also available
in various languages, as long as those languages are C++; again, it may or
may not be something you want.
For this reason, I decided to write the thinnest, smallest possible layer
needed to write a canvas library; given its relative size, and the
propensity for graphics libraries to have a pun in their name, I decided
to call it Graphene.
This library provides types and their relative API; it does not deal with
windowing system surfaces, drawing, scene graphs, or input. You're
supposed to do that yourself, in your own canvas implementation, which is
the whole point of writing the library in the first place.
### Dependencies
Graphene has little dependencies.
Graphene contains optimizations for speeding up vector operations; those
optimizations are optional, and used only if both Graphene was compiled
with support for them *and* if the system you're running on has them.
Currently, Graphene supports the following platform-specific fast paths:
* Streaming SIMD Extensions (SSE) 2
* ARM NEON
* GCC vector extensions
In the remote case in which none of these optimizations are available,
Graphene will fall back to a naive scalar implementation.
Graphene can, optionally, provide types for integrating with GObject
properties and signals, as well as introspection information for its
use with other languages through introspection-based bindings.
### Installation
In order to build and install Graphene you will need development tools and
the headers of the dependencies. You will also need:
* [meson](http://mesonbuild.com)
* [ninja](https://ninja-build.org/)
Alternatively, you can also use Autotools.
First of all, clone the Git repository:
$ git clone git://github.com/ebassi/graphene
$ cd graphene
Then run:
$ mkdir _build && cd _build
$ meson .. # on Windows, it's "meson.py"
$ ninja test
# ninja install
It is possible, when building Graphene, to disable specific optimizations by
using configuration options:
* `-Denable-sse2=false` - will disable the SSE2 fast paths
* `-Denable-arm-neon=false` - will disable the ARM NEON fast paths
* `-Denable-gcc-vector=false` - will disable the GCC vector intrinsics
If you don't plan on generating introspection data, use `-Denable-introspection=false`
when configuring Graphene; similarly, if you don't plan on using GObject with
Graphene, use `-Denable-gobject-types=false`. Disabling GObject types will also
automatically disable generating introspection data.
You can also disable building the test suite and the benchmark suite, using
the `-Denable-tests=false` and `-Denable-benchmarks=false` configuration switches
respectively.
#### Building on Windows
In order to build on Windows, it's recommended to use the
[MSYS2](http://sourceforge.net/projects/msys2/) environment.
First, [install MSYS2](https://msys2.github.io/) and update it fully
as documented.
Then use `pacman` to set up the build environment by installing the
necessary prerequisites for your target. For all build systems, you
will need a standard development environment and the appropriate native
toolchain. You also need a Python interpreter for introspection builds,
which are the default.
$ pacman -S base-devel
$ pacman -S python3 # for introspection
$ pacman -S mingw-w64-x86_64-toolchain # only MINGW64 target
$ pacman -S mingw-w64-i686-toolchain # only MINGW32 target
If you're using GNU Autotools, you don't need to do anything more.
Autotools is part of the `base-devel` group.
If you want to try Meson, install the appropriate native package:
$ pacman -S mingw-w64-x86_64-meson # only MINGW64 target
$ pacman -S mingw-w64-i686-meson # only MINGW32 target
There are a number of optional dependencies too:
$ pacman -S gtk-doc # optional
$ pacman -S mingw-w64-x86_64-glib2 # optional, MINGW64 target only
$ pacman -S mingw-w64-i686-glib2 # optional, MINGW32 target only
$ pacman -S glib2 glib2-devel # optional, MSYS target only
Then clone the Graphene repository and build as usual by following the
instructions in the section above. If you're using Meson, please note
that the tool may be installed as "meson.py" on MSYS2.
### Contributing
If you found a bug (which I'm sure there will be plenty), or if you want
to add your own pet feature, then follow these steps:
1. Fork the [ebassi/graphene](https://github.com/ebassi/graphene) repo
2. Fix bugs or add new features and push them to your clone
3. Open [a new issue](https://github.com/ebassi/graphene/issues/new)
4. Open [a pull request](https://github.com/ebassi/graphene/pulls)
5. Wait for me to give feedback on the pull request
6. Celebrate when your code gets merged
That's pretty much it.
Please, respect the coding style when writing patches for Graphene. The
coding style can be immediately gleaned from the existing code, but here is
a short version:
* Indentation is made of spaces, and only spaces — **no tabs**
* Each indentation level is 2 spaces
* Curly braces for blocks go on a separate indentation level
* Except for functions
* Do not use curly braces for single-statement blocks
* When declaring or defining a function, arguments go on separate
lines
* When calling a function never break a line between the function
name and the opening parenthesis, and between the opening parenthesis
and the first argument
* Leave a space between functions and parenthesis
A more comprehensive coding style document is available in the `docs`
directory.
## Documentation
### Release notes
The release notes are available on the Graphene
[wiki](https://github.com/ebassi/graphene/wiki/Release-Notes).
### Available types
Graphene provides common types needed to handle 3D transformations:
* [2D points](http://ebassi.github.io/graphene/docs/graphene-Point.html)
* [3D points](http://ebassi.github.io/graphene/docs/graphene-Point3D.html)
* [triangles](http://ebassi.github.io/graphene/docs/graphene-Triangle.html)
* [rectangles](http://ebassi.github.io/graphene/docs/graphene-Rectangle.html)
* [quads](http://ebassi.github.io/graphene/docs/graphene-Quad.html)
* [quaternions](http://ebassi.github.io/graphene/docs/graphene-Quaternion.html)
* [euler angles](http://ebassi.github.io/graphene/docs/graphene-Euler.html)
* [vectors](http://ebassi.github.io/graphene/docs/graphene-Vectors.html) (2, 3, or 4-sized)
* [matrices](http://ebassi.github.io/graphene/docs/graphene-Matrix.html)
* [planes](http://ebassi.github.io/graphene/docs/graphene-Plane.html)
* [axis aligned bounding boxes](http://ebassi.github.io/graphene/docs/graphene-Box.html)
* [spheres](http://ebassi.github.io/graphene/docs/graphene-Sphere.html)
* [frustums](http://ebassi.github.io/graphene/docs/graphene-Frustum.html)
Graphene also provides its low-level SIMD [vector](http://ebassi.github.io/graphene/docs/graphene-SIMD-vector.html)
and [matrix](http://ebassi.github.io/graphene/docs/graphene-SIMD-matrix.html)
types, which are used to implement the API above.
All types can be placed on the stack, but provide allocation/free functions
for working on the heap as well. The contents of all structure types, unless
noted otherwise, should be considered private, and should never be accessed
directly.
The full API reference for Graphene is [available online](http://ebassi.github.io/graphene/docs/).
### License
Graphene is released under the terms of the MIT/X11 license.
See the `LICENSE` file for more details.
[binaries]
c = '/usr/bin/i686-w64-mingw32-gcc'
cpp = '/usr/bin/i686-w64-mingw32-cpp'
ar = '/usr/bin/i686-w64-mingw32-ar'
strip = '/usr/bin/i686-w64-mingw32-strip'
pkgconfig = '/usr/bin/i686-w64-mingw32-pkg-config'
exe_wrapper = 'wine'
[properties]
root = '/usr/i686-w64-mingw32/sys-root/mingw'
c_args = [ '-O2', '-g', '-pipe', '-Wall', '-Wp', '-D_FORTIFY_SOURCE=2', '-fexceptions', '--param=ssp-buffer-size=4', '-I/usr/i686-w64-mingw32/sys-root/mingw/include' ]
c_link_args = [ '-L/usr/i686-w64-mingw32/sys-root/mingw/lib' ]
[host_machine]
system = 'windows'
cpu_family = 'i686'
cpu = 'i686'
endian = 'little'
[binaries]
c = '/usr/bin/x86_64-w64-mingw32-gcc'
cpp = '/usr/bin/x86_64-w64-mingw32-cpp'
ar = '/usr/bin/x86_64-w64-mingw32-ar'
strip = '/usr/bin/x86_64-w64-mingw32-strip'
pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config'
exe_wrapper = 'wine'
[properties]
root = '/usr/x86_64-w64-mingw32/sys-root/mingw'
c_args = [ '-pipe', '-Wp,-D_FORTIFY_SOURCE=2', '-fexceptions', '--param=ssp-buffer-size=4', '-I/usr/x86_64-w64-mingw32/sys-root/mingw/include' ]
c_link_args = [ '-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib' ]
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
#!/bin/sh
set -x
test -n "$srcdir" || srcdir=$1
test -n "$srcdir" || srcdir=.
cd "$srcdir"
PROJECT=graphene
VERSION=$(git describe --abbrev=0)
NAME="${PROJECT}-${VERSION}"
rm -f "${NAME}.tar"
echo "Creating git tree archive…"
git archive --prefix="${NAME}/" --format=tar HEAD > ${NAME}.tar
rm -f "${NAME}.tar.xz"
echo "Compressing archive…"
xz -f "${NAME}.tar"
set +x
newlines = lf
input_tab_size = 8
output_tab_size = 8
string_escape_char = 100
string_escape_char2 = 0
# indenting
indent_columns = 2
indent_with_tabs = 9
indent_align_string = true
indent_brace = 2
indent_braces = false
indent_braces_no_func = true
indent_func_call_param = false
indent_func_def_param = false
indent_func_proto_param = false
indent_switch_case = 0
indent_case_brace = 2
indent_paren_close = 1
indent_label = 0
indent_paren_open_brace = false
# spacing
sp_arith = add
sp_assign = add
sp_enum_assign = add
sp_bool = add
sp_compare = add
sp_inside_paren = remove
sp_inside_fparens = remove
sp_func_def_paren = force
sp_func_proto_paren = force
sp_paren_paren = remove
sp_balance_nested_parens = false
sp_paren_brace = remove
sp_before_square = remove
sp_before_squares = remove
sp_inside_square = remove
sp_after_comma = add
sp_before_comma = remove
sp_after_cast = add
sp_sizeof_paren = add
sp_not = remove
sp_inv = remove
sp_addr = remove
sp_member = remove
sp_deref = remove
sp_sign = remove
sp_incdec = remove
sp_attribute_paren = remove
sp_macro = force
sp_func_call_paren = force
set func_call_user = _ N_ C_
sp_brace_typedef = add
sp_cond_colon = add
sp_cond_question = add
sp_defined_paren = remove
# alignment
align_keep_tabs = false
align_with_tabs = false
align_on_tabstop = false
align_number_left = true
align_func_params = true
align_var_def_span = 0
align_var_def_amp_style = 1
align_var_def_colon = true
align_enum_equ_span = 0
align_var_struct_span = 2
align_var_def_star_style = 2
align_var_def_amp_style = 2
align_typedef_span = 2
align_typedef_func = 0
align_typedef_star_style = 2
align_typedef_amp_style = 2
# newlines
nl_assign_leave_one_liners = true
nl_enum_leave_one_liners = false
nl_func_leave_one_liners = false
nl_if_leave_one_liners = false
nl_end_of_file = add
nl_assign_brace = remove
nl_func_var_def_blk = 1
nl_fcall_brace = add
nl_enum_brace = remove
nl_struct_brace = force
nl_union_brace = force
nl_if_brace = force
nl_brace_else = force
nl_elseif_brace = force
nl_else_brace = add
nl_for_brace = force
nl_while_brace = force
nl_do_brace = force
nl_brace_while = force
nl_switch_brace = force
nl_before_case = true
nl_after_case = false
nl_func_type_name = force
nl_func_proto_type_name = remove
nl_func_paren = remove
nl_func_decl_start = remove
nl_func_decl_args = force
nl_func_decl_end = remove
nl_fdef_brace = force
nl_after_return = false
nl_define_macro = false
nl_create_if_one_liner = false
nl_create_for_one_liner = false
nl_create_while_one_liner = false
nl_after_semicolon = true
nl_multi_line_cond = true
# mod
mod_full_brace_for = remove
mod_full_brace_if = remove
mod_full_brace_while = remove
mod_full_brace_do = remove
mod_full_brace_nl = 3
mod_paren_on_return = remove
# line splitting
#code_width = 78
ls_for_split_full = true
ls_func_split_full = true
# positioning
pos_bool = trail
pos_conditional = lead
#!/bin/bash
# configure script adapter for Meson
# Based on build-api: https://github.com/cgwalters/build-api
# Copyright 2010, 2011, 2013 Colin Walters <walters@verbum.org>
# Copyright 2016, 2017 Emmanuele Bassi
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
# Build API variables:
# Little helper function for reading args from the commandline.
# it automatically handles -a b and -a=b variants, and returns 1 if
# we need to shift $3.
read_arg() {
# $1 = arg name
# $2 = arg value
# $3 = arg parameter
local rematch='^[^=]*=(.*)$'
if [[ $2 =~ $rematch ]]; then
read "$1" <<< "${BASH_REMATCH[1]}"
else
read "$1" <<< "$3"
# There is no way to shift our callers args, so
# return 1 to indicate they should do it instead.
return 1
fi
}
sanitycheck() {
# $1 = arg name
# $1 = arg command
# $2 = arg alternates
local cmd=$( which $2 2>/dev/null )
if [ -x "$cmd" ]; then
read "$1" <<< "$cmd"
return 0
fi
test -z $3 || {
for alt in $3; do
cmd=$( which $alt 2>/dev/null )
if [ -x "$cmd" ]; then
read "$1" <<< "$cmd"
return 0
fi
done
}
echo -e "\e[1;31mERROR\e[0m: Command '$2' not found"
exit 1
}
sanitycheck MESON 'meson'
sanitycheck MESONTEST 'mesontest'
sanitycheck NINJA 'ninja' 'ninja-build'
enable_docs='-Denable-gtk-doc=false'
enable_man='-Denable-man=false'
enable_introspection=''
while (($# > 0)); do
case "${1%%=*}" in
--prefix) read_arg prefix "$@" || shift;;
--bindir) read_arg bindir "$@" || shift;;
--sbindir) read_arg sbindir "$@" || shift;;
--libexecdir) read_arg libexecdir "$@" || shift;;
--datarootdir) read_arg datarootdir "$@" || shift;;
--datadir) read_arg datadir "$@" || shift;;
--sysconfdir) read_arg sysconfdir "$@" || shift;;
--libdir) read_arg libdir "$@" || shift;;
--mandir) read_arg mandir "$@" || shift;;
--includedir) read_arg includedir "$@" || shift;;
--enable-gtk-doc) enable_docs='-Denable-gtk-doc=true';;
--disable-gtk-doc) enable_docs='-Denable-gtk-doc=false';;
--enable-man) enable_man='-Denable-man=true';;
--disable-man) enable_man='-Denable-man=false';;
--enable-introspection) enable_introspection='';;
--disable-introspection) enable_introspection='-Ddisable_introspection=true';;
*) echo -e "\e[1;33mINFO\e[0m: Ignoring unknown option '$1'";;
esac
shift
done
# Defaults
test -z ${prefix} && prefix="/usr/local"
test -z ${bindir} && bindir=${prefix}/bin
test -z ${sbindir} && sbindir=${prefix}/sbin
test -z ${libexecdir} && libexecdir=${prefix}/bin
test -z ${datarootdir} && datarootdir=${prefix}/share
test -z ${datadir} && datadir=${datarootdir}
test -z ${sysconfdir} && sysconfdir=${prefix}/etc
test -z ${libdir} && libdir=${prefix}/lib
test -z ${mandir} && mandir=${prefix}/share/man
test -z ${includedir} && includedir=${prefix}/include
# The source directory is the location of this file
srcdir=$(dirname $0)
# The build directory is the current location
builddir=`pwd`
# If we're calling this file from the source directory then
# we automatically create a build directory and ensure that
# both Meson and Ninja invocations are relative to that
# location
if [[ -f "${builddir}/meson.build" ]]; then
mkdir -p _build
builddir="${builddir}/_build"
NINJA_OPT="-C ${builddir}"
fi
# Wrapper Makefile for Ninja
cat > Makefile <<END
# Generated by configure; do not edit
all:
CC="\$(CC)" CXX="\$(CXX)" ${NINJA} ${NINJA_OPT}
install:
DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install
check:
${MESONTEST} ${NINJA_OPT}
END
echo "Summary:"
echo " meson:....... ${MESON}"
echo " ninja:....... ${NINJA}"
echo " prefix:...... ${prefix}"
echo " bindir:...... ${bindir}"
echo " sbindir:..... ${sbindir}"
echo " libexecdir:.. ${libexecdir}"
echo " datarootdir:. ${datarootdir}"
echo " datadir:..... ${datadir}"
echo " sysconfdir:.. ${sysconfdir}"
echo " libdir:...... ${libdir}"
echo " mandir:...... ${mandir}"
echo " includedir:.. ${includedir}"
echo " additional:.."
echo " - ${enable_docs} ${enable_man} ${enable_introspection}"
exec ${MESON} \
--prefix=${prefix} \
--libdir=${libdir} \
--libexecdir=${libexecdir} \
--datadir=${datadir} \
--sysconfdir=${sysconfdir} \
--bindir=${bindir} \
--includedir=${includedir} \
--mandir=${mandir} \
--default-library shared \
${enable_docs} \
${enable_man} \
${enable_introspection} \
${builddir} \
${srcdir}
# vim: ai ts=8 noet sts=2 ft=sh
/.libs
/html
/xml
/*.stamp
/graphene-decl-list.txt
/graphene-decl-list.txt.bak
/graphene-decl.txt
/graphene-decl.txt.bak
/graphene-undeclared.txt
/graphene-undocumented.txt
/graphene-unused.txt
/graphene.args
/graphene.hierarchy
/graphene.interfaces
/graphene.prerequisites
/graphene.signals
/graphene.types
/gtkdoc-check.log
/gtkdoc-check.test
/gtkdoc-check.trs
/test-suite.log
This diff is collapsed.
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
[
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
]>
<book id="index">
<bookinfo>
<title>Graphene Reference Manual</title>
<releaseinfo>
<para>This document is the API reference for the Graphene library.</para>
<para>
The latest version of Graphene, as well as the latest version of
this API reference, is <ulink role="online-location" url="http://ebassi.github.com/graphene">available online</ulink>.
</para>
</releaseinfo>
</bookinfo>
<chapter>
<title>Graphene</title>
<refsect2 id="overview">
<para>
Graphene is a library of data types commonly used to implement 2D-in-3D or full 3D canvases.
</para>
<para>
Graphene only contains math data types, like vectors and matrices; it does not deal with windowing
system calls, event handling, drawing, or a full scene graph.
</para>
</refsect2>
<xi:include href="xml/graphene-point.xml"/>
<xi:include href="xml/graphene-point3d.xml"/>
<xi:include href="xml/graphene-size.xml"/>
<xi:include href="xml/graphene-rect.xml"/>
<xi:include href="xml/graphene-quad.xml"/>
<xi:include href="xml/graphene-triangle.xml"/>
<xi:include href="xml/graphene-box.xml"/>
<xi:include href="xml/graphene-sphere.xml"/>
<xi:include href="xml/graphene-frustum.xml"/>
<xi:include href="xml/graphene-simd4f.xml"/>
<xi:include href="xml/graphene-simd4x4f.xml"/>
<xi:include href="xml/graphene-vectors.xml"/>
<xi:include href="xml/graphene-matrix.xml"/>
<xi:include href="xml/graphene-euler.xml"/>
<xi:include href="xml/graphene-quaternion.xml"/>
<xi:include href="xml/graphene-plane.xml"/>
<xi:include href="xml/graphene-ray.xml"/>
<xi:include href="xml/graphene-version.xml"/>
<xi:include href="xml/graphene-gobject.xml"/>
</chapter>
<chapter id="object-tree">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
<index id="api-index">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
<index id="deprecated-api-index" role="deprecated">
<title>Index of deprecated API</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
<index role="1.0">
<title>Index of new symbols in 1.0</title>
<xi:include href="xml/api-index-1.0.xml"><xi:fallback /></xi:include>
</index>
<index role="1.2">
<title>Index of new symbols in 1.2</title>
<xi:include href="xml/api-index-1.2.xml"><xi:fallback /></xi:include>
</index>
<index role="1.4">
<title>Index of new symbols in 1.4</title>
<xi:include href="xml/api-index-1.4.xml"><xi:fallback /></xi:include>
</index>
<index role="1.6">
<title>Index of new symbols in 1.6</tit