Utils.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:1k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. package Utils;
  2. use strict;
  3. use IPC::Open2;
  4. use POSIX ":sys_wait_h";
  5. ##
  6. # checkCommand(file)
  7. # file: an command's filename.
  8. # Returns: the full path to $file, or undef if $file is not a valid command.
  9. #
  10. # Checks whether $file is an executable which is in $PATH or the working directory.
  11. #
  12. # Example:
  13. # checkCommand('gcc');  # Returns "/usr/bin/gcc"
  14. sub checkCommand {
  15. my ($file, $file2) = split / /, $_[0];
  16. $file = $file2 if ($file =~ /ccache/);
  17. return abs_path($file) if (-x $file);
  18. foreach my $dir (split /:+/, $ENV{PATH}) {
  19. if (-x "$dir/$file") {
  20. return "$dir/$file";
  21. }
  22. }
  23. return undef;
  24. }
  25. sub pipeCommand {
  26. my $input = shift;
  27. my ($r, $w);
  28. my $pid = open2($r, $w, @_);
  29. if (!defined $pid) {
  30. return undef;
  31. }
  32. print $w $input;
  33. close $w;
  34. local($/);
  35. my $output = <$r>;
  36. close $r;
  37. waitpid($pid, 0);
  38. return $output;
  39. }
  40. sub syntaxHighlight {
  41. my ($code) = @_;
  42. our $hasSourceHighlight;
  43. if (!defined $hasSourceHighlight) {
  44. $hasSourceHighlight = checkCommand('highlight');
  45. if (!$hasSourceHighlight) {
  46. print STDERR "WARNING: you don't have 'highlight' (http://www.andre-simon.de/) " .
  47. "installed, so syntax highlighting will be disabled.n";
  48. }
  49. }
  50. if (!$hasSourceHighlight) {
  51. return $code;
  52. } else {
  53. return pipeCommand($code, qw/highlight -S perl -f/);
  54. }
  55. }
  56. 1;