OSSP CVS Repository

ossp - ossp-pkg/sugar/BRAINSTORM.txt 1.1
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/sugar/BRAINSTORM.txt 1.1

Konzepte:
- headers    Author: ...
- 1d-block   foo XX bar XX quux
- 2d-block   XX ...
- table      ++ | .. |
- XX tags    XX
- entities   ..{xxx}..

Examples:

 o '' XX foo 
         bar
       baz
      quux

   XX is applied to "foo bar baz", not to "quux".

 o '' XX foo XX bar
      quux

   XX is applied to "foo", not to "bar quux"

 o '' foo bar XX quux

   XX is applied to "quux" __and__ "foo bar", because
   not closed XX environment wraps around at end of paragraph.
   With this the following is equvalent:

   '' XX foo
      bar quux XX

   '' XX foo
      bar quux

   '' foo
      bar quux XX

   this way headings are not special case:

   '' ==heading==

   '' ==heading

   '' heading==

   '' heading
      ==

   '' heading
      =======

   begins a 2d block with head tag and ends (explicitly
   or implicitly) with the same tag's markup, the 2d block
   is treated as a "head line" (for table of contents, etc.)
   Else is is treated as "paragraph heading" (not included
   in table of contents).

Brainstormings with Christian Reiber:

1. Scanner erkennt die Intentation, strippt sie
   weg, berechnet aber durch sie die "schliessenden
   Klammern" zu den 2d-tags.

2. Scanner erkennt auch die Unterschiede zwischen
   1d und 2d tags, da der Parser ja keinerlei
   Unterscheidung treffen kann (spaces/indent nicht mehr da)

3. Scanner hat einen Look-Ahead von 1 Zeile plus
   ihrem Indent

4. Das Parsen von Headern "(====)" geht einfach:
   Der Scanner erkennt nur das "^========" und
   ein Baumtransformator haengt spaeter 
   die Sohn-Sequenz "<paragraph> x ..... y <header>"
   um in "<parapraph> <header> x ... y", d.h.
   der transformator geht bis zum letzten Paraphraph
   Knoten zurueck.

    If the "text" on hyperlinks is missing in links, the reference is printed
    instead. For internal links the text is chapter and pagenumber
    (except for HTML, there exists real hyperlinks).

Stichworte:

Whatever   | Irgendwas
---------- | -----------------------------
Brain Dump | VHIT (Vom Hirn ins Terminal) 
Blabla     | ASCII WYSIWYG

Design-Grundsaetze
------------------
1. KISS bei der Sprache (Beschreibung geht auf eine Seite und ist ISO-Latin-1!)
2. KISS bei der Implementierung (Code-Groesse <= 80KB)
3. Wir implementieren nur das, was wir _WIRKLICH_ brauchen.
4. Sugar ist wie Unix: Wenige Konzepte existieren und 
   werden konsequent durchgezogen
5. Sugar hat *keine* GUI, sondern ist ein Filter!
   Beispielaufruf:
   $ cat test.txt | sugar --html -otest.html
6. Sugar ist stand-alone (bis auf Postscript),
   man braucht also nicht 1001 Tools bei der Installation
7. Release early, release often (Eric S. Raymond)
8. Jedes Markup kann immer eindeutig formuliert werden (=non-magic),
   nur sieht es dann eventuell nicht so schoen aus.
   Wenn man sich an bestimmte Regeln haelt, kann man
   im Magic Mode ASCII-Aesthetik pur nutzen.
   Non-Magic ist immer nutzbar und aktiviert, Magic-Mode per default an, aber
   kann abgeschalten werden (per -xx und/oder inline tag) Idee: -xx im
   Dokument direkt eingeben ala vi/less

Was Sugar nicht ist
-------------------
1. Sugar ist _keine_ Textverarbeitung oder ein DTP-Tool
2. Sugar ist keine Markup-Sprache (der Text ist bereits das Endprodukt)
3. Sugars Brother is more/less and not nroff (i.e. Sugar is fast!)

Anwendungsfeld
--------------
1. Technische Dokumentation fuer mehrere Darstellungsplatformen:
   Plain ASCII (= Sugar Quelle), roff/-man (Unix), HTML (= Online), PS (= Print)
