asciidoctor / asciidoctor.js

:scroll: A JavaScript port of Asciidoctor, a modern implementation of AsciiDoc
https://asciidoctor.org
MIT License
732 stars 135 forks source link

Problem with docbook5 backend #67

Closed rahmanusta closed 9 years ago

rahmanusta commented 9 years ago

Hi i have a sample book document, i wanted to convert it docbook5 style. Both asciidoctor (ruby) and asciidoctor.js produces chapters in surrounded last book element in document like preface, appendix, colophon etc.

Sample Content

= Book Name
Author's Name
:doctype: book
:encoding: utf-8
:lang: tr

[preface]
Önsöz
======

Java 8 ve yeniliklerini içeren bu kitap ile, Java programlama dilinin en yeni özelliklerini öğrenebilirsiniz.

Java 8 Ebook http://kodcu.com[kodcu.com] 'da http://kodcu.com/author/rahmanusta/[Rahman Usta] tarafından kaleme alınan Java 8 yazılarını içermektedir.

[appendix]
= Bu kitap nasıl yazıldı?

*Java 8 Ebook* kitabı açık kaynak kodlu http://asciidocfx.com/[Asciidoc Fx] kitap editörü kullanılarak, http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[Asciidoc işaretleme dili] ile yazılmıştır.

=== Chapter 01

Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500'lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır.

image::images/kodcu.png[align="center"]

1960'larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.

==== SubChapter 01

Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet'teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.

==== SubChapter 02

Yinelenen bir sayfa içeriğinin okuyucunun dikkatini dağıttığı bilinen bir gerçektir. Lorem Ipsum kullanmanın amacı, sürekli 'buraya metin gelecek, buraya metin gelecek' yazmaya kıyasla daha dengeli bir harf dağılımı sağlayarak okunurluğu artırmasıdır. Şu anda birçok masaüstü yayıncılık paketi ve web sayfa düzenleyicisi, varsayılan mıgır metinler olarak Lorem Ipsum kullanmaktadır.

=== Chapter 02

1500'lerden beri kullanılmakta olan standard Lorem Ipsum metinleri ilgilenenler için yeniden üretilmiştir. Çiçero tarafından yazılan 1.10.32 ve 1.10.33 bölümleri de 1914 H. Rackham çevirisinden alınan İngilizce sürümleri eşliğinde özgün biçiminden yeniden üretilmiştir.

[source,java]
----
public interface Editable{

    void useAsciidocFX();

}
----

=== Chapter 03

Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet'teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.

.Table Title (Optional)
[width="100%",options="header"]
|====================
|abcdefq |abcdefq |abcdefq |abcdefq 
|abcdefq |abcdefq |abcdefq |abcdefq 
|abcdefq |abcdefq |abcdefq |abcdefq 
|====================

Sample Docbook5 Output

<?xml version="1.0" encoding="UTF-8"?>
<?asciidoc-toc?>
<?asciidoc-numbered?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" lang="tr">
<info>
<title>Book Name</title>
<date>2014-11-02</date>
<author>
<personname>
<firstname>Author's</firstname>
<surname>Name</surname>
</personname>
</author>
<authorinitials>AN</authorinitials>
</info>
<preface xml:id="_Önsöz">
<title>Önsöz</title>
<simpara>Java 8 ve yeniliklerini içeren bu kitap ile, Java programlama dilinin en yeni özelliklerini öğrenebilirsiniz.</simpara>
<simpara>Java 8 Ebook <link xlink:href="http://kodcu.com">kodcu.com</link> 'da <link xlink:href="http://kodcu.com/author/rahmanusta/">Rahman Usta</link> tarafından kaleme alınan Java 8 yazılarını içermektedir.</simpara>
</preface>
<appendix xml:id="_bu_kitap_nasıl_yazıldı">
<title>Bu kitap nasıl yazıldı?</title>
<simpara><emphasis role="strong">Java 8 Ebook</emphasis> kitabı açık kaynak kodlu <link xlink:href="http://asciidocfx.com/">Asciidoc Fx</link> kitap editörü kullanılarak, <link xlink:href="http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/">Asciidoc işaretleme dili</link> ile yazılmıştır.</simpara>
<section xml:id="_chapter_01">
<title>Chapter 01</title>
<simpara>Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500&#8217;lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır.</simpara>
<informalfigure>
<mediaobject>
<imageobject>
<imagedata fileref="images/kodcu.png" align="center"/>
</imageobject>
<textobject><phrase>kodcu</phrase></textobject>
</mediaobject>
</informalfigure>
<simpara>1960&#8217;larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.</simpara>
<section xml:id="_subchapter_01">
<title>SubChapter 01</title>
<simpara>Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet&#8217;teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.</simpara>
</section>
<section xml:id="_subchapter_02">
<title>SubChapter 02</title>
<simpara>Yinelenen bir sayfa içeriğinin okuyucunun dikkatini dağıttığı bilinen bir gerçektir. Lorem Ipsum kullanmanın amacı, sürekli 'buraya metin gelecek, buraya metin gelecek' yazmaya kıyasla daha dengeli bir harf dağılımı sağlayarak okunurluğu artırmasıdır. Şu anda birçok masaüstü yayıncılık paketi ve web sayfa düzenleyicisi, varsayılan mıgır metinler olarak Lorem Ipsum kullanmaktadır.</simpara>
</section>
</section>
<section xml:id="_chapter_02">
<title>Chapter 02</title>
<simpara>1500&#8217;lerden beri kullanılmakta olan standard Lorem Ipsum metinleri ilgilenenler için yeniden üretilmiştir. Çiçero tarafından yazılan 1.10.32 ve 1.10.33 bölümleri de 1914 H. Rackham çevirisinden alınan İngilizce sürümleri eşliğinde özgün biçiminden yeniden üretilmiştir.</simpara>
<programlisting language="java" linenumbering="unnumbered">public interface Editable{

    void useAsciidocFX();

}</programlisting>
</section>
<section xml:id="_chapter_03">
<title>Chapter 03</title>
<simpara>Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet&#8217;teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.</simpara>
<table frame="all" rowsep="1" colsep="1">
<title>Table Title (Optional)</title>
<?dbhtml table-width="100%"?>
<?dbfo table-width="100%"?>
<?dblatex table-width="100%"?>
<tgroup cols="4">
<colspec colname="col_1" colwidth="106*"/>
<colspec colname="col_2" colwidth="106*"/>
<colspec colname="col_3" colwidth="106*"/>
<colspec colname="col_4" colwidth="106*"/>
<thead>
<row>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
</row>
</thead>
<tbody>
<row>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
</row>
<row>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
</row>
</tbody>
</tgroup>
</table>
</section>
</appendix>
</book>

