Skip to content

Commit

Permalink
Merge branch 'master' of ssh://averprauskus@ohcount.git.sourceforge.n…
Browse files Browse the repository at this point in the history
…et/gitroot/ohcount/ohcount
  • Loading branch information
Andy Verprauskus committed Aug 22, 2009
2 parents d504cee + 6f25f7f commit e599809
Show file tree
Hide file tree
Showing 14 changed files with 187 additions and 18 deletions.
2 changes: 2 additions & 0 deletions ruby/gestalt/definition.rb
Expand Up @@ -16,6 +16,8 @@
require 'gestalt/rules/find_java_imports_rule'
require 'gestalt/rules/maven_parser'
require 'gestalt/rules/maven_rule'
require 'gestalt/rules/csproj_parser'
require 'gestalt/rules/csproj_rule'

module Ohcount
module Gestalt
Expand Down
48 changes: 43 additions & 5 deletions ruby/gestalt/definitions.rb
Expand Up @@ -26,10 +26,6 @@ module Gestalt
c_keywords 'WM_PAINT', 'ReleaseDC', 'WndProc', :min => 2
end

define_platform 'WPF' do
filenames '\.xaml$'
end

define_platform 'VisualBasic' do
language :visualbasic, :min_percent => 5
end
Expand All @@ -54,9 +50,51 @@ module Gestalt
end

define_platform 'JQuery' do
filenames 'jquery-\d.\d.\d.min.js'
filenames 'jquery-\d.\d.\d.min.js$'
end

define_platform 'mootools' do
filenames '\bmootools-\d(\.\d)*(-core)?(-..)?\.js$'
end

define_platform 'prototype' do
filenames '\bprototype(-\d+(\.\d)+)?.js$'
end

define_platform 'yui' do
_or do
filenames '\byahoo-min\.js$'
html_keywords '\byahoo-min\.js\b'
end
end

define_platform 'dojo' do
_or do
filenames '\bdojo\.js$'
html_keywords '\bdojo\.xd\.js\b'
end
end

define_platform 'flash' do
_or do
language :actionscript, :min_percent => 1
_and do
gestalt(:platform, 'Java')
java_import /^(flash)\..+/
end
end
end

define_platform 'flex' do
_or do
language :mxml, :min_percent => 1
_and do
gestalt(:platform, 'Java')
java_import /^(mx)\..+/
end
end
end

define_platform 'XWindows' do
c_headers 'Xlib.h', 'X11\/xpm.h', 'X11/Xlib.h'
end
Expand Down
17 changes: 17 additions & 0 deletions ruby/gestalt/dot_net_definitions.rb
Expand Up @@ -86,5 +86,22 @@ module Gestalt
end
end

define_platform 'WPF' do
filenames '\.xaml$'
end

define_platform 'silverlight' do
_or do
csharp_using /^System.Web.Silverlight\b/
html_keywords '\basp:Silverlight\b'
csproj_import /\bSilverlight\b/
_and do
# A combination of ASP.NET with xaml is assumed to mean Silverlight
gestalt(:platform, 'ASP_NET')
gestalt(:platform, 'WPF')
end
end
end

end
end
7 changes: 0 additions & 7 deletions ruby/gestalt/java_definitions.rb
Expand Up @@ -168,13 +168,6 @@ module Gestalt
end
end

define_platform 'Flex' do
_and do
gestalt(:platform, 'Java')
java_import /^(mx|flash)\..+/
end
end

# Java Persistence Frameworks

define_platform 'Hibernate' do
Expand Down
28 changes: 28 additions & 0 deletions ruby/gestalt/rules/csproj_parser.rb
@@ -0,0 +1,28 @@
#!/usr/bin/env ruby
require 'rexml/document'
require 'rexml/streamlistener'

class CsprojListener
include REXML::StreamListener

attr_accessor :callback
def initialize(callback)
@callback = callback
@is_csproj_file = false
end

def tag_start(name, attrs)
case name
when 'Project'
@is_csproj_file = true
if attrs['xmlns'] and attrs['xmlns'] !~ /^http:\/\/schemas\.microsoft\.com\/developer\//
# False alarm -- it contains a project element, but of another namespace
@is_csproj_file = false
end
when 'Import'
if @is_csproj_file && attrs['Project']
@callback.call(attrs['Project'])
end
end
end
end
31 changes: 31 additions & 0 deletions ruby/gestalt/rules/csproj_rule.rb
@@ -0,0 +1,31 @@
require 'rexml/document'
module Ohcount
module Gestalt
class CsprojRule < FileRule

attr_accessor :import

def initialize(*args)
@import = args.shift || /.*/
@import = /^#{Regexp.escape(@import.to_s)}$/ unless @import.is_a? Regexp

super(args)
end

def process_source_file(source_file)
if source_file.filename =~ /\.csproj$/ && source_file.language_breakdown('xml')
callback = lambda do |import|
@count += 1 if import =~ @import
end

begin
REXML::Document.parse_stream(source_file.language_breakdown('xml').code, CsprojListener.new(callback))
rescue REXML::ParseException
# Malformed XML! -- ignore and move on
end
end
end

end
end
end
4 changes: 4 additions & 0 deletions ruby/gestalt/rules/logical_rule.rb
Expand Up @@ -44,6 +44,10 @@ def language(*args)
new_rule LanguageRule, *args
end

def csproj_import(*args)
new_rule CsprojRule, *args
end