2. Brain Dump!

Optionale Zusatzfeatures
------------------------
- ToC: Automatische Generierung 
- Numerierung von Headern
- Index
- Aufrufen von Makroprozessor: m4

Tabellen:
---------
   o Tabellen sind Bloecke und werden mit ++ eingeleitet wie
     andere Bloecke auch, d.h. Ende ist bei Ausrueckung oder
     selber Level.
   o Jede Tabellenzeile faengt mit einem | an und immer in der selben Spalte.
   o Die |'s der ersten Zeile geben die Gesamtanzahl und die Normposition
     der Spalten an.
   o Besteht die erste Zeile nur aus |'s (und keinem Inhalt), dann
     ist sie eine _reine_ Normungszeile und erzeugt auch keine Leerzeile.
     Ansonsten (Zeile 2, ...) kann man so selbstverstanelich eine
     Leerreihe erzeigen.
   o Spaltentrennungs-| koennen an belieber Stelle stehen, wenn
     genuegend da sind. 
   o Folgespalten sind dadurch gekennzeichnet, dasz ihr | eingerueckt
     erscheint.
   o Multicolums liegen vor, wenn weniger |'s auftreten, als die
     Normungszeile vorgibt.  Die Erkennung der Span's erfolgt dabei ueber die
     Position der |'s, d.h. sie muessen die |'s der Normunszeile matchen.
     Zusaetzlich kann die Normungszeile beliebig oft wiederhlt werden.
     Aber dabei darf sich nur die Position der |'s aendern, aber
     nicht die Anzahl (klar!).
   o Leerzeilen bestehen aus nur einem |' am Anfang und sonst nichts.
   o Normungszielen haben mind.(!) 2 |'s.
   o Leerzeilen erzeugen im Output soviele |'s wie die Normungszeile
     vorgibt. Fuer andere Layouting-Dinge muss man z.B. ``| \_'' schreiben.
   o In einer Tabelle koennen alle Zeichenformatierungen genutzt werden.
   o In der Normungszeile kann mit den Zeichenformatierung-Tags
     die Formatierung der Tabellenspalten angegeben werden!
   o Wie gibt man Tabellenzeilen an, die als Headers gelten?
     Eventuell gar nicht, wenn man Tabellen nicht umbrechen laesst,
     denn dann muss man diese headerzeilen auch nicht wiederholen
     und muss deshalb solche nicht explizit auszeichnen

     ++ | ((** | %% | )) |
        | foo | quux | bar |
        | foooooooo | quux |
   
3. Block-Konzept

   Es gibt zwei Blockkonzepte: 
     - character block (eindimensional) und 
     - line block (zweidimensional).

   Der //character block// wird durch das Tag eingeleitet und wieder beendet. Das
   Paragraph Ende beendet in jedem Fall den character block.

   Der //line block// beginnt mit dem Tag __ausgerückt__, wobei davor keine
   Leerzeile stehen muß (ein \n und ggf. \s davor reicht). Er enthält ganze
   Zeilen und zwar solange, wie Text in der Zeile mindestens zwei Leerzeichen
   weiter rechts beginnt als das einleitende Tag. Achtung: Tags stellen selbst
   __nicht__ den Zeilenanfang dar! Damit kann ich also line blocks schachteln.
   (Anders gesagt: Es geht nicht um den linken Rand der Textdatein, sondern um
   den linken Rand des übergeordneten Line Blocks.)

   Automatischer reflow durch den Editor ist bei character blocks **kein**
   Problem, da das Tag keine positionsabhängige Bedeutung hat (daher wurde
   auch verworfen, daß ein Tag am Zeilenanfang, aber nicht ausgerückt, am
   Zeilenende beendet wird). Das Start-Tag beim line block wird vom Editor
   nicht versetzt (wenn er was taugt).

   Möglicherweise kann für bestimmte Tags das Ende des char blocks auch das
   Zeilenende (nicht das Para. Ende) sein. Gedacht ist an Kommandos:

   Gehen sich nach http://laber.lall 
   Das ist ## eine blöde Zeile und ich will daß ##das## unterstrichen ist
   ''##das ist ungut##
     ##das ist intuitiver, bedeutet aber Kommandoende=Zeilenende
   
   Das wäre dann eine Eigenschaft des Tags, d.h. es verhält sich dann
   //immer// so (und nicht mal so und mal anders).

   Beispiele:

   1. ''Dies ist ein Beispiel für einen Text, __in dem der zweite
        Halbsatz unterstrichen wird__, obwohl er sich über eine
        Zeilengrenze erstreckt.

   o. ''__In diesem Fall wird der line block unterstrichen. Das
          geht solange, bis der Text wieder ausgerückt wird.

          Auch Leerzeilen stellen da kein Hindernis dar.

        Diese Zeile beendet den Line Block.

   o. ''Ein Sonderfall: __Dieser Text hat kein Ende-1d-Tag.
        Er wird dann durch das Paragraph-Ende beendet.

        Ab hier also keine Unterstreichung mehr.

   Das haben wir gemacht, weil sonst bei vergessenen Endetags
   das Restdokument fehlformatiert wird.
        
