From 1d14b271fa3419e81ab843ba78eafc8d32119faf Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Sat, 12 Mar 2016 22:16:32 -0500 Subject: [PATCH] parser: use strings for node types --- editor.coffee | 45 ++++++++++++++++++++------------------------- parser.coffee | 20 ++++++++++---------- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/editor.coffee b/editor.coffee index 6a9d361..7d34100 100644 --- a/editor.coffee +++ b/editor.coffee @@ -17,11 +17,6 @@ # SETTINGS overlay_padding = 10 -TYPE_TAG = peach_parser.TYPE_TAG -TYPE_TEXT = peach_parser.TYPE_TEXT -TYPE_COMMENT = peach_parser.TYPE_COMMENT -TYPE_DOCTYPE = peach_parser.TYPE_DOCTYPE - timeout = (ms, cb) -> return setTimeout cb, ms debug_dot_at = (doc, x, y) -> @@ -281,10 +276,10 @@ instantiate_tree = (tree, parent) -> remove = [] for c, i in tree switch c.type - when TYPE_TEXT + when 'text' c.el = parent.ownerDocument.createTextNode c.text parent.appendChild c.el - when TYPE_TAG + when 'tag' if c.name in ['script', 'object', 'iframe', 'link'] # TODO put placeholders instead remove.unshift i @@ -310,7 +305,7 @@ traverse_tree = (tree, cb) -> return done find_next_cursor_position = (tree, n, i) -> - if n.type is TYPE_TEXT and n.text.length > i + if n.type is 'text' and n.text.length > i orig_xyh = cursor_to_xyh n, i unless orig_xyh? console.log "ERROR: couldn't find xy for current cursor location" @@ -323,7 +318,7 @@ find_next_cursor_position = (tree, n, i) -> state_before = true found = null traverse_tree tree, (node, state) -> - if node.type is TYPE_TEXT and state_before is false + if node.type is 'text' and state_before is false if cursor_to_xyh(node, 0)? found = node return true @@ -335,7 +330,7 @@ find_next_cursor_position = (tree, n, i) -> return null find_prev_cursor_position = (tree, n, i) -> - if n? and n.type is TYPE_TEXT and i > 0 + if n? and n.type is 'text' and i > 0 orig_xyh = cursor_to_xyh n, i unless orig_xyh? console.log "ERROR: couldn't find xy for current cursor location" @@ -349,7 +344,7 @@ find_prev_cursor_position = (tree, n, i) -> found_prev = n? found = null traverse_tree tree, (node) -> - if node.type is TYPE_TEXT + if node.type is 'text' if node is n if found_prev? found = found_prev @@ -364,7 +359,7 @@ find_prev_cursor_position = (tree, n, i) -> find_loc_cursor_position = (tree, loc) -> for c in tree - if c.type is TYPE_TAG or c.type is TYPE_TEXT + if c.type is 'tag' or c.type is 'text' bounds = get_el_bounds c.el continue if loc.x < bounds.x continue if loc.x > bounds.x + bounds.w @@ -373,7 +368,7 @@ find_loc_cursor_position = (tree, loc) -> if c.children.length ret = find_loc_cursor_position c.children, loc return ret if ret? - if c.type is TYPE_TEXT + if c.type is 'text' # click is within bounding box that contains all text. return [c, 0] if c.text.length is 0 before_i = 0 @@ -429,14 +424,14 @@ is_space = (chr) -> tree_remove_empty_text_nodes = (tree) -> empties = [] traverse_tree tree, (n) -> - if n.type is TYPE_TEXT + if n.type is 'text' if n.text.length is 0 empties.unshift n return false for n in empties # don't completely empty the tree if tree.length is 1 - if tree[0].type is TYPE_TEXT + if tree[0].type is 'text' console.log "oop, leaving a blank node because it's the only thing" return n.el.parentNode.removeChild n.el @@ -458,13 +453,13 @@ tree_dedup_space = (tree) -> iterate = (tree, cb) -> for n in tree - if n.type is TYPE_TEXT + if n.type is 'text' i = 0 while i < n.text.length # don't foreach, cb might remove chars advance = cb n, i if advance i += 1 - if n.type is TYPE_TAG + if n.type is 'tag' block = is_display_block n.el if block cb null @@ -788,7 +783,7 @@ class PeachHTML5Editor prev_bounds = x: 0, y: 0, w: 0, h: 0 alpha = 0.1 while n?.el? - if n.type is TYPE_TEXT + if n.type is 'text' n = n.parent continue bounds = get_el_bounds n.el @@ -814,7 +809,7 @@ class PeachHTML5Editor inner_flags = want_nl: true is_br = false switch n.type - when TYPE_TAG + when 'tag' if n.name is 'br' is_br = true is_text = false @@ -857,12 +852,12 @@ class PeachHTML5Editor inner_flags.block = true is_block = true in_flow_block = in_flow - when TYPE_TEXT + when 'text' is_text = true is_block = false in_flow = true in_flow_block = false - else # TYPE_COMMENT, TYPE_DOCTYPE + else # 'comment', 'doctype' is_text = false is_block = false in_flow = false @@ -875,7 +870,7 @@ class PeachHTML5Editor ret += "\n" ret += indent switch n.type - when TYPE_TAG + when 'tag' ret += '<' + n.name attr_keys = [] for k of n.attrs @@ -894,11 +889,11 @@ class PeachHTML5Editor if n.children.length ret += @pretty_html n.children, next_indent, inner_flags ret += "" - when TYPE_TEXT + when 'text' ret += enc_text n.text - when TYPE_COMMENT + when 'comment' ret += "" # TODO encode? - when TYPE_DOCTYPE + when 'doctype' ret += " 0 ret += " \"#{n.public_identifier}\"" diff --git a/parser.coffee b/parser.coffee index 7992244..cdc3d1f 100644 --- a/parser.coffee +++ b/parser.coffee @@ -93,10 +93,10 @@ from_code_point = (x) -> return String.fromCharCode((x >> 10) + 0xd800, (x % 0x400) + 0xdc00) # Each node is an obect of the Node class. Here are the Node types: -TYPE_TAG = 0 # name, {attributes}, [children] -TYPE_TEXT = 1 # "text" -TYPE_COMMENT = 2 -TYPE_DOCTYPE = 3 +TYPE_TAG = 'tag' # name, {attributes}, [children] +TYPE_TEXT = 'text' # "text" +TYPE_COMMENT = 'comment' +TYPE_DOCTYPE = 'doctype' # the following types are emited by the tokenizer, but shouldn't end up in the tree: TYPE_START_TAG = 4 # name, [attributes ([key,value]...) in reverse order], [children] TYPE_END_TAG = 5 # name @@ -105,14 +105,14 @@ TYPE_AFE_MARKER = 7 # http://www.w3.org/TR/html5/syntax.html#reconstruct-the-act TYPE_AAA_BOOKMARK = 8 # http://www.w3.org/TR/html5/syntax.html#adoption-agency-algorithm # namespace constants -NS_HTML = 1 -NS_MATHML = 2 -NS_SVG = 3 +NS_HTML = 'html' +NS_MATHML = 'mathml' +NS_SVG = 'svg' # quirks mode constants -QUIRKS_NO = 1 -QUIRKS_LIMITED = 2 -QUIRKS_YES = 3 +QUIRKS_NO = 'no' +QUIRKS_LIMITED = 'limited' +QUIRKS_YES = 'yes' # queue up debug logs, so eg they can be shown only for tests that fail g_debug_log = [] -- 1.7.10.4