Aha. Your describing that as "also" pretty much shows me where to go
with my answer. That's not just an "also"; that is the center of the
whole thing.
The Fortran standard talks about source code "lines". In terms of the
standard, a line is an abstract thing (like most things in the
standard). The standard pointedly says nothing about what a source code
line is made of in concrete terms. This is quite deliberate. Source code
lines could, and have been on, punched cards, paper tape, magnetic
tapes, or anything else. Oh yes, and they could be disk files. Those
things are all possible physical representations of the source code
lines. It is entirely up to the compiler (well, "processor" in
standard-speak) to define the relationship between the physical
representation and the abstract Fortran concept - what holes would be
punched in the card, or what bits would be on the disk in order to
represent a line as described in the standard.
The CR and/or LF characters that you'll find in common text file formats
today are just part of that physical representation. They are how the
compiler keeps track of what is in each line. They are not part of the
line as described by the standard. They are instead part of the physical
representation. That's the stuff that the standard says nothing about.
If, to take the usual Unix convention for example, the compiler uses an
LF as part of its physical representation of a line, then you aren't
going to be able to have an LF that's part of the abstract line
described by the Fortran standard. That's because if you try, it will
look like the end of the line instead of like something in the content
of the line. (Yes, there could be ways to "escape" that, but the usual
Unix convenstion doesn't). On the other hand, there are file formats
where there is no particular problem in having an LF character. The
record size headers typical of sequential unformatted files alow the
record to contain completely arbitrary content, including LF characters.
There exist systems that use formats like that for text files as well as
for unformatted ones.
As for what I mean by "portable code".... well, I'd hope that was
largely self-evident. Portable code is code that you can easily move
(aka port) from one system to another. There are various degrees of
portable. Depending on context, code might be referred to as portable if
it could be moved from one system to another with relatively small and
simple changes, or it might be called portable only if it could be moved
with no changes at all.
You might be thinking that standard conformance is enough to ensure
portability. If so, you would be wrong. The standard itself is quite
explicit about that. From 1.5, Conformance, in f2003
"Because a standard-conforming program may place demands on a
processor that are not within the scope of the standard or may include
standard items that are not portable,... conformance to this standard
does not ensure that a program will execute consistently on all or any
standard-conforming processors."
If you did have a processor (compiler) that allowed such things as tabs,
CR, and LF in source code lines, that would count as being standard
conforming, but not portable. Please note that I said "in source code
lines." The CR and/or LF that often are used as part of the physical
representation of a source code line do not count as being part of the
source code line. Actually, a tab could also concievably be considered
as part of the physical representation of some number of blanks in the
source code line, but in that case you'd have a physical representation
that was not necessarily portable. I don't think you'll find that most
compilers treat tabs consistently enough to really count quite like
that, but it is at least possible (easy, even).
I could go on a bit more than this already long reply. There are plenty
of related subtleties. But I think that will have to do for now.