]> Repositorios git - scryer-prolog.git/commitdiff
re: conformity test #181
authorMark Thom <[email protected]>
Sun, 7 Apr 2019 17:44:56 +0000 (11:44 -0600)
committerMark Thom <[email protected]>
Sun, 7 Apr 2019 17:44:56 +0000 (11:44 -0600)
Cargo.toml
src/prolog/heap_print.rs

index 73566b4f8a607cfee454cf25a30c48c2d58c5d9b..fe8d43433e2bcbe8f9fac873db0ec733bed2079c 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "scryer-prolog"
-version = "0.8.47"
+version = "0.8.48"
 authors = ["Mark Thom <[email protected]>"]
 repository = "https://github.com/mthom/scryer-prolog"
 description = "A modern Prolog implementation written mostly in Rust."
index 496ffa9d571910a6a54eaee5857b7c318d91ef7a..78abd8d4eb3539186e3c4cb37bee4a951bec6749 100644 (file)
@@ -414,7 +414,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
                 "-" | "\\" => {
                     self.format_prefix_op_with_space(ct.name(), spec);
                     return;
-                },
+                }
                 _ => {}
             };
 
@@ -423,6 +423,14 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
             self.state_stack.push(TokenOrRedirect::CompositeRedirect(left_directed_op));
             self.state_stack.push(TokenOrRedirect::Op(ct.name(), spec));
         } else { // if is_infix!(spec.assoc())
+            match ct.name().as_str() {                
+                "|" => {
+                    self.format_infix_op_with_space(ct.name(), spec);
+                    return;
+                },
+                _ => {}
+            };
+            
             let left_directed_op  = DirectedOp::Left(ct.name(), spec.clone());
             let right_directed_op = DirectedOp::Right(ct.name(), spec.clone());
 
@@ -456,6 +464,18 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
         self.state_stack.push(TokenOrRedirect::Atom(name));
     }
 
+    fn format_infix_op_with_space(&mut self, name: ClauseName, spec: SharedOpDesc)
+    {
+        let left_directed_op  = DirectedOp::Left(name.clone(), spec.clone());
+        let right_directed_op = DirectedOp::Right(name.clone(), spec.clone());
+
+        self.state_stack.push(TokenOrRedirect::CompositeRedirect(left_directed_op));
+        self.state_stack.push(TokenOrRedirect::Space);
+        self.state_stack.push(TokenOrRedirect::Op(name.clone(), spec));
+        self.state_stack.push(TokenOrRedirect::Space);
+        self.state_stack.push(TokenOrRedirect::CompositeRedirect(right_directed_op));
+    }
+
     fn format_curly_braces(&mut self)
     {
         self.state_stack.push(TokenOrRedirect::RightCurly);