[fpc-pascal] Feature "Multiline strings" added

Flávio Etrusco flavio.etrusco at gmail.com
Sun Jul 27 23:33:42 CEST 2025


Thanks to you both!
Maybe I missed something, but isn't there a way to strip/skip the "line
endings"?

Em dom., 27 de jul. de 2025 às 09:29, Michael Van Canneyt via fpc-pascal <
fpc-pascal at lists.freepascal.org> escreveu:

>
> Hello,
>
> I have added (long overdue) multiline string support to the FPC compiler.
>
> It is activated by default in objfpc and delphi modes.
>
> if you wish to use it (or disable it), there is a modeswitch:
>
> {$modeswitch multilinestrings}
> or, to disable
> {$modeswitch multilinestrings-}
>
> Due to historic reasons, it comes in 2 flavours.
>
> Delphi style:
>
> a multiline string starts with a odd number of quotes (3 at least),
> followed by a newline, and ends with an equal amount of quotes on a
> line preceded by only whitespace:
>
> const s = '''
>    some
>    multiline
>    stuff
>    ''';
>
> In the resulting string, the first N whitespace characters will be trimmed,
> where N is the number of whitespace characters before the terminating
> quotes. The last CR/LF is also stripped. If a line contains less
> whitespaces
> than the final line, it is considered an error.
>
> So the above example would be equivalent to
>
> const s = 'some '+sLineBreak+'multiline '+sLinebreak+'stuff';
>
> (the "some " and "multiline " are followed by a space, your mail client
> may not
> display that corectly in the source... )
>
> The line-ending in the resulting string is by default the native line
> ending.
> this can be influenced by the (delphi-compatible) directive:
>
> {$TEXTBLOCK NATIVE/CR/LF/CRLF}
>
> To include triple quotes in such a string, you can use 5 quotes to delimit
> the string:
>
> const s = '''''
>    some
>    '''multiline '''
>    stuff
>    ''''';
>
> All this is Delphi compatible.
>
> The FPC bugtracker contains since a long time a proposal for multiline
> strings using a backtick as the quote character:
>
> https://gitlab.com/freepascal.org/fpc/source/-/issues/35827
>
> This has since been implemented in pas2js (our pascal to Javascript
> transpiler).
> In the interest of compatibility, that proposal has also been implemented
> in
> FPC as well.
>
> In fact, the implementation in the issue has served as the start of the
> Delphi-compatible
> implementation.
>
> This means you can also do
>
> const S = `some
> multiline
> stuff`;
>
> This form of multiline strings can be configured using 2 directives:
>
> {$MULTILINESTRINGTRIMLEFT N}
>
> where N is the number of whitespace characters to strip from the string.
>
> The line ending can be set using
>
> {$MULTILINESTRINGLINEENDING PLATFORM/CR/LF/CRLF/SOURCE}
>
> SOURCE will use the line ending as used in the string definition, other
> than
> that the effect is identical to $TEXTBLOCK.
>
> Despite the large amount of tests for this new feature, there may still be
> bugs,
> please report them in the bugtracker if you encounter them.
>
> My thanks to user Akira1364 (real name?) for the initial implementation of
> this feature.
>
> Michael.
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20250727/e0e7706b/attachment.htm>


More information about the fpc-pascal mailing list