From b2b141aae430a2018679a30286043c9cd6fa17ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 17 May 2018 16:42:42 +0200 Subject: [PATCH] [escher] Fix underscore replacement for subscript insertion in textfield --- escher/src/text_field.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index 4a1a00e2e..b40174b62 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -313,12 +313,18 @@ bool TextField::handleEventWithText(const char * eventText, bool indentation, bo * such a subscript should be written using parentheses. For instance: "u_{n}" * should be inserted as "u(n)". * We thus remove underscores and changes brackets into parentheses. */ + bool specialUnderScore = false; for (size_t i = bufferIndex; i < eventTextSize; i++) { - if (eventText[i] == '{') { + if (eventText[i] == '_') { + specialUnderScore = ((i < eventTextSize - 1) && (eventText[i+1] == '{')) ? true : false; + if (!specialUnderScore) { + buffer[bufferIndex++] = '_'; + } + } else if (eventText[i] == '{' && specialUnderScore) { buffer[bufferIndex++] = '('; - } else if (eventText[i] == '}') { + } else if (eventText[i] == '}' && specialUnderScore) { buffer[bufferIndex++] = ')'; - } else if (eventText[i] == '_') { + specialUnderScore = false; } else { buffer[bufferIndex++] = eventText[i]; }