o  Native-Output-Stuff
   xxxx

   ``jdjlasdjajlad``
   skd asdk s
   dsö ksaölkdaös##

   dfkdjsdal
     html

   xxxx

   ##endif
   
   xxxx

o  Comments
   ##//
   ##/*
   ##*/

5. Inline-Images
   - Source ist immer Bitmap-Grafik im GIF Format!
     (Fuer ASCII: gifscii, Fuer HTML: Direkt, Fuer PS: gif2ps)

     ##img xx.gif size=jsjs s=xx

- UNBEDINGT Unicode und UTF-8 unterstutezen von anfang an!

Idea for homogenous tags:
- any XX tags can be repeated multiple times, ie XXXXX is valid also
- any begin XX tag at the end of a paragraph wraps around its scope, ie
  it is applied to the whole paragraph as it would stand at the start
  of the block (marged out?).
Results:
- headlines are marked equally with blocks

------------------------------------------------------------------------------

OSSP Sugar Brainstorming Meeting 27-06-2001 @ C&W
=================================================

gewuenschter output: html (online), text, pdf/ps (print)
    |sugar, soll schnell sein fuer preview, 1-2sec
gewuenschter input: simple (20-30 tags), wenig Stilmittel, aehnlich textoutput

*eindeutige* Tags in SXML
SRML invisible markup

pre-processing
   pass 1: include, macros,
   pass 2: area substitution, diversion
meta-information
   author, mtime, ctime, title, abstract, subject, version
   parameters passthrough for backends
2d-block
   headings 1-4
   paragraph
   align left, right, centered, indented(?)
   preformatting
   lists, ordered/callout, unordered, description
   import extern(URL)/embedded vs. include
   figures format(EPS,PNG,TXT), scaling
   tables, titlerow, rows, columns, cells, spanning, hlines, vlines, nesting
   caption
2+1d block
   verbatim
   boxed, striked, tele-typed
   logical markup (emphasize, nonbreaking)
   notes foot, end, margin
   shellescape
1d-block
   bold, italic, underline
   escaping(?)
   linebreaks(?)
   subscript, superscript
   anchores, references intern, extern
   index items
   word-breaking
   entitities (ISO chars, newline, etc.)

o no align (left, center, right, indented) in general
  only needed in tables
  idea: first line specified table layout like TeX
o eventuell: kein escaping, man koennte verbatim hernehmen
  aber: wie escape ich dann verbatim tag!
o eventuell kein linebreak, da normaler linebreak
  eher neuer paragrpah sein sollte und fuer andere
  preformatted ausreicht!

o generell sugar koennte immer SXML sein, aber
  abkuerzend koennte es SRML Teile enthalten
o 

------------------------------------------------------------------------------

Ideas from AFT:

- non-intended verbatim mode with optional filtering for pretty-printing
  | ^<<[filter]
  | ^>>

- a pre-formatted mode would be cool, too.

------------------------------------------------------------------------------
  XML-FO 

  panda+pandascript (C API, Perl API, Shell API, GPL)
  http://www.stillhq.com/cgi-bin/getpage?area=panda&page=index.htm

  pdflib  http://www.pdflib.com/
  clibpdf http://www.fastio.com/
  

CVSTrac 2.0.1