Skip to content
Snippets Groups Projects
Select Git revision
  • 9a9768e939d327ea847faf8010de41c66def5c0a
  • master default
  • irony
3 results

pugs.el

Blame
  • pugs.el 2.46 KiB
    ;;; pugs -- simple major mode for pgs files
    ;;; Commentary:
    ;;; simple major mode for pugs
    ;;; Code:
    
    (define-derived-mode pugs-output-mode compilation-mode "pugs-output"
      "Define a special mode for pugs process output."
    )
    
    (defun pugs-run-file ()
      "Execute the current pugs script.
    Ask to save the buffer if needed"
      (interactive)
      (when (buffer-modified-p)
        (save-buffer))
      (let ((output-buffer "*pugs-output*")
    	(pugs-binary "~/src/pugs/build/pugs")
    	(pugs-file (buffer-file-name (current-buffer)))
    	(pugs-buffer (current-buffer)))
        (when (get-buffer output-buffer)
          (kill-buffer output-buffer))
        (get-buffer-create output-buffer)
        (follow-mode)
        (display-buffer output-buffer)
        (set-buffer output-buffer)
        (pugs-output-mode)
        (setq-local inhibit-read-only t)
        (insert (format "started: %s\n" (current-time-string)))
        (insert (format "binary : %s\n" pugs-binary))
        (insert (format "script : %s\n\n" pugs-file))
        ;;; run the process
        (process-file pugs-binary nil output-buffer nil pugs-file "--no-color")
    ;    (start-process pugs-binary nil output-buffer t pugs-file "--no-color")
        ;;;
        (insert (format "\nfinished: %s\n" (current-time-string)))
        (insert (format "binary : %s\n" pugs-binary))
        (insert (format "script : %s\n" pugs-file))
        ))
    
    (define-derived-mode pugs-mode prog-mode "pugs"
      "pugs mode is a major mode for editing pugs files"
      ;; define pugs keywords
      (defvar pugs-keywords
        '("import" "let" "Z" "N" "B" "R" "string" "and" "or" "xor" "not" "true" "false" "let" "do" "while" "for" "if" "else" "break" "continue" "cout" "cerr" "clog" "void"))
    
      (defvar pugs-special-symbols
        '(":" "," ";" "{" "}" "->" "<=" ">=" "=" "+" "-" "*" "/"  "<" ">" "^"))
    
      (defvar pugs-font-lock-defaults
        `((
           ;; strings
           ("\"\\.\\*\\?" . font-lock-string-face)
           ;; keywords
           ( ,(regexp-opt pugs-keywords 'words) . font-lock-keyword-face)
           ;; special symbols
           ( ,(regexp-opt pugs-special-symbols) . font-lock-constant-face)
           )))
    
      (setq font-lock-defaults pugs-font-lock-defaults)
    
      ;; for comments
      (setq comment-start "//")
      (setq comment-end "")
    
      (modify-syntax-entry ?\\ "\\" pugs-mode-syntax-table)
      (modify-syntax-entry ?/ ". 124b" pugs-mode-syntax-table)
      (modify-syntax-entry ?* ". 23" pugs-mode-syntax-table)
      (modify-syntax-entry ?\n "> b" pugs-mode-syntax-table)
    
      (local-set-key (kbd "C-c C-c") 'pugs-run-file)
      )
    (provide 'pugs-mode)
    
    ;;; (provide 'pugs-mode)
    ;;; pugs.el ends here