aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2018-10-23 15:43:19 +0200
committerRay <raysan5@gmail.com>2018-10-23 15:43:19 +0200
commit550dd40cb324896138dde9ee43bb44c0b9723345 (patch)
treebe67954c09b39928b58cd89a322cf1dd2c08f265 /src
parentb5bcf2c934a6b0c6b3e8bc9766abc658905fd694 (diff)
downloadraylib-550dd40cb324896138dde9ee43bb44c0b9723345.tar.gz
raylib-550dd40cb324896138dde9ee43bb44c0b9723345.zip
ADDED: SplitText() function
Diffstat (limited to 'src')
-rw-r--r--src/raylib.h7
-rw-r--r--src/text.c140
2 files changed, 93 insertions, 54 deletions
diff --git a/src/raylib.h b/src/raylib.h
index 8256b745..be2383b1 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1088,10 +1088,13 @@ RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontS
// Text misc. functions
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font
-RLAPI const char *FormatText(const char *text, ...); // Formatting of text with variables to 'embed'
-RLAPI const char *SubText(const char *text, int position, int length); // Get a piece of a text string
RLAPI int GetGlyphIndex(Font font, int character); // Get index position for a unicode character on font
+// Text string edition functions
+RLAPI const char *FormatText(const char *text, ...); // Formatting of text with variables to 'embed'
+RLAPI const char *SubText(const char *text, int position, int length); // Get a piece of a text string
+RLAPI char **SplitText(char *text, char delimiter, int *strCount); // Split text string into multiple strings (memory should be freed manually!)
+
//------------------------------------------------------------------------------------
// Basic 3d Shapes Drawing Functions (Module: models)
//------------------------------------------------------------------------------------
diff --git a/src/text.c b/src/text.c
index 51e93b72..6e86958e 100644
--- a/src/text.c
+++ b/src/text.c
@@ -566,6 +566,28 @@ void UnloadFont(Font font)
}
}
+// Shows current FPS on top-left corner
+// NOTE: Uses default font
+void DrawFPS(int posX, int posY)
+{
+ // NOTE: We are rendering fps every second for better viewing on high framerates
+
+ static int fps = 0;
+ static int counter = 0;
+ static int refreshRate = 20;
+
+ if (counter < refreshRate) counter++;
+ else
+ {
+ fps = GetFPS();
+ refreshRate = fps;
+ counter = 0;
+ }
+
+ // NOTE: We have rounding errors every frame, so it oscillates a lot
+ DrawText(FormatText("%2i FPS", fps), posX, posY, 20, LIME);
+}
+
// Draw text (using default font)
// NOTE: fontSize work like in any drawing program but if fontSize is lower than font-base-size, then font-base-size is used
// NOTE: chars spacing is proportional to fontSize
@@ -642,44 +664,6 @@ void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, f
}
}
-// Formatting of text with variables to 'embed'
-const char *FormatText(const char *text, ...)
-{
- static char buffer[MAX_FORMATTEXT_LENGTH];
-
- va_list args;
- va_start(args, text);
- vsprintf(buffer, text, args);
- va_end(args);
-
- return buffer;
-}
-
-// Get a piece of a text string
-const char *SubText(const char *text, int position, int length)
-{
- static char buffer[MAX_SUBTEXT_LENGTH] = { 0 };
- int textLength = strlen(text);
-
- if (position >= textLength)
- {
- position = textLength - 1;
- length = 0;
- }
-
- if (length >= textLength) length = textLength;
-
- for (int c = 0 ; c < length ; c++)
- {
- *(buffer + c) = *(text + position);
- text++;
- }
-
- *(buffer + length) = '\0';
-
- return buffer;
-}
-
// Measure string width for default font
int MeasureText(const char *text, int fontSize)
{
@@ -764,26 +748,78 @@ int GetGlyphIndex(Font font, int character)
#endif
}
-// Shows current FPS on top-left corner
-// NOTE: Uses default font
-void DrawFPS(int posX, int posY)
+// Formatting of text with variables to 'embed'
+const char *FormatText(const char *text, ...)
{
- // NOTE: We are rendering fps every second for better viewing on high framerates
+ static char buffer[MAX_FORMATTEXT_LENGTH];
- static int fps = 0;
- static int counter = 0;
- static int refreshRate = 20;
+ va_list args;
+ va_start(args, text);
+ vsprintf(buffer, text, args);
+ va_end(args);
- if (counter < refreshRate) counter++;
- else
+ return buffer;
+}
+
+// Get a piece of a text string
+const char *SubText(const char *text, int position, int length)
+{
+ static char buffer[MAX_SUBTEXT_LENGTH] = { 0 };
+ int textLength = strlen(text);
+
+ if (position >= textLength)
{
- fps = GetFPS();
- refreshRate = fps;
- counter = 0;
+ position = textLength - 1;
+ length = 0;
}
+
+ if (length >= textLength) length = textLength;
+
+ for (int c = 0 ; c < length ; c++)
+ {
+ *(buffer + c) = *(text + position);
+ text++;
+ }
+
+ *(buffer + length) = '\0';
+
+ return buffer;
+}
+
+// Split string into multiple strings
+// NOTE: Files count is returned by parameters pointer
+// NOTE: Allocated memory should be manually freed
+char **SplitText(char *text, char delimiter, int *strCount)
+{
+ #define MAX_SUBSTRING_LENGTH 128
+
+ char **strings = NULL;
+ int len = strlen(text);
+ char *strDup = (char *)malloc(len + 1);
+ strcpy(strDup, text);
+ int counter = 1;
- // NOTE: We have rounding errors every frame, so it oscillates a lot
- DrawText(FormatText("%2i FPS", fps), posX, posY, 20, LIME);
+ // Count how many substrings we have on string
+ for (int i = 0; i < len; i++) if (text[i] == delimiter) counter++;
+
+ // Memory allocation for substrings
+ strings = (char **)malloc(sizeof(char *)*counter);
+ for (int i = 0; i < counter; i++) strings[i] = (char *)malloc(sizeof(char)*MAX_SUBSTRING_LENGTH);
+
+ char *substrPtr = NULL;
+ char delimiters[1] = { delimiter }; // Only caring for one delimiter
+ substrPtr = strtok(strDup, delimiters);
+
+ for (int i = 0; (i < counter) && (substrPtr != NULL); i++)
+ {
+ strcpy(strings[i], substrPtr);
+ substrPtr = strtok(NULL, delimiters);
+ }
+
+ *strCount = counter;
+ free(strDup);
+
+ return strings;
}
//----------------------------------------------------------------------------------