about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2022-01-19 18:12:02 +0100
committerbptato <nincsnevem662@gmail.com>2022-01-19 18:21:33 +0100
commitbcaaf4e6b68ce1245558bc41559116a7a3296904 (patch)
treec6d97036f0bd553802917e17a2baf86e67a27d43 /src
parent0c0aa01a19d5dfb86562650c200cdc8c4b216fa0 (diff)
downloadchawan-bcaaf4e6b68ce1245558bc41559116a7a3296904.tar.gz
Re-implement inline blocks
Diffstat (limited to 'src')
-rw-r--r--src/css/cascade.nim6
-rw-r--r--src/layout/box.nim5
-rw-r--r--src/layout/engine.nim80
-rw-r--r--src/render/renderdocument.nim5
4 files changed, 62 insertions, 34 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim
index 3f85bfd8..fcec96d6 100644
--- a/src/css/cascade.nim
+++ b/src/css/cascade.nim
@@ -100,17 +100,13 @@ func calcRules(elem: Element, rules: CSSStylesheet): RuleList =
 #TODO couldn't these two procedures be merged?
 proc applyNormal(ares: var ApplyResult, decls: seq[CSSDeclaration]) =
   for decl in decls:
-    if decl.important:
-      ares.important.add(decl)
-    else:
+    if not decl.important:
       ares.normal.add(decl)
 
 proc applyImportant(ares: var ApplyResult, decls: seq[CSSDeclaration]) =
   for decl in decls:
     if decl.important:
       ares.important.add(decl)
-    else:
-      ares.normal.add(decl)
 
 proc applyRules(element: Element, ua, user, author: RuleList, pseudo: PseudoElem) =
   var ares: ApplyResult
diff --git a/src/layout/box.nim b/src/layout/box.nim
index 74e97c97..44e423ba 100644
--- a/src/layout/box.nim
+++ b/src/layout/box.nim
@@ -25,6 +25,7 @@ type
   InlineAtom* = ref object of RootObj
     relx*: int
     width*: int
+    height*: int
 
   InlineWord* = ref object of InlineAtom
     str*: string
@@ -53,7 +54,6 @@ type
     maxwidth*: int
 
   BlockContext* = ref object of InlineAtom
-    height*: int
     margin_done*: int
     margin_todo*: int
     inline*: InlineContext
@@ -84,6 +84,7 @@ type
     newline*: bool
   BlockBox* = ref object of CSSBox
     bctx*: BlockContext
-  InlineBlockBox* = ref object of CSSBox
+  InlineBlockBox* = ref object of BlockBox
+    ictx*: InlineContext
   ListItemBox* = ref object of CSSBox
 
diff --git a/src/layout/engine.nim b/src/layout/engine.nim
index 417d5d2c..562c5b4e 100644
--- a/src/layout/engine.nim
+++ b/src/layout/engine.nim
@@ -515,15 +515,20 @@ proc newWord(state: var InlineState) =
   word.nodes = state.nodes
   state.word = word
 
+proc addAtom(row: InlineRow, atom: InlineAtom) =
+  atom.relx = row.width
+  row.width += atom.width
+  row.height = max(row.height, atom.height)
+  row.atoms.add(atom)
+
 proc addWord(state: var InlineState) =
   if state.word.str != "":
     let row = state.ictx.thisrow
     var word = state.word
-    word.relx = state.ictx.thisrow.width
-    row.width += word.width
-    if row.height == 0: #first word => higher than 0
-      row.height = 1
-    row.atoms.add(word)
+    # Note, this should technically be set as soon as word has one letter but
+    # in practice this doesn't matter.
+    word.height = 1
+    row.addAtom(word)
     state.newWord()
 
 proc finishRow(iass="o">="#ffffff">ranger</font></a>.ext</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/hut/ranger/ranger/ext/__init__.py">/home/hut/ranger/ranger/ext/__init__.py</a></font></td></tr></table>
    <p><tt>This&nbsp;package&nbsp;includes&nbsp;extensions&nbsp;with&nbsp;broader&nbsp;usability</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Package Contents</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="ranger.ext.accumulator.html">accumulator</a><br>
<a href="ranger.ext.command_parser.html">command_parser</a><br>
<a href="ranger.ext.curses_interrupt_handler.html">curses_interrupt_handler</a><br>
<a href="ranger.ext.get_all_modules.html">get_all_modules</a><br>
</td><td width="25%" valign=top><a href="ranger.ext.get_executables.html">get_executables</a><br>
<a href="ranger.ext.human_readable.html">human_readable</a><br>
<a href="ranger.ext.iter_tools.html">iter_tools</a><br>
<a href="ranger.ext.mount_path.html">mount_path</a><br>
</td><td width="25%" valign=top><a href="ranger.ext.move.html">move</a><br>
<a href="ranger.ext.openstruct.html">openstruct</a><br>
<a href="ranger.ext.shell_escape.html">shell_escape</a><br>
<a href="ranger.ext.shutil_generatorized.html">shutil_generatorized</a><br>
</td><td width="25%" valign=top><a href="ranger.ext.signal_dispatcher.html">signal_dispatcher</a><br>
<a href="ranger.ext.waitpid_no_intr.html">waitpid_no_intr</a><br>
</td></tr></table></td></tr></table>
</body></html>