Blame camlp4/unmaintained/format/pa_format.ml

Packit Service 823e34
(* pa_r.cmo pa_extend.cmo q_MLast.cmo pr_dump.cmo *)
Packit Service 823e34
(***********************************************************************)
Packit Service 823e34
(*                                                                     *)
Packit Service 823e34
(*                               Camlp4                                *)
Packit Service 823e34
(*                                                                     *)
Packit Service 823e34
(*    Daniel de Rauglaudre, projet Cristal, INRIA Rocquencourt         *)
Packit Service 823e34
(*                                                                     *)
Packit Service 823e34
(*  Copyright 2002 Institut National de Recherche en Informatique et   *)
Packit Service 823e34
(*  en Automatique.  All rights reserved.  This file is distributed    *)
Packit Service 823e34
(*  under the terms of the GNU Library General Public License, with    *)
Packit Service 823e34
(*  the special exception on linking described in file                 *)
Packit Service 823e34
(*   ../../../LICENSE.                                                 *)
Packit Service 823e34
(*                                                                     *)
Packit Service 823e34
(***********************************************************************)
Packit Service 823e34
Packit Service 823e34
Packit Service 823e34
open Pcaml;
Packit Service 823e34
Packit Service 823e34
EXTEND
Packit Service 823e34
  GLOBAL: expr;
Packit Service 823e34
  expr: LEVEL "top"
Packit Service 823e34
    [ [ n = box_type; d = SELF; "begin";
Packit Service 823e34
        el = LIST0 [ e = box_expr; ";" -> e ]; "end" ->
Packit Service 823e34
          let el = [<:expr< Format.$lid:"open_" ^ n$ $d$ >> :: el] in
Packit Service 823e34
          let el = el @ [<:expr< Format.close_box () >>] in
Packit Service 823e34
          <:expr< do { $list:el$ } >>
Packit Service 823e34
      | "hbox"; "begin"; el = LIST0 [ e = box_expr; ";" -> e ]; "end" ->
Packit Service 823e34
          let el = [<:expr< Format.open_hbox () >> :: el] in
Packit Service 823e34
          let el = el @ [<:expr< Format.close_box () >>] in
Packit Service 823e34
          <:expr< do { $list:el$ } >>
Packit Service 823e34
      | "nobox"; "begin"; el = LIST0 [ e = box_expr; ";" -> e ]; "end" ->
Packit Service 823e34
          match el with
Packit Service 823e34
          [ [e] -> e
Packit Service 823e34
          | _ -> <:expr< do { $list:el$ } >> ] ] ]
Packit Service 823e34
  ;
Packit Service 823e34
  box_type:
Packit Service 823e34
    [ [ n = "hovbox" -> n
Packit Service 823e34
      | n = "hvbox" -> n
Packit Service 823e34
      | n = "vbox" -> n
Packit Service 823e34
      | n = "box" -> n ] ]
Packit Service 823e34
  ;
Packit Service 823e34
  box_expr:
Packit Service 823e34
    [ [ s = STRING -> <:expr< Format.print_string $str:s$ >>
Packit Service 823e34
      | UIDENT "STRING"; e = expr -> <:expr< Format.print_string $e$ >>
Packit Service 823e34
      | UIDENT "INT"; e = expr -> <:expr< Format.print_int $e$ >>
Packit Service 823e34
      | "/-" -> <:expr< Format.print_space () >>
Packit Service 823e34
      | "//" -> <:expr< Format.print_cut () >>
Packit Service 823e34
      | "!/" -> <:expr< Format.force_newline () >>
Packit Service 823e34
      | "?/" -> <:expr< Format.print_if_newline () >>
Packit Service 823e34
      | e = expr -> e ] ]
Packit Service 823e34
  ;
Packit Service 823e34
END;