Text-frame word wrap

• Feb 14, 2020 - 13:04
Reported version
3.4
Type
Functional
Frequency
Few
Severity
S5 - Suggestion
Reproducibility
Always
Status
active
Regression
No
Workaround
No
Project

There should be a command, perhaps in the text toolbar, that word-wrap-fills text in an open text or horizontal frame. This is not the same as justify (see #292362: Justify text feature ). This would not be a mode or frame attribute, but a one-shot command. The effect would be to insert "soft" line breaks before, and only before, words that overflow the right margin, and preserve "hard" (user-entered "Return") line breaks. As in all such implementations, words longer than the width of the box would stay unaltered.

Manual text-filling of text in text frames, required now when frames are resized, is difficult and extremely time-consuming. How to define this usefully for text-boxes, which expand to fit what you type, is an issue.


Comments

It could (and maybe even should) also be automatically, like for example for text frames, which already change their height automatically to fit the text, but do require manual word-wrap

In reply to by jpear1

jpear1,

Word-wrap would be a wonderful addition to Musescore! Are you making progress on this?

I'm wondering if you're envisioning:

   • text frames and vertical frames with a "column number" property
   • column "gutter width" properties
   • frame margins or padding
   • the option of "separate columns" or "automatic column flow" from left to right?"
   • linking overflows to another frame

The following options would be icing on the cake!

   • a line height/leading property
   • hypenation toggle

I'm really enjoying writing educational materials in MuseScore. But MuseScore does not yet offer an elegant option for narrow word-wrap columns ... and this is important because people don't easily read wide columns.

   • Word wrap on text frames and Measure text would allow me to easily present text in narrower more readable columns.

   • Additionally word-wrap and column-flow would keep my attention on creating content and relieve me from managing line breaks when rewording and editing.

The ultimate ideal would be Vertical frames with a "native" text column feature. Currently it appears that a vertical frame doesn't actually "contain" anything, but just creates a block of open space. That's handy, but the option for Frames to natively contain text and columns (beyond the Add>Text feature, which merely anchors a text object to a frame) that would be a remarkable addition and the user could change the frame width and the child columns would change width and height accordingly.

Thanks!

scorster

Control for line spacing is already present in 3.6.

Also, you can add horizontal frames within vertical frames if you want, which doesn't really solve anything here but is worth noting as a possible design consideration should any sort of word wrap feature be implemented and the question of setting columns comes up.

In reply to by scorster

Hello scorster,

I implemented word wrapping for text boxes here: https://github.com/jpear1/MuseScore/tree/implementWordWrap, but it has a couple of bugs caused by the bad approach I took that I couldn't find a fix for. One of them was that it's impossible to put your cursor in front of the first character of a word wrapped line.

So right now if you wanted you could build that version of the project, then draw text boxes to fake the frames feature you're talking about, and have text wrap (I didn't implement justified text or hyphenation however).

Right now, as far as I know, most of the core MuseScore devs are working on MuseScore 4, so MuseScore 3 is no longer getting new features and there isn't a clear way for what I've written to be used in MuseScore 4. Maybe my wrapping algorithm could be reused: https://github.com/jpear1/MuseScore/blob/41e24bbafd474c977d9b6bd685b8f1….

I may take another crack at this once MuseScore 4 comes out and try to implement some the fancier features you've listed as well, but that won't be for a while.