What is the problem there? Thanks.

mojavelinux commented 9 years ago

Your chapters are subsections of the appendix, based on the nesting level. Chapters should be level 2 (2 equal signs), not 3. See if that fixes it.

rahmanusta commented 9 years ago

Hi Dan; result is same;

= Book Name
Author's Name
:doctype: book
:encoding: utf-8
:lang: tr

[preface]
Önsöz
======

Java 8 ve yeniliklerini içeren bu kitap ile, Java programlama dilinin en yeni özelliklerini öğrenebilirsiniz.

Java 8 Ebook http://kodcu.com[kodcu.com] 'da http://kodcu.com/author/rahmanusta/[Rahman Usta] tarafından kaleme alınan Java 8 yazılarını içermektedir.

[appendix]
= Bu kitap nasıl yazıldı?

*Java 8 Ebook* kitabı açık kaynak kodlu http://asciidocfx.com/[Asciidoc Fx] kitap editörü kullanılarak, http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[Asciidoc işaretleme dili] ile yazılmıştır.

== Chapter 01

Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500'lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır.

image::images/kodcu.png[align="center"]

1960'larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.

=== SubChapter 01

Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet'teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.

=== SubChapter 02

Yinelenen bir sayfa içeriğinin okuyucunun dikkatini dağıttığı bilinen bir gerçektir. Lorem Ipsum kullanmanın amacı, sürekli 'buraya metin gelecek, buraya metin gelecek' yazmaya kıyasla daha dengeli bir harf dağılımı sağlayarak okunurluğu artırmasıdır. Şu anda birçok masaüstü yayıncılık paketi ve web sayfa düzenleyicisi, varsayılan mıgır metinler olarak Lorem Ipsum kullanmaktadır.

== Chapter 02

1500'lerden beri kullanılmakta olan standard Lorem Ipsum metinleri ilgilenenler için yeniden üretilmiştir. Çiçero tarafından yazılan 1.10.32 ve 1.10.33 bölümleri de 1914 H. Rackham çevirisinden alınan İngilizce sürümleri eşliğinde özgün biçiminden yeniden üretilmiştir.

[source,java]
----
public interface Editable{

    void useAsciidocFX();

}
----

== Chapter 03

Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet'teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.

