DSSSL and braille

Subject: DSSSL and braille
From: David Pawson <DPawson@xxxxxxxxxxx>
Date: Thu, 31 Jul 1997 10:10:05 +0000
Use of DSSSL in Braille Production.
(Since the list is fairly quiet).

I have been asking about dsssl
as a possible tool for braille production. 
 I describe below the overall production 
process and outline how I see dsssl fitting into that.
What I would appreciate from the list is guidance on the
formatting phase, for which I believe dsssl is ideally suited.
We have software and (are the author of) the rules for 
English braille, its contraction etc. 

If you could help get us started we are prepared to 
pour over the standard to build on whatever you can give
us to build in the remaining rules. Rather than confuse
the issue with my limited knowledge of dsssl, I have written 
the style sheet requirement in pseudo dsssl style language,
in the hope that you may be able to make sense of it.







Overall Process Description.

1. SGML markup of source file using RNIB DTD.
2. Contraction phase. 
	This is only used for grade 2 braille.
	For simplicity I have assumed grade 1
	braille, which does not have the 
	contractions. 
E.g. The word English becomes 5DLI%, where the 
         initial EN is contracted to ASCII 5, the 
         final SH is contracted to %

	This process is readily 
	implementable via available software,
	replacing character groupings by
	contractions. The output is again,
	simple ASCII
	
    
3. Formatting phase. The markup is used to determine
  	the format. All markup is removed.
  	Controls for the process 
	are the braille page size and the stylesheet.
4. Feed the output file from process 3 to an embosser to
   	produce the braille.The embosser works as an old
	line printer, each page being a fixed size of
	multi-fold paper, needing a FF character (normally
	as part of the header) to move on to the next 
	line. Think of the embosser as a printer taking 
	fixed font characters, one per 'cell' using 
	ASCII input which it converts to a six dot matrix
	driving the pins of the printer on a one to one
	relationship between the ASCII character and 
	a combination of the six 'dot' positions.



Presently available tools.
process 2 is available, but is ignored here for simplicity

Process 3. This phase offers the 
best potential for the use of DSSSL or CSS.

Example 

Process 1 output

<book>
<title> Example Text </title>
<author> Dave Pawson </author>
<head1>Introduction </head1>
<para>Telling the story</para>
<ul>
<li>part 1</li>
<li>part 2</li>
</ul>
<head2>The story</head2>
<para>This is the story</para>
</book>

 Process 2 output (uncontracted- hence identical)


Process 3 output

                                    #A

             EXAMPLE TEXT
             DAVE PAWSON
             INTRODUCTION
  TELLING THE STORY
    part 1
    part 2

The story
  This is the story
             333333333333

This file is fed to the embosser and produces the braille 
copy. 
Notes: The #A is the page number in a running header.
	The line of 3's is an end of section marker
	

Stylesheet requirement (very basic)


Embossing is done on a fixed width font basis
using cells, each of which holds one
braille character using paper sizes as shown:

Example sizes are 
lines  cells per row	Name
25	38		book
25	28		A4
28	38		Magazine
11	28		A5-landscape
18	20		A5-portrait
12	38		Inter-line

element book    process-children, align:centre, add-literal
"333333333333"

element title   new page, centred, space-before 1 line,
                process-children, para-break-after*
element head1   centred, new para, process-children,
para-break-after*
element head2   centred, process-children, para-break-after*

* Note: All 3 elements are left-margin >= 5 cells
               right-margin >=5 cells. I.e. word wrap to permit the

		stated margins.

element head3   space-before 1 line, hanging margin of 4
cells,
                process-children
element head 4  if word-count of head <4
            precede each word by literal-char "."
        else
            precede first word by literal-char ".."
        output-remaining words
        precede last word by literal-char "."
element para    make-para-break, indent by 2 cells
element para para    make-para-break, add additional indent
of 2
element para para para     make-para-break, add additional
indent of 2
element ul  indent first line by 2 cells more than parent
element note    make-para-break, insert 20 literal-chars
        process-children
        insert 20 literal-chars
        make-para-break
create page header consisting of
        left aligned print-page-number
        centred section-number, section title*
        right aligned braille page-number
[* note: maximum width = 10 less than page width]
element extract    make-para-break, add additional indent of
4 to all
        lines (including runovers)


Hope this gives you an idea of what I meant!

One item of concern is the need to 'add a two cell 
indent' repeatedly. In a procedural language I would
have a global variable hold the present value, and
use this to judge where to take the margin. This is
used so often in braille that it makes me ask how
this might be done in DSSSL (scheme). Is there a
function to find out what the present value is and
make it relative (add 2 char positions to whatever
is present?)

Regards, Dave Pawson
	


 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread