@@ -29,10 +29,38 @@ export default class FortranHoverProvider {
2929 let hover = new Hover ( this . loadDocumentation ( intrinsics [ pos ] ) ) ;
3030 return hover ;
3131 }
32- private loadDocumentation ( intrinsic : string ) :string {
33-
32+ private loadDocumentation ( intrinsic : string ) :vscode . MarkedString {
3433 let docStringBuffer = fs . readFileSync ( __dirname + "/../../../src/docs/" + intrinsic + ".html" )
35- return docStringBuffer . toString ( ) ;
34+ let docText = docStringBuffer . toString ( ) ;
35+ const codeRegex = / < c o d e > ( .+ ?) < \/ c o d e > \n ? / g ;
36+ const varRegex = / < v a r > ( .+ ?) < \/ v a r > / g;
37+ const spanRegex = / < s a m p > < s p a n c l a s s = " c o m m a n d " > ( \w + ) < \/ s p a n > < \/ s a m p > / g;
38+ const tableRegex = / < t a b l e \s * .* > ( [ \s \w < > \/ \W ] + ?) < \/ t a b l e > / g;
39+ const codeExampleRegex = / < c o d e c l a s s = " s m a l l e x a m p l e " [ \s \W \w ] * ?> ( [ \s \W \w < > ] * ?) < \/ c o d e > / g;
40+ const headerRegex = / ^ * < h ( \d ) > ( .+ ?) < \/ h \1> \n ? / gm;
41+ const defListRegex = / < d t > ( [ \w \W ] + ?) < \/ d t > < d d > ( [ \w \W ] + ?) ( < b r > ) ? < \/ d d > / g;
42+
43+ docText = docText . replace ( varRegex , ( match , code :string ) => {
44+ return "`" + code + "`" ;
45+ } ) . replace ( spanRegex , ( match , code ) => `*${ code } *` )
46+ . replace ( defListRegex , ( match , entry , def ) => `**${ entry } ** ${ def } \n` )
47+ . replace ( codeExampleRegex , ( match , code ) => "```\n" + code + "\n\n```\n" )
48+ . replace ( / < t d \s * .* ?> ( [ \s \w < > \/ \W ] + ?) < \/ t d > / g, ( match , code ) => " | " + code )
49+ . replace ( / < t r \s * .* ?> ( [ \s \w < > \/ \W ] + ?) < \/ t r > / g, ( match , code ) => code + "\n" )
50+ . replace ( / < t b o d y \s * .* ?> ( [ \s \w < > \/ \W ] + ?) < \/ t b o d y > / g, ( match , code ) => code )
51+ . replace ( tableRegex , ( match , code ) => code )
52+ . replace ( codeRegex , ( match , code :string ) => {
53+ return "`" + code + "`" ;
54+ } ) . replace ( / < p > \s * ?/ g, "\n" )
55+ . replace ( / < \/ p > \s * ?/ g, "\n" )
56+ . replace ( headerRegex , ( match , h :string , code :string ) => {
57+ let headerLevel : number = parseInt ( h ) ;
58+ let header = '#' . repeat ( headerLevel ) ;
59+ return `${ header } ${ code } \n` ;
60+ } ) ;
61+ docText = docText . replace ( / ^ * < b r > \n ? / gm, '\n' ) . replace ( / < \? d l > / g, "" ) ;
62+ console . log ( docText ) ;
63+ return docText ;
3664 }
3765
3866
0 commit comments