.Table Title (Optional)
[width="100%",options="header"]
|====================
|abcdefq |abcdefq |abcdefq |abcdefq 
|abcdefq |abcdefq |abcdefq |abcdefq 
|abcdefq |abcdefq |abcdefq |abcdefq 
|====================
<?xml version="1.0" encoding="UTF-8"?>
<?asciidoc-toc?>
<?asciidoc-numbered?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" lang="tr">
<info>
<title>Book Name</title>
<date>2014-11-03</date>
<author>
<personname>
<firstname>Author's</firstname>
<surname>Name</surname>
</personname>
</author>
<authorinitials>AN</authorinitials>
</info>
<preface xml:id="_Önsöz">
<title>Önsöz</title>
<simpara>Java 8 ve yeniliklerini içeren bu kitap ile, Java programlama dilinin en yeni özelliklerini öğrenebilirsiniz.</simpara>
<simpara>Java 8 Ebook <link xlink:href="http://kodcu.com">kodcu.com</link> 'da <link xlink:href="http://kodcu.com/author/rahmanusta/">Rahman Usta</link> tarafından kaleme alınan Java 8 yazılarını içermektedir.</simpara>
</preface>
<appendix xml:id="_bu_kitap_nasıl_yazıldı">
<title>Bu kitap nasıl yazıldı?</title>
<simpara><emphasis role="strong">Java 8 Ebook</emphasis> kitabı açık kaynak kodlu <link xlink:href="http://asciidocfx.com/">Asciidoc Fx</link> kitap editörü kullanılarak, <link xlink:href="http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/">Asciidoc işaretleme dili</link> ile yazılmıştır.</simpara>
<sect1 xml:id="_chapter_01">
<title>Chapter 01</title>
<simpara>Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500&#8217;lerden beri endüstri standardı sahte metinler olarak kullanılmıştır. Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır.</simpara>
<informalfigure>
<mediaobject>
<imageobject>
<imagedata fileref="images/kodcu.png" align="center"/>
</imageobject>
<textobject><phrase>kodcu</phrase></textobject>
</mediaobject>
</informalfigure>
<simpara>1960&#8217;larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.</simpara>
<section xml:id="_subchapter_01">
<title>SubChapter 01</title>
<simpara>Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet&#8217;teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.</simpara>
</section>
<section xml:id="_subchapter_02">
<title>SubChapter 02</title>
<simpara>Yinelenen bir sayfa içeriğinin okuyucunun dikkatini dağıttığı bilinen bir gerçektir. Lorem Ipsum kullanmanın amacı, sürekli 'buraya metin gelecek, buraya metin gelecek' yazmaya kıyasla daha dengeli bir harf dağılımı sağlayarak okunurluğu artırmasıdır. Şu anda birçok masaüstü yayıncılık paketi ve web sayfa düzenleyicisi, varsayılan mıgır metinler olarak Lorem Ipsum kullanmaktadır.</simpara>
</section>
</sect1>
<sect1 xml:id="_chapter_02">
<title>Chapter 02</title>
<simpara>1500&#8217;lerden beri kullanılmakta olan standard Lorem Ipsum metinleri ilgilenenler için yeniden üretilmiştir. Çiçero tarafından yazılan 1.10.32 ve 1.10.33 bölümleri de 1914 H. Rackham çevirisinden alınan İngilizce sürümleri eşliğinde özgün biçiminden yeniden üretilmiştir.</simpara>
<programlisting language="java" linenumbering="unnumbered">public interface Editable{

    void useAsciidocFX();

}</programlisting>
</sect1>
<sect1 xml:id="_chapter_03">
<title>Chapter 03</title>
<simpara>Lorem Ipsum pasajlarının birçok çeşitlemesi vardır. Ancak bunların büyük bir çoğunluğu mizah katılarak veya rastgele sözcükler eklenerek değiştirilmişlerdir. Eğer bir Lorem Ipsum pasajı kullanacaksanız, metin aralarına utandırıcı sözcükler gizlenmediğinden emin olmanız gerekir. İnternet&#8217;teki tüm Lorem Ipsum üreteçleri önceden belirlenmiş metin bloklarını yineler.</simpara>
<table frame="all" rowsep="1" colsep="1">
<title>Table Title (Optional)</title>
<?dbhtml table-width="100%"?>
<?dbfo table-width="100%"?>
<?dblatex table-width="100%"?>
<tgroup cols="4">
<colspec colname="col_1" colwidth="106*"/>
<colspec colname="col_2" colwidth="106*"/>
<colspec colname="col_3" colwidth="106*"/>
<colspec colname="col_4" colwidth="106*"/>
<thead>
<row>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
<entry align="left" valign="top">abcdefq</entry>
</row>
</thead>
<tbody>
<row>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
</row>
<row>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
<entry align="left" valign="top"><simpara>abcdefq</simpara></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
</appendix>
</book>
rahmanusta commented 9 years ago

Is there a bug or usage mistake ? @mojavelinux

mojavelinux commented 9 years ago

@rahmanusta this is one of those gray areas in AsciiDoc. Technically, an appendix can be specified as level-0, but it's always interpretted as level-1. However, there is inconsistency with how Asciidoctor is parsing this compared to AsciiDoc Python. Asciidoctor is getting confused about the chapters that appear after the appendix and is reporting warnings when running your document. AsciiDoc Python parses it properly.

The technically correct way to solve this problem is to move the appendix to a level-1 heading (parallel to the chapters). In your case, that would be:

= Document Title
:doctype: book

[appendix]
== Appendix

appendix content

== Chapter 01

chapter 01 content

== Chapter 02

chapter 02 content

I'll file an issue in Asciidoctor core to track this down, but I'm inclined to say that we should change the spec for AsciiDoc here because it's really confusing to have a section which looks like it's at one level, but it's actually at another level. An appendix is a chapter for all intents and purposes.

rahmanusta commented 9 years ago

Thanks @mojavelinux thats solved my problem

mojavelinux commented 9 years ago

Nice! I'll close this issue since I opened one in core.