@@ -29,10 +29,38 @@ export default class FortranHoverProvider {
29
29
let hover = new Hover ( this . loadDocumentation ( intrinsics [ pos ] ) ) ;
30
30
return hover ;
31
31
}
32
- private loadDocumentation ( intrinsic : string ) :string {
33
-
32
+ private loadDocumentation ( intrinsic : string ) :vscode . MarkedString {
34
33
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 ;
36
64
}
37
65
38
66
0 commit comments