Merge branch 'pr/804' into postscript_support

Conflicts:
	lib/linguist/generated.rb
This commit is contained in:
Arfon Smith
2013-12-23 14:25:33 -06:00
4 changed files with 74 additions and 0 deletions

View File

@@ -58,6 +58,7 @@ module Linguist
generated_parser? || generated_parser? ||
generated_net_docfile? || generated_net_docfile? ||
generated_net_designer_file? || generated_net_designer_file? ||
generated_postscript? ||
generated_protocol_buffer? || generated_protocol_buffer? ||
generated_jni_header? || generated_jni_header? ||
composer_lock? || composer_lock? ||
@@ -176,6 +177,29 @@ module Linguist
false false
end end
# Internal: Is the blob of PostScript generated?
#
# PostScript files are often generated by other programs. If they tell us so,
# we can detect them.
#
# Returns true or false.
def generated_postscript?
return false unless ['.ps', '.eps'].include? extname
# We analyze the "%%Creator:" comment, which contains the author/generator
# of the file. If there is one, it should be in one of the first few lines.
creator = lines[0..9].find {|line| line =~ /^%%Creator: /}
return false if creator.nil?
# Most generators write their version number, while human authors' or companies'
# names don't contain numbers. So look if the line contains digits. Also
# look for some special cases without version numbers.
return creator =~ /[0-9]/ ||
creator.include?("mpage") ||
creator.include?("draw") ||
creator.include?("ImageMagick")
end
# Internal: Is the blob a C++, Java or Python source file generated by the # Internal: Is the blob a C++, Java or Python source file generated by the
# Protocol Buffer compiler? # Protocol Buffer compiler?
# #

View File

@@ -1255,6 +1255,12 @@ PogoScript:
lexer: Text only lexer: Text only
primary_extension: .pogo primary_extension: .pogo
PostScript:
type: markup
primary_extension: .ps
extensions:
- .eps
PowerShell: PowerShell:
type: programming type: programming
ace_mode: powershell ace_mode: powershell

View File

@@ -0,0 +1,41 @@
%!PS-Adobe-3.0
%%Creator: Aaron Puchert
%%Title: The Sierpinski triangle
%%Pages: 1
%%PageOrder: Ascend
%%BeginProlog
% PAGE SETTINGS
/pageset {
28.3464566 28.3464566 scale % set cm = 1
0.5 0.5 translate
0 setlinewidth
} def
% sierpinski(n) draws a sierpinski triangle of order n
/sierpinski {
dup 0 gt {
[0.5 0 0 0.5 0 0] concat dup 1 sub sierpinski
[1 0 0 1 1 0] concat dup 1 sub sierpinski
[1 0 0 1 -1 1] concat dup 1 sub sierpinski
[2 0 0 2 0 -1] concat
} {
newpath
0 0 moveto
1 0 lineto
0 1 lineto
closepath
fill
} ifelse pop} def
%%EndProlog
%%BeginSetup
<< /PageSize [596 843] >> setpagedevice % A4
%%EndSetup
%%Page: Test 1
pageset
[20 0 10 300 sqrt 0 0] concat
9 sierpinski
showpage
%%EOF

View File

@@ -185,6 +185,9 @@ class TestBlob < Test::Unit::TestCase
# PEG.js-generated parsers # PEG.js-generated parsers
assert blob("JavaScript/parser.js").generated? assert blob("JavaScript/parser.js").generated?
# Generated PostScript
assert !blob("PostScript/sierpinski.ps").generated?
# These examples are too basic to tell # These examples are too basic to tell
assert !blob("JavaScript/empty.js").generated? assert !blob("JavaScript/empty.js").generated?
assert !blob("JavaScript/hello.js").generated? assert !blob("JavaScript/hello.js").generated?