Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: src/gpu/gl/GrGLSLPrettyPrint.cpp

Issue 491673002: Initial refactor of shaderbuilder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLProgramEffects.cpp ('k') | src/gpu/gl/GrGLShaderBuilder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLSLPrettyPrint.cpp
diff --git a/src/gpu/gl/GrGLSLPrettyPrint.cpp b/src/gpu/gl/GrGLSLPrettyPrint.cpp
deleted file mode 100644
index 27f4b44e66b87258d7f9131a7fed789aefd5485e..0000000000000000000000000000000000000000
--- a/src/gpu/gl/GrGLSLPrettyPrint.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "gl/GrGLSLPrettyPrint.h"
-
-namespace GrGLSLPrettyPrint {
-
-class GLSLPrettyPrint {
-public:
- GLSLPrettyPrint() {}
-
- SkString prettify(const SkString& input, bool countlines) {
- // setup pretty state
- fIndex = 0;
- fLength = input.size();
- fInput = input;
- fCountlines = countlines;
- fTabs = 0;
- fLinecount = 1;
- fFreshline = true;
-
- int parensDepth = 0;
- // number 1st line
- this->lineNumbering();
- while (fLength > fIndex) {
- /* the heart and soul of our prettification algorithm. The rules should hopefully be
- * self explanatory. For '#' and '//' tokens we parse until we reach a newline.
- *
- * For long style comments like this one, we search for the ending token. We also
- * preserve whitespace in these comments WITH THE CAVEAT that we do the newlines
- * ourselves. This allows us to remain in control of line numbers, and matching tabs
- * Existing tabs in the input string are copied over too, but this will look funny
- *
- * '{' and '}' are handled in basically the same way. We add a newline if we aren't
- * on a fresh line, dirty the line, then add a second newline, ie braces are always
- * on their own lines indented properly. The one funkiness here is structs print with
- * the semicolon on its own line. Its not a problem for a glsl compiler though
- *
- * '(' and ')' are basically ignored, except as a sign we need to ignore ';' ala
- * in for loops.
- *
- * ';' means add a new line
- *
- * '\t' and '\n' are ignored in general parsing for backwards compatability with
- * existing shader code and we also have a special case for handling whitespace
- * at the beginning of fresh lines.
- *
- * Otherwise just add the new character to the pretty string, indenting if necessary.
- */
- if (this->hasToken("#") || this->hasToken("//")) {
- this->parseUntilNewline();
- } else if (this->hasToken("/*")) {
- this->parseUntil("*/");
- } else if ('{' == fInput[fIndex]) {
- this->newline();
- this->appendChar('{');
- fTabs++;
- this->newline();
- } else if ('}' == fInput[fIndex]) {
- fTabs--;
- this->newline();
- this->appendChar('}');
- this->newline();
- } else if (this->hasToken(")")) {
- parensDepth--;
- } else if (this->hasToken("(")) {
- parensDepth++;
- } else if (!parensDepth && this->hasToken(";")) {
- this->newline();
- } else if ('\t' == fInput[fIndex] || '\n' == fInput[fIndex] ||
- (fFreshline && ' ' == fInput[fIndex])) {
- fIndex++;
- } else {
- this->appendChar(input[fIndex]);
- }
- }
- return fPretty;
- }
-private:
- void appendChar(char c) {
- this->tabString();
- fPretty.appendf("%c", fInput[fIndex++]);
- fFreshline = false;
- }
-
- // hasToken automatically consumes the next token, if it is a match, and then tabs
- // if necessary, before inserting the token into the pretty string
- bool hasToken(const char* token) {
- size_t i = fIndex;
- for (size_t j = 0; token[j] && fLength > i; i++, j++) {
- if (token[j] != fInput[i]) {
- return false;
- }
- }
- this->tabString();
- fIndex = i;
- fPretty.append(token);
- fFreshline = false;
- return true;
- }
-
- void parseUntilNewline() {
- while (fLength > fIndex) {
- if ('\n' == fInput[fIndex]) {
- fIndex++;
- this->newline();
- break;
- }
- fPretty.appendf("%c", fInput[fIndex++]);
- }
- }
-
- // this code assumes it is not actually searching for a newline. If you need to search for a
- // newline, then use the function above. If you do search for a newline with this function
- // it will consume the entire string and the output will certainly not be prettified
- void parseUntil(const char* token) {
- while (fLength > fIndex) {
- // For embedded newlines, this code will make sure to embed the newline in the
- // pretty string, increase the linecount, and tab out the next line to the appropriate
- // place
- if ('\n' == fInput[fIndex]) {
- this->newline();
- this->tabString();
- fIndex++;
- }
- if (this->hasToken(token)) {
- break;
- }
- fFreshline = false;
- fPretty.appendf("%c", fInput[fIndex++]);
- }
- }
-
- // We only tab if on a newline, otherwise consider the line tabbed
- void tabString() {
- if (fFreshline) {
- for (int t = 0; t < fTabs; t++) {
- fPretty.append("\t");
- }
- }
- }
-
- // newline is really a request to add a newline, if we are on a fresh line there is no reason
- // to add another newline
- void newline() {
- if (!fFreshline) {
- fFreshline = true;
- fPretty.append("\n");
- this->lineNumbering();
- }
- }
-
- void lineNumbering() {
- if (fCountlines) {
- fPretty.appendf("%4d\t", fLinecount++);
- }
- }
-
- bool fCountlines, fFreshline;
- int fTabs, fLinecount;
- size_t fIndex, fLength;
- SkString fInput, fPretty;
-};
-
-SkString PrettyPrintGLSL(const SkString& input, bool countlines) {
- GLSLPrettyPrint pp;
- return pp.prettify(input, countlines);
-}
-
-} // end namespace
« no previous file with comments | « src/gpu/gl/GrGLProgramEffects.cpp ('k') | src/gpu/gl/GrGLShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698