SassyBitwise 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/lib/SassyBitwise.rb +14 -0
- data/stylesheets/SassyBitwise/api/_bitwise.scss +46 -0
- data/stylesheets/SassyBitwise/helpers/_binary-length.scss +9 -0
- data/stylesheets/SassyBitwise/helpers/_binary-to-decimal.scss +27 -0
- data/stylesheets/SassyBitwise/helpers/_decimal-to-binary.scss +24 -0
- data/stylesheets/SassyBitwise/helpers/_largest-power-of-2.scss +16 -0
- data/stylesheets/SassyBitwise/helpers/_power.scss +25 -0
- data/stylesheets/SassyBitwise/helpers/_sign.scss +9 -0
- data/stylesheets/SassyBitwise/operators/_and.scss +19 -0
- data/stylesheets/SassyBitwise/operators/_not.scss +10 -0
- data/stylesheets/SassyBitwise/operators/_or.scss +21 -0
- data/stylesheets/SassyBitwise/operators/_shift-left.scss +11 -0
- data/stylesheets/SassyBitwise/operators/_shift-right.scss +11 -0
- data/stylesheets/SassyBitwise/operators/_xor.scss +19 -0
- data/stylesheets/SassyBitwise/validators/_arguments-validator.scss +45 -0
- data/stylesheets/SassyBitwise/validators/_is-number.scss +9 -0
- data/stylesheets/_SassyBitwise.scss +15 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5ecf3c37e8178ad93df44d11ddd33bfac361cfa4
|
4
|
+
data.tar.gz: b0bece9d963e5763a55072f898719797259eaf5f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1cb99b81efd15b9564f7b093710d889c36334c219fff17ca350234ba6cde9453ca4e8de179c0ab29766b2691941e5a4c339eb72138e905df27268d8a8f69ab06
|
7
|
+
data.tar.gz: cc086c572c15a7f7caf0f953eb1c2e044066be36a49469d290bff5b2bbcf2572cd9f789e8d8338021d810a9808c5019656bb43ee06c776b9b75cd6509c7bd449
|
data/CHANGELOG.md
ADDED
data/lib/SassyBitwise.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'compass'
|
2
|
+
extension_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
3
|
+
Compass::Frameworks.register('SassyBitwise', :path => extension_path)
|
4
|
+
|
5
|
+
# Version is a number. If a version contains alphas, it will be created as a prerelease version
|
6
|
+
# Date is in the form of YYYY-MM-DD
|
7
|
+
module SassyBitwise
|
8
|
+
VERSION = "1.0.0"
|
9
|
+
DATE = "2014-06-04"
|
10
|
+
end
|
11
|
+
|
12
|
+
module Sass::Script::Functions
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// Bitwise helper function
|
2
|
+
// ---
|
3
|
+
// @param [list] $args: list of parameters
|
4
|
+
// ---
|
5
|
+
// @return [number]
|
6
|
+
// ---
|
7
|
+
@function bitwise($args) {
|
8
|
+
@if not arguments-validator($args) {
|
9
|
+
@return false;
|
10
|
+
}
|
11
|
+
|
12
|
+
// Handling not first
|
13
|
+
@if nth($args, 1) == "~" {
|
14
|
+
@return bw-not(nth($args, 2));
|
15
|
+
}
|
16
|
+
|
17
|
+
// Then all others
|
18
|
+
$operator: to-lower-case(nth($args, 2));
|
19
|
+
$x: nth($args, 1);
|
20
|
+
$y: nth($args, 3);
|
21
|
+
|
22
|
+
@if $operator == "^" {
|
23
|
+
@return bw-xor($x, $y);
|
24
|
+
}
|
25
|
+
|
26
|
+
@else if $operator == "|" {
|
27
|
+
@return bw-or($x, $y);
|
28
|
+
}
|
29
|
+
|
30
|
+
@else if $operator == "&" {
|
31
|
+
@return bw-and($x, $y);
|
32
|
+
}
|
33
|
+
|
34
|
+
@else if $operator == "<<" {
|
35
|
+
@return bw-shift-left($x, $y);
|
36
|
+
}
|
37
|
+
|
38
|
+
@else if $operator == ">>" {
|
39
|
+
@return bw-shift-right($x, $y);
|
40
|
+
}
|
41
|
+
|
42
|
+
@else {
|
43
|
+
@warn "Wrong operator `#{$operator}` for `bitwise` function.";
|
44
|
+
@return false
|
45
|
+
}
|
46
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
// Convert from base 2 to base 10
|
2
|
+
// ---
|
3
|
+
// @param [number] $value: binary to convert
|
4
|
+
// ---
|
5
|
+
// @return [number]
|
6
|
+
// ---
|
7
|
+
@function binary-to-decimal($value) {
|
8
|
+
$value: $value + unquote('');
|
9
|
+
$result: if(str-slice($value, 1, 1) == "0", 0, 1);
|
10
|
+
|
11
|
+
@for $i from 2 through str-length($value) {
|
12
|
+
$c: str-slice($value, $i, $i);
|
13
|
+
|
14
|
+
@if not index("0" "1", $c) {
|
15
|
+
@warn "Not binary.";
|
16
|
+
@return false
|
17
|
+
}
|
18
|
+
|
19
|
+
$result: $result * 2;
|
20
|
+
|
21
|
+
@if $c == "1" {
|
22
|
+
$result: $result + 1
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
@return $result
|
27
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// Convert from base 10 to base 2
|
2
|
+
// ---
|
3
|
+
// @param [number] $value: decimal to convert
|
4
|
+
// ---
|
5
|
+
// @return [number]
|
6
|
+
// ---
|
7
|
+
@function decimal-to-binary($value) {
|
8
|
+
$largest: largest-power-of-2($value);
|
9
|
+
$result: 0;
|
10
|
+
|
11
|
+
@while $largest >= 1 {
|
12
|
+
@if $value - $largest >= 0 {
|
13
|
+
$value: $value - $largest;
|
14
|
+
$result: $result * 10 + 1
|
15
|
+
}
|
16
|
+
@else {
|
17
|
+
$result: $result * 10
|
18
|
+
}
|
19
|
+
|
20
|
+
$largest: $largest / 2
|
21
|
+
}
|
22
|
+
|
23
|
+
@return $result
|
24
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// Returns largest power of 2 lesser than $value
|
2
|
+
// ---
|
3
|
+
// @param [number] $value: value
|
4
|
+
// ---
|
5
|
+
// @return [number]
|
6
|
+
// ---
|
7
|
+
@function largest-power-of-2($value) {
|
8
|
+
$result: 1;
|
9
|
+
@while $result <= $value {
|
10
|
+
@if $result * 2 > $value {
|
11
|
+
@return $result
|
12
|
+
}
|
13
|
+
$result: $result * 2
|
14
|
+
}
|
15
|
+
@return $result
|
16
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// Power function
|
2
|
+
// Using Compass if defined
|
3
|
+
// ---
|
4
|
+
// @param [number] $x: first value
|
5
|
+
// @param [number] $y: second value
|
6
|
+
// ---
|
7
|
+
// @return [number]
|
8
|
+
// ---
|
9
|
+
@function power($x, $y) {
|
10
|
+
@if function-exists('pow') == true {
|
11
|
+
@return pow($x, $y)
|
12
|
+
}
|
13
|
+
|
14
|
+
$ret: 1;
|
15
|
+
@if $y >= 0 {
|
16
|
+
@for $i from 1 through $y {
|
17
|
+
$ret: $ret * $x
|
18
|
+
}
|
19
|
+
} @else {
|
20
|
+
@for $i from $y to 0 {
|
21
|
+
$ret: $ret / $x
|
22
|
+
}
|
23
|
+
}
|
24
|
+
@return $ret
|
25
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
// `and` bitwise operator
|
2
|
+
// $x & $y
|
3
|
+
// ---
|
4
|
+
// @param [number] $x: first value
|
5
|
+
// @param [number] $y: second value
|
6
|
+
// ---
|
7
|
+
// @return [number]
|
8
|
+
// ---
|
9
|
+
@function bw-and($x, $y) {
|
10
|
+
$b: binary-length($x);
|
11
|
+
$res: 0;
|
12
|
+
|
13
|
+
@for $i from 0 through $b {
|
14
|
+
$h: power(2, $i);
|
15
|
+
$res: $res + $h * (floor($x / $h) % 2) * (floor($y / $h) % 2)
|
16
|
+
}
|
17
|
+
|
18
|
+
@return $res
|
19
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// `or` bitwise operator
|
2
|
+
// $x | $y
|
3
|
+
// ---
|
4
|
+
// @param [number] $x: first value
|
5
|
+
// @param [number] $y: second value
|
6
|
+
// ---
|
7
|
+
// @return [number]
|
8
|
+
// ---
|
9
|
+
@function bw-or($x, $y) {
|
10
|
+
$b: binary-length($x);
|
11
|
+
$res: 0;
|
12
|
+
|
13
|
+
@for $i from 0 through $b {
|
14
|
+
$h: power(2, $i);
|
15
|
+
$tx: floor($x / $h) % 2;
|
16
|
+
$ty: floor($y / $h) % 2;
|
17
|
+
$res: $res + $h * (($tx + $ty + $tx * $ty % 2) % 2)
|
18
|
+
}
|
19
|
+
|
20
|
+
@return $res
|
21
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
// `xor` bitwise operator
|
2
|
+
// $x ^ $y
|
3
|
+
// ---
|
4
|
+
// @param [number] $x: first value
|
5
|
+
// @param [number] $y: second value
|
6
|
+
// ---
|
7
|
+
// @return [number]
|
8
|
+
// ---
|
9
|
+
@function bw-xor($x, $y) {
|
10
|
+
$b: binary-length($x);
|
11
|
+
$res: 0;
|
12
|
+
|
13
|
+
@for $i from 0 through $b {
|
14
|
+
$h: power(2, $i);
|
15
|
+
$res: $res + $h * (((floor($x / $h) % 2) + (floor($y / $h) % 2)) % 2)
|
16
|
+
}
|
17
|
+
|
18
|
+
@return $res
|
19
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
// Checks whether argument list is valid
|
2
|
+
// ---
|
3
|
+
// @param [list] $args: argument list
|
4
|
+
// ---
|
5
|
+
// @return [bool]
|
6
|
+
// ---
|
7
|
+
@function arguments-validator($args) {
|
8
|
+
$valid-operators: "^", "|", "&", "<<", ">>";
|
9
|
+
|
10
|
+
@if length($args) == 2 {
|
11
|
+
@if nth($args, 1) != "~" {
|
12
|
+
@warn "Only 2 arguments specified but first is not `~`.";
|
13
|
+
@return false;
|
14
|
+
}
|
15
|
+
|
16
|
+
@if not is-number(nth($args, 2)) {
|
17
|
+
@warn "Only 2 arguments specified but second is not a valid unitless number.";
|
18
|
+
@return false;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
@else if length($args) == 3 {
|
23
|
+
@if not index($valid-operators, nth($args, 2)) {
|
24
|
+
@warn "Invalid operator: `#{nth($args, 2)}` given, one of #{inspect($valid-operators)} expected.";
|
25
|
+
@return false;
|
26
|
+
}
|
27
|
+
|
28
|
+
@if not is-number(nth($args, 1)) {
|
29
|
+
@warn "Invalid number as first argument: `#{nth($args, 1)} given, valid unitless number expected.";
|
30
|
+
@return false;
|
31
|
+
}
|
32
|
+
|
33
|
+
@if not is-number(nth($args, 3)) {
|
34
|
+
@warn "Invalid number as third argument: `#{nth($args, 3)} given, valid unitless number expected.";
|
35
|
+
@return false;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
@else {
|
40
|
+
@warn "Invalid number of arguments: #{length($args)} given, 2 or 3 expected.";
|
41
|
+
@return false;
|
42
|
+
}
|
43
|
+
|
44
|
+
@return true;
|
45
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
@import "SassyBitwise/helpers/power";
|
2
|
+
@import "SassyBitwise/helpers/sign";
|
3
|
+
@import "SassyBitwise/helpers/largest-power-of-2";
|
4
|
+
@import "SassyBitwise/helpers/binary-to-decimal";
|
5
|
+
@import "SassyBitwise/helpers/decimal-to-binary";
|
6
|
+
@import "SassyBitwise/helpers/binary-length";
|
7
|
+
@import "SassyBitwise/validators/is-number";
|
8
|
+
@import "SassyBitwise/validators/arguments-validator";
|
9
|
+
@import "SassyBitwise/operators/and";
|
10
|
+
@import "SassyBitwise/operators/not";
|
11
|
+
@import "SassyBitwise/operators/or";
|
12
|
+
@import "SassyBitwise/operators/xor";
|
13
|
+
@import "SassyBitwise/operators/shift-left";
|
14
|
+
@import "SassyBitwise/operators/shift-right";
|
15
|
+
@import "SassyBitwise/api/bitwise";
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: SassyBitwise
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hugo Giraudel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sass
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: compass
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.12'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.12'
|
41
|
+
description: Bitwise operators in Sass.
|
42
|
+
email:
|
43
|
+
- hugo.giraudel@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- CHANGELOG.md
|
49
|
+
- lib/SassyBitwise.rb
|
50
|
+
- stylesheets/SassyBitwise/api/_bitwise.scss
|
51
|
+
- stylesheets/SassyBitwise/helpers/_binary-length.scss
|
52
|
+
- stylesheets/SassyBitwise/helpers/_binary-to-decimal.scss
|
53
|
+
- stylesheets/SassyBitwise/helpers/_decimal-to-binary.scss
|
54
|
+
- stylesheets/SassyBitwise/helpers/_largest-power-of-2.scss
|
55
|
+
- stylesheets/SassyBitwise/helpers/_power.scss
|
56
|
+
- stylesheets/SassyBitwise/helpers/_sign.scss
|
57
|
+
- stylesheets/SassyBitwise/operators/_and.scss
|
58
|
+
- stylesheets/SassyBitwise/operators/_not.scss
|
59
|
+
- stylesheets/SassyBitwise/operators/_or.scss
|
60
|
+
- stylesheets/SassyBitwise/operators/_shift-left.scss
|
61
|
+
- stylesheets/SassyBitwise/operators/_shift-right.scss
|
62
|
+
- stylesheets/SassyBitwise/operators/_xor.scss
|
63
|
+
- stylesheets/SassyBitwise/validators/_arguments-validator.scss
|
64
|
+
- stylesheets/SassyBitwise/validators/_is-number.scss
|
65
|
+
- stylesheets/_SassyBitwise.scss
|
66
|
+
homepage: http://github.com/HugoGiraudel/SassyBitwise
|
67
|
+
licenses: []
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.3.6
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project: SassyBitwise
|
85
|
+
rubygems_version: 2.2.2
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: An implementation of bitwise operators in Sass without the use of Ruby.
|
89
|
+
test_files: []
|