package Ġorg . jetbrains . fortran . lang . lexer Ċ Ċ import Ġcom . intellij . lang . Foreign Leaf Type Ċ import Ġcom . intellij . lexer . Lexer Ċ import Ġcom . intellij . lexer . Lexer Util Ċ import Ġcom . intellij . lexer . Look A head Lexer Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . TokenType Ċ import Ġcom . intellij . util . indexing . Indexing Data Keys Ċ import Ġorg . jetbrains . fortran . lang . For tran Types Ċ import Ġorg . jetbrains . fortran . lang . preprocessor . For tran Pre processing Lexer Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran File Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran Include Foreign Leaf Type Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran Token Sets Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran TokenType Ċ import Ġorg . jetbrains . fortran . lang . resolve Included File Ċ Ċ class ĠFor tran Include Processing Lexer ( val Ġfile : ĠFor tran File ?, Ġval Ġproject : ĠProject ) Ġ: ĊĠĠĠĠĠĠĠ ĠLook A head Lexer ( For tran Pre processing Lexer ()) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlook A head ( base Lexer : ĠLex er ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Token Ġ= Ġbase Lexer . token Type ĊĠĠĠĠĠĠĠ Ġif Ġ( base Token Ġ== ĠFor tran TokenType . INCLUDE _ KEYWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Include Statement ( base Lexer ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Lexer . advance () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Include Statement ( base Lexer : ĠLex er ) Ġ{ ĊĠĠĠĠĠĠĠ ĠProgress Manager . check Canceled () ĊĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Type ) ĊĠĠĠĠĠĠĠ Ġbase Lexer . advance () ĊĠĠĠĠĠĠĠ Ġskip White Spaces ( base Lexer ) ĊĠĠĠĠĠĠĠ Ġval Ġtoken Type Ġ= Ġbase Lexer . token Type ĊĠĠĠĠĠĠĠ Ġif Ġ( token Type Ġ== ĠFor tran Types . STRING LITERAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠLex er Util . getToken Text ( base Lexer ). toString (). trim (' "', Ġ'\' ', Ġ' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincluded File Ġ= Ġresolve Included File ( get Virtual File ( file ), Ġpath , Ġproject ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Lexer . advance () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( included File Ġ!= Ġnull Ġ&& Ġincluded File . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Ġ= Ġfile ?. manager ?. find File ( included File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubst Lexer Ġ= ĠFor tran Include Processing Lexer ( file , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubst Lexer . start ( resolved . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Start , ĠFor tran Include Foreign Leaf Type ( For tran Types . EOL , Ġ"\ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprevious Whitespace Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġsubst Lexer . token Type Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠForeign Leaf Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Start , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Whitespace Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! For tran Token Sets . WHITE _ SP ACES . contains ( type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Text Ġ= ĠLex er Util . getToken Text ( subst Lexer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Start , ĠFor tran Include Foreign Leaf Type ( type , Ġtoken Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Whitespace Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! previous Whitespace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( base Lexer . token Start , ĠFor tran Include Foreign Leaf Type ( TokenType . WHITE _ SPACE , Ġ" Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Whitespace Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubst Lexer . advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġskip White Spaces ( base Lexer : ĠLex er ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtoken Type Ġ= Ġbase Lexer . token Type ĊĠĠĠĠĠĠĠ Ġwhile Ġ( For tran Token Sets . WHITE _ SP ACES . contains ( token Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Token ( token Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Lexer . advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= Ġbase Lexer . token Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Virtual File ( file : ĠPsi File ?): ĠVirtual File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile ?. original File ?. virtual File Ġ?: Ġfile ?. getUser Data ( Indexing Data Keys . VIRTUAL _ FILE ) ĊĠĠĠ Ġ} Ċ }