language/dracula-language-tool.scm
(module dracula-language-tool mzscheme
  (require (lib "list.ss")
           (lib "tool.ss" "drscheme")
           (lib "mred.ss" "mred")
           (lib "class.ss")
           (lib "unit.ss"))
  
  (require "dracula-language-sig.scm"
           "dracula-language.scm")
  
  (require "dracula-language-interface-sig.scm"
           "dracula-language-interface.scm")
  
  (provide tool@)
  
  (define tool-w/o-mixins@
    (unit
      (import dracula-language^
              dracula-language-interface^
              drscheme:tool^)
      (export drscheme:tool-exports^)
      
      (define (phase1) 
        (drscheme:language:extend-language-interface 
         dracula-language<%>
         dracula-language-default-mixin))
      (define (phase2)
        (let* ([mix (drscheme:language:get-default-mixin)]
               [lang (new (mix dracula-language%))])
          (drscheme:language-configuration:add-language lang)))))
  
  (define tool@
    (compound-unit
      (import (DRS-TOOL : drscheme:tool^))
      (export TOOL)
      (link #;[((ACL2-SETTINGS : acl2-settings^)) acl2-settings@ DRS-TOOL]
            [((DRACULA-LANG-INTERFACE : dracula-language-interface^)) dracula-language-interface@
                                                                      DRS-TOOL]
            [((ACL2-LANGUAGE : dracula-language^)) dracula-language@
                                                   DRS-TOOL
                                                   DRACULA-LANG-INTERFACE]
            
            [((TOOL : drscheme:tool-exports^)) tool-w/o-mixins@
                                               ACL2-LANGUAGE
                                               DRACULA-LANG-INTERFACE
                                               DRS-TOOL])))
  )