schhtml to format, który korzysta w maksymalnym stopniu ze składni html'a ale nie aspiruje do zgodności z tym formatem. Główną ideą formatu schtml jest prostota przy zachowaniu podobieństwa do html'a. Schtml jest wykorzystywany przez pytigona podczas renderowania formularzy w kliencie graficznym opartym na wxPython. SChtml służy także do generowania wydruków w formacie pdf.
HTML_TAGS = ["html", "head", "comment"]
BLOCK_TAGS = ["body", "form"]
ATOM_TAGS = [ "br", "a", "img", "calc", "hr", ]
PAR_TAGS = [ "p", "h1", "h2", "h3", "h4", "h5", "h6", "i", "b", "s", "small", "big", "sub", "sup", "tt", "span", "ol", "ul", "li", "div", ]
TABLE_TAGS = ["table", "caption", "tr", "td", "th"]
PAGE_TAGS = [ "page", "header", "footer", "newpage", ]
EXTRA_TAGS = [ "vimg", ]
CSS_TAG = [ "link", ]
Rozmieszczenie elementów na stronie różni się w zależności czy są one bezpośrednimi potomkami elementu body czy są głębiej zagnieżdżone. Bezpośredni potomkowie body umieszczani są jeden pod drugim. Dla przykładu strona:
html
body
div widht=50%
.Hello
div width=50%
.Hello
będzie zawierała 2 napisy Hello, jeden pod drugim. Aby elementy div, których znalazły się obok siebie należy je umieścić wewnętrz dodatkowego elementu div, tak jak w poniższym przykładzie:
html
body
div width=100%
div widht=50%
.Hello
div width=50%
.Hello
Inaczej także wyświetlane są tabele w zależności czy są potomkami elementu body czy nie. Wiersze tabeli będącej potomkiem body mogą być przenoszone na kolejne strony. Tabela która nie jest bezpośrednim potomkiem body i która nie zmieści się cała na bieżącej stronie będzie w całości przenoszona na kolejną stronę.
SChHtml może renderowany html body page header footer
newpage
register_tag_map("page", Page) register_tag_map("header", HeaderFooter) register_tag_map("footer", HeaderFooter) register_tag_map("newpage", NewPage)
schtml obsluguje uproszczony format css.
Obsługiwane elementy css:
height: [ "50", "50%" ]
color: [ "#ff00ff", "#fff", "rgb(r,g,b)" ]
white-space: "pre"
bgcolor
background-size: ["cover", "contain", "100%"]
border-top: size
border-color: #ff00ff
margin: size margin: top_down left_right margin: top right bottom left allsizes in px (rem, em are replaced to px) or % (for % of element (or parent of element if the element has not yet calculated sizes) width or height )
padding: size
cellspacing: size
src: image_path
align: ['left', 'center', 'right']
Umieść gdzieś na stronie: a wygenerowany ze strony dokument pdf będzie miał poziomą orientację.
todo: size[calc]
konstrukcja: "selektor selektor2 selektro3" w schtml jest równoznaczna "selektor > selektro2 > selektor3" w html'u.
Przy eksporcie html'a do formatów: pdf i spdf, możesz generować automatyczne nagłówki i stopki na każdej renderowanej stronie.
Do definicji tych nagłówków i stopek służy tag
page
header height=15
p width=100%...Hello from Pytigon
footer height=15
p width=100%,,,align=center...Page <calc>body.page</calc>
Kolejnym elementem wspierającym podział na strony jest tag
Ze względów wydajnościowych element div jest inaczej renderowany w zależności od miejsca w gdzie się znajduje. Jeżeli elementem nadrzędnym w hierarchii jest element body, div zajmuje całą szerokość strony, po każdym elemencie div strona może być łamana. Jeżeli chcesz aby div zajmował tylko część szerokości strony musisz go zagnieździć, np tak:
html
body
div
div width=50%
div width=50%
Innym tagiem, którego renderowanie jest zależne od położenia w strukturze html jest table. Jeżeli elementem nadrzędnym elementu table jest body, łamanie strony może nastąpić po każdym wierszu. Jeżeli table jest położone głębiej w strukturze, tabela jest renderowana na jednej stronie.
Ihtml jest bardzo uproszczoną wersją css, format nie aspiruje do bycia zgodnym z css. Icss stara się łączyć prostotę implementacji z maksymalnymi możliwościami. Jeżeli to możliwe zachowana jest zgodność z css, większość skomplikowanych w implementacji elementów nie zostało zaimplementowanych. Niektóre brakujące funkcjonalności zostały zastąpione przez nowe elementy, łatwe w implementacji jednocześnie znacznie poszerzające możliwości formatu Ihtml.
Jednym z takich elementów jest atrybut image-type dostępny dla taga background-image W ihtml atrybut ten może przyjmować wartości: "simple", "simple_min", "frame"
przykład użycia: background-image=url(file:///static/background.svg),,,image-type=frame
Wartość simple, powoduje że obrazek tła jest rozciągany do wielkości obiektu, z którym jest powiązany Wartość simple-min, działa tak jak simple, z tym że rozciąganie jest proporcjonalne, jeżeli proporcje obrazka są inne niż elementu nadrzędnego obraz w jednej osi jest skalowany do wielkości obrazka, w drugiej osi zostaj w związku z tym puste miejsc Wartość frame - pozwala zdefiniować obraz tła, który skalowany jest w sposób pozwalający tworzyć skomplikowane ramki wokół obiektu. Przy skalowaniu typu frame, obraz jest dzielony na 9 równych prostokątów, w trzech kolumnach i trzech rzędach. 4 obrazki narożne nie są skalowane, brzegowe elementy: górny i dolny rozciągane są w poziomie aby razem z narożnikami sajeły pełno szerokość obiektu nadrzędnego, elementy brzegowe lewy i prawy rozciągane są w pionie, element środkowy jest skalowany aby wypełnić w 100% wolną przestrzeń obrazka po przeskalowaniu. Takie skalowanie sprawdza się przy tworzeniu obramowania, możesz sporzadzić wzorzec ramki jako obrazek wektorowy svg. Obrazek taki przeskaluje się dostosowując do obiektu, jednocześnie grubość ramek i ich narożne zaokrąglenie pozostanie niezmienne. Na obrazku svg możesz tworzyć cienie, dekoracje itp.
Rozmiar: wartości atrybutów określających rozmiar (np width) zostały bardzo uproszczone. Wpisy em, rem w rozmiarach są ignorowane, co oznacza że 1em jest równoznaczne 1px. Jednostka wielkości może być wyrażona w pikselach lub w %. Jeżeli wielkość określona jest w procentach, będzie on liczony od wielkości elementu nadrzędnego. Wielkość niektórych elementów nadrzędnnych nie jest znana w momencie renderowania elementu podrzędnego. W takich przypadkach wartość procentowa obliczana jest w stosuknu do pierwszego przodka o ustalonych wymiarach.
Atrybut: line-spacing Dodatkowy atrybut określający odstęp w pionie pomiędzy kolejnymi liniami.
integracja icss z ihtml w ihtml wszystkie elementy, które występują w css mogą być umieszczone w ihtml i odwrotnie.
Możesz zapisać w icss:
td.test margin: 10
Możesz ten sam atrybut margin zapisać w ihtml, np:
table
tr
td...margin=10
Ta zasada dotyczy wszystkich atrybutów obsługiwanych w icss jak i wszystkich atrybutów tagów zdefiniowanych w ihtml.
icss Jeżeli