diff --git a/include/utils/SkLua.h b/include/utils/SkLua.h
index 8f48bc1..f24f8a5 100644
--- a/include/utils/SkLua.h
+++ b/include/utils/SkLua.h
@@ -35,10 +35,10 @@
     lua_State* get() const { return fL; }
     lua_State* operator*() const { return fL; }
     lua_State* operator->() const { return fL; }
-    
+
     bool runCode(const char code[]);
     bool runCode(const void* code, size_t size);
-    
+
     void pushBool(bool, const char tableKey[] = NULL);
     void pushString(const char[], const char tableKey[] = NULL);
     void pushString(const SkString&, const char tableKey[] = NULL);
diff --git a/samplecode/SampleLua.cpp b/samplecode/SampleLua.cpp
index 5b6be55..1ad89f9 100644
--- a/samplecode/SampleLua.cpp
+++ b/samplecode/SampleLua.cpp
@@ -64,7 +64,7 @@
 class LuaView : public SampleView {
 public:
     LuaView() : fLua(NULL) {}
-    
+
     virtual ~LuaView() {
         SkDELETE(fLua);
     }
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp
index 276f9b5..d040658 100644
--- a/src/gpu/gl/GrGLProgramDesc.cpp
+++ b/src/gpu/gl/GrGLProgramDesc.cpp
@@ -159,7 +159,7 @@
     // Record attribute indices
     header->fPositionAttributeIndex = drawState.positionAttributeIndex();
     header->fLocalCoordAttributeIndex = drawState.localCoordAttributeIndex();
-    
+
     // For constant color and coverage we need an attribute with an index beyond those already set
     int availableAttributeIndex = drawState.getVertexAttribCount();
     if (requiresColorAttrib) {
@@ -171,7 +171,7 @@
     } else {
         header->fColorAttributeIndex = -1;
     }
-    
+
     if (requiresCoverageAttrib) {
         header->fCoverageAttributeIndex = drawState.coverageVertexAttributeIndex();
     } else if (GrGLProgramDesc::kAttribute_ColorInput == header->fCoverageInput) {
@@ -182,7 +182,7 @@
     }
 
     // Here we deal with whether/how we handle color and coverage separately.
-    
+
     // Set these defaults and then possibly change our mind if there is coverage.
     header->fDiscardIfZeroCoverage = false;
     header->fCoverageOutput = kModulate_CoverageOutput;
@@ -247,4 +247,3 @@
     }
     return *this;
 }
-
diff --git a/src/gpu/gl/GrGLProgramDesc.h b/src/gpu/gl/GrGLProgramDesc.h
index f83275d..0cf3b22 100644
--- a/src/gpu/gl/GrGLProgramDesc.h
+++ b/src/gpu/gl/GrGLProgramDesc.h
@@ -28,7 +28,7 @@
     GrGLProgramDesc() : fInitialized(false) {}
     GrGLProgramDesc(const GrGLProgramDesc& desc) { *this = desc; }
 
-    // Returns this as a uint32_t array to be used as a key in the program cache. 
+    // Returns this as a uint32_t array to be used as a key in the program cache.
     const uint32_t* asKey() const {
         GrAssert(fInitialized);
         return reinterpret_cast<const uint32_t*>(fKey.get());
@@ -164,7 +164,7 @@
         int8_t                      fLocalCoordAttributeIndex;
         int8_t                      fColorAttributeIndex;
         int8_t                      fCoverageAttributeIndex;
-        
+
         int8_t                      fColorEffectCnt;
         int8_t                      fCoverageEffectCnt;
     };
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index b017d5d..5dab982 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -144,7 +144,7 @@
         }
         GrAssert(fEntries[purgeIdx] == entry);
         entry->fProgram.reset(program);
-        // We need to shift fEntries around so that the entry currently at purgeIdx is placed 
+        // We need to shift fEntries around so that the entry currently at purgeIdx is placed
         // just before the entry at ~entryIdx (in order to keep fEntries sorted by descriptor).
         entryIdx = ~entryIdx;
         if (entryIdx < purgeIdx) {
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index ca6f493..9aef50e 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -195,7 +195,7 @@
     SkASSERT(lua_istable(L, index));
     lua_pushstring(L, key);
     lua_gettable(L, index);
-    
+
     SkScalar value = lua2scalar(L, -1);
     lua_pop(L, 1);
     return value;
@@ -492,18 +492,18 @@
             int t = lua_type(L, -1);
             SkDebugf("--- expected function %d\n", t);
         }
-        
+
         lua_newtable(L);
         setfield_string(L, "verb", verb);
     }
-    
+
     ~AutoCallLua() {
         if (lua_pcall(fL, 1, 0, 0) != LUA_OK) {
             SkDebugf("lua err: %s\n", lua_tostring(fL, -1));
         }
         lua_settop(fL, -1);
     }
-    
+
 private:
     lua_State* fL;
 };
@@ -563,4 +563,3 @@
     REG_CLASS(L, SkPaint);
     REG_CLASS(L, SkRRect);
 }
-