def maven_dependency(*args)
new_rule MavenRule, *(['dependency'] + args)
end
Expand Down
1 change: 0 additions & 1 deletion ruby/gestalt/rules/maven_rule.rb
Expand Up @@ -37,4 +37,3 @@ def process_source_file(source_file)
end
end
end

1 change: 1 addition & 0 deletions src/hash/extensions.gperf
Expand Up @@ -34,6 +34,7 @@ cmake, LANG_CMAKE
com, LANG_DCL
cpp, LANG_CPP
cs, DISAMBIGUATE("cs")
csproj, LANG_XML
css, LANG_CSS
ctp, LANG_PHP
cxx, LANG_CPP
Expand Down
2 changes: 1 addition & 1 deletion src/hash/languages.gperf
Expand Up @@ -50,7 +50,7 @@ matlab, LANG_MATLAB, "Matlab", 0
metafont, LANG_METAFONT, "MetaFont", 1
metapost, LANG_METAPOST, "MetaPost", 1
metapost_with_tex, LANG_METAPOST_WITH_TEX, "", 0
mxml, LANG_MXML, "Flex", 1
mxml, LANG_MXML, "MXML", 1
nix, LANG_NIX, "Nix", 0
objective_c, LANG_OBJECTIVE_C, "Objective C", 0
objective_j, LANG_OBJECTIVE_J, "Objective-J", 0
Expand Down
28 changes: 28 additions & 0 deletions test/unit/ruby/gestalt/definitions_test.rb
Expand Up @@ -113,6 +113,18 @@ def test_jquery
assert_platform('jquery', :Javascript, :JQuery, :Scripting)
end

def test_dojo
h = SourceFile.new("sample.html", :contents => '<SCRIPT TYPE="text/javascript" SRC="http://ajax.googleapis.com/ajax/libs/dojo/1.3/dojo/dojo.xd.js"></SCRIPT>')
expected_gestalts = [ Base.new(:platform, "dojo") ]
assert_equal expected_gestalts.sort, h.gestalts.sort
end

def test_yui
h = SourceFile.new("sample.html", :contents => '<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/yahoo/yahoo-min.js" ></script>')
expected_gestalts = [ Base.new(:platform, "yui") ]
assert_equal expected_gestalts.sort, h.gestalts.sort
end

def test_python
assert_platform('python', :Python, :Scripting)
end
Expand Down Expand Up @@ -533,4 +545,20 @@ def test_jasper_ji
]
assert_equal expected_gestalts.sort, make.gestalts.sort
end

def test_flash
as = SourceFile.new("sample.as", :contents => 'greet.text = "Hello, world";')
expected_gestalts = [ Base.new(:platform, "flash") ]
assert_equal expected_gestalts.sort, as.gestalts.sort
end

def test_flex
as = SourceFile.new("sample.mxml", :contents => <<-MXML
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"></mx:Application>
MXML
)
expected_gestalts = [ Base.new(:platform, 'flex') ]
assert_equal expected_gestalts.sort, as.gestalts.sort
end
end
30 changes: 28 additions & 2 deletions test/unit/ruby/gestalt/dot_net_definitions_test.rb
@@ -1,5 +1,5 @@
require File.dirname(__FILE__) + '/../../test_helper'

require File.dirname(__FILE__) + '/../test_helper'
require File.dirname(__FILE__) + '/../../../../ruby/gestalt'
include Ohcount
include Ohcount::Gestalt

Expand Down Expand Up @@ -59,5 +59,31 @@ def test_linq_implies_enterprise
Gestalt::Base.new(:platform, 'Dot_NET'),
Gestalt::Base.new(:platform, 'Dot_NET_Enterprise')
], sf.gestalts.sort
end

def test_silverlight_via_asp_keyword
sf = SourceFile.new('foo.aspx', :contents => <<-CONTENTS
<body>
<asp:Silverlight runat="server"/>
</body>
CONTENTS
)
assert_equal [
Gestalt::Base.new(:platform, 'ASP_NET'),
Gestalt::Base.new(:platform, 'silverlight')
], sf.gestalts.sort
end

def test_silverlight_via_csproj_import
sf = SourceFile.new('Foo.csproj', :contents => <<-CONTENTS
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\\Microsoft\\Silverlight\\v2.0\\Microsoft.Silverlight.CSharp.targets" />
</Project>
CONTENTS
)
assert_equal([
Gestalt::Base.new(:platform, 'silverlight'),
Gestalt::Base.new(:tool, 'VisualStudio')
], sf.gestalts.sort)
end
end
4 changes: 3 additions & 1 deletion test/unit/ruby/gestalt/gestalt_test.rb
@@ -1,7 +1,9 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../test_helper.rb'
require File.dirname(__FILE__) + '/definitions_test'
require File.dirname(__FILE__) + '/file_rule_test'
require File.dirname(__FILE__) + '/filename_rule_test'
require File.dirname(__FILE__) + '/keyword_rule_test'
require File.dirname(__FILE__) + '/rule_test'
require File.dirname(__FILE__) + '/definitions_test'
require File.dirname(__FILE__) + '/java_definitions_test'
require File.dirname(__FILE__) + '/dot_net_definitions_test'
2 changes: 1 addition & 1 deletion test/unit/ruby/gestalt/java_definitions_test.rb
@@ -1,6 +1,6 @@
require File.dirname(__FILE__) + '/../../test_helper'
include Ohcount
include Ohcount::Gestalt
require File.dirname(__FILE__) + '/../../../../ruby/gestalt'

class JavaDefinitionsTest < Ohcount::Test

Expand Down

0 comments on commit e599809

Please sign in to comment.