diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index b9a1b71f8..511abaf84 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -104,8 +104,6 @@ void ListController::editExpression(int sequenceDefinition, Ion::Events::Event e break; } initialText = initialTextContent; - // Replace UCodePointUnknownN with 'n' - replaceUnknownSymbolWithReadableSymbol(initialText); } InputViewController * inputController = Shared::FunctionApp::app()->inputViewController(); // Invalidate the sequences context cache diff --git a/apps/shared/expression_model.cpp b/apps/shared/expression_model.cpp index 258887438..a2fad900c 100644 --- a/apps/shared/expression_model.cpp +++ b/apps/shared/expression_model.cpp @@ -20,11 +20,14 @@ ExpressionModel::ExpressionModel() : { } -void ExpressionModel::text(const Storage::Record * record, char * buffer, size_t bufferSize) const { +void ExpressionModel::text(const Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol, CodePoint unknownSymbol) const { Expression e = expressionClone(record); if (e.isUninitialized() && bufferSize > 0) { buffer[0] = 0; } else { + if (symbol != 0 && !e.isUninitialized()) { + e = e.replaceUnknown(Symbol::Builder(unknownSymbol), Symbol::Builder(symbol)); + } e.serialize(buffer, bufferSize); } } diff --git a/apps/shared/expression_model.h b/apps/shared/expression_model.h index e3bab63e2..9406e3a00 100644 --- a/apps/shared/expression_model.h +++ b/apps/shared/expression_model.h @@ -12,7 +12,7 @@ public: ExpressionModel(); // Getters - void text(const Ion::Storage::Record * record, char * buffer, size_t bufferSize) const; + void text(const Ion::Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol = 0, CodePoint unknownSymbol = 0) const; Poincare::Expression expressionReduced(const Ion::Storage::Record * record, Poincare::Context * context) const; Poincare::Expression expressionClone(const Ion::Storage::Record * record) const; Poincare::Layout layout(const Ion::Storage::Record * record) const; diff --git a/apps/shared/expression_model_handle.h b/apps/shared/expression_model_handle.h index 839ad22d8..b5f2bdba0 100644 --- a/apps/shared/expression_model_handle.h +++ b/apps/shared/expression_model_handle.h @@ -14,7 +14,7 @@ public: virtual CodePoint unknownSymbol() const { return 0; } // Property - void text(char * buffer, size_t bufferSize) const { return model()->text(this, buffer, bufferSize); } + void text(char * buffer, size_t bufferSize) const { return model()->text(this, buffer, bufferSize, symbol(), unknownSymbol()); } Poincare::Expression expressionReduced(Poincare::Context * context) const { return model()->expressionReduced(this, context); } Poincare::Expression expressionClone() const { return model()->expressionClone(this); } Poincare::Layout layout() { return model()->layout(this); } diff --git a/apps/shared/expression_model_list_controller.cpp b/apps/shared/expression_model_list_controller.cpp index e635a16ff..684afbf74 100644 --- a/apps/shared/expression_model_list_controller.cpp +++ b/apps/shared/expression_model_list_controller.cpp @@ -219,17 +219,6 @@ void ExpressionModelListController::reinitSelectedExpression(ExpiringPointerreloadData(); } -void ExpressionModelListController::replaceUnknownSymbolWithReadableSymbol(char * text) { - size_t textLength = strlen(text); - char unknownSymb = modelStore()->unknownSymbol(); - char symb = modelStore()->symbol(); - for (size_t i = 0; i < textLength; i++) { - if (unknownSymb != 0 && text[i] == unknownSymb) { - text[i] = symb; - } - } -} - void ExpressionModelListController::editExpression(Ion::Events::Event event) { char * initialText = nullptr; constexpr int initialTextContentMaxSize = Constant::MaxSerializedExpressionSize; @@ -239,8 +228,6 @@ void ExpressionModelListController::editExpression(Ion::Events::Event event) { ExpiringPointer model = modelStore()->modelForRecord(record); model->text(initialTextContent, initialTextContentMaxSize); initialText = initialTextContent; - // Replace UCodePointUnknownX with 'x' - replaceUnknownSymbolWithReadableSymbol(initialTextContent); } inputController()->edit(this, event, this, initialText, [](void * context, void * sender){ diff --git a/apps/shared/expression_model_list_controller.h b/apps/shared/expression_model_list_controller.h index 82ae4db1a..be8e3c568 100644 --- a/apps/shared/expression_model_list_controller.h +++ b/apps/shared/expression_model_list_controller.h @@ -27,7 +27,6 @@ protected: virtual void didChangeModelsList() { resetMemoization(); } virtual void reinitSelectedExpression(ExpiringPointer model); virtual void editExpression(Ion::Events::Event event); - void replaceUnknownSymbolWithReadableSymbol(char * initialText); virtual bool editSelectedRecordWithText(const char * text); virtual bool removeModelRow(Ion::Storage::Record record); virtual int modelIndexForRow(int j) { return j; }