# 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.

#
# docbook45.conf
#
# Asciidoc DocBook 4.5 configuration file.
#

[image-inlinemacro]
<inlinemediaobject>
  <imageobject>
  <imagedata fileref="{imagesdir=}{imagesdir?/}{target}"{width? contentwidth="{width}"}{height? contentdepth="{height}"}{scale? scale="{scale}"}/>
  </imageobject>
  <textobject><phrase>{alt={target}}</phrase></textobject>
</inlinemediaobject>

[image-blockmacro]
<figure{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}{pgwide-option? pgwide="1"}><title>{title}</title>
{title%}<informalfigure{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}>{pgwide-option?<?dbfo pgwide="1"?>}
# DocBook XSL Stylesheets custom processing instructions.
<?dbfo keep-together="{breakable-option#auto}"?>
<?dbfo keep-together="{unbreakable-option#always}"?>
<mediaobject>
  <imageobject>
  <imagedata fileref="{imagesdir=}{imagesdir?/}{target}"{width? contentwidth="{width}"}{height? contentdepth="{height}"}{scale? scale="{scale}"}{scaledwidth? width="{scaledwidth}" scalefit="1"}{align? align="{align}"}/>
  </imageobject>
  <textobject><phrase>{alt={target}}</phrase></textobject>
</mediaobject>
{title#}</figure>
{title%}</informalfigure>

#-------------------------
# book document type
#-------------------------
ifdef::doctype-book[]

[header]
template::[header-declarations]

<book lang="{lang=en}">
<bookinfo>
<mediaobject>
  <imageobject>
    <imagedata fileref="images/logo-standard.png"/>
  </imageobject>
</mediaobject>
template::[docinfo]
<pubdate><?dbtimestamp format="Y-m-d H:M:S"?></pubdate>
</bookinfo>

[footer]
</book>

endif::doctype-book[]

# glossary item

[listtags-glossary]
list=
entry=<glossentry>|</glossentry>
label=
term=<glossterm>|</glossterm>
item=<glossdef>|</glossdef>
text=<simpara>|</simpara>

