# Fortran

To use this language, use the class "language-fortran".

## Comments

    ! This is a comment

## Strings

    "foo 'bar' baz"
    'foo ''bar'' baz'
    ''
    ITALICS_'This is in italics'
    "test &
    	! Some "tricky comment" here
    	&test"

## Numbers

    473
    +56
    -101
    21_2
    21_SHORT
    1976354279568241_8
    B'01110'
    B"010"
    O'047'
    O"642"
    Z'F41A'
    Z"00BC"
    -12.78
    +1.6E3
    2.1
    -16.E4_8
    0.45E-4
    10.93E7_QUAD
    .123
    3E4

## Full example

    MODULE MOD1
    TYPE INITIALIZED_TYPE
    	INTEGER :: I = 1 ! Default initialization
    END TYPE INITIALIZED_TYPE
    SAVE :: SAVED1, SAVED2
    INTEGER :: SAVED1, UNSAVED1
    TYPE(INITIALIZED_TYPE) :: SAVED2, UNSAVED2
    ALLOCATABLE :: SAVED1(:), SAVED2(:), UNSAVED1(:), UNSAVED2(:)
    END MODULE MOD1

    PROGRAM MAIN
    CALL SUB1 ! The values returned by the ALLOCATED intrinsic calls
              ! in the PRINT statement are:
              ! .FALSE., .FALSE., .FALSE., and .FALSE.
              ! Module MOD1 is used, and its variables are allocated.
              ! After return from the subroutine, whether the variables
              ! which were not specified with the SAVE attribute
              ! retain their allocation status is processor dependent.
    CALL SUB1 ! The values returned by the first two ALLOCATED intrinsic
    	      ! calls in the PRINT statement are:
    	      ! .TRUE., .TRUE.
    	      ! The values returned by the second two ALLOCATED
    	      ! intrinsic calls in the PRINT statement are
    	      ! processor dependent and each could be either
    	      ! .TRUE. or .FALSE.
    CONTAINS
    	SUBROUTINE SUB1
    	USE MOD1 ! Brings in saved and not saved variables.
    	PRINT *, ALLOCATED(SAVED1), ALLOCATED(SAVED2), &
    	         ALLOCATED(UNSAVED1), ALLOCATED(UNSAVED2)
    	IF (.NOT. ALLOCATED(SAVED1)) ALLOCATE(SAVED1(10))
    	IF (.NOT. ALLOCATED(SAVED2)) ALLOCATE(SAVED2(10))
    	IF (.NOT. ALLOCATED(UNSAVED1)) ALLOCATE(UNSAVED1(10))
    	IF (.NOT. ALLOCATED(UNSAVED2)) ALLOCATE(UNSAVED2(10))
    	END SUBROUTINE SUB1
    END PROGRAM MAIN

## Known failures

There are certain edge cases where Prism will fail. There are always such cases in every regex-based syntax highlighter. However, Prism dares to be open and honest about them. If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug.

### Commented string

    ! This "string" should not be highlighted