fortplot_doc_source.f90 Source File


Source Code

module fortplot_doc_source
    !! Source code writing for documentation
    use fortplot_doc_constants, only: PATH_MAX_LEN, GITHUB_BASE_URL
    use fortplot_doc_examples, only: get_fortran_filename
    use fortplot_doc_paths, only: build_python_path, build_local_fortran_path, build_fortran_url
    use fortplot_doc_files, only: copy_file_content
    implicit none
    private
    
    ! Public interface
    public :: write_source_links
    
contains

    subroutine write_source_links(unit_out, example_name)
        integer, intent(in) :: unit_out
        character(len=*), intent(in) :: example_name
        
        character(len=PATH_MAX_LEN) :: fortran_file, fortran_path, python_path, local_fortran_path
        logical :: python_exists
        
        call get_fortran_filename(example_name, fortran_file)
        call build_fortran_url(example_name, fortran_path)
        call build_python_path(example_name, python_path)
        call build_local_fortran_path(example_name, local_fortran_path)
        
        inquire(file=trim(python_path), exist=python_exists)
        
        call write_source_section_header(unit_out)
        call write_fortran_link(unit_out, fortran_file, fortran_path)
        call write_python_link_if_exists(unit_out, example_name, python_path, python_exists)
        call write_source_code_block(unit_out, local_fortran_path)
    end subroutine write_source_links
    
    subroutine write_source_section_header(unit_out)
        integer, intent(in) :: unit_out
        
        write(unit_out, '(A)') '## Source Code'
        write(unit_out, '(A)') ''
    end subroutine write_source_section_header
    
    subroutine write_fortran_link(unit_out, fortran_file, fortran_path)
        integer, intent(in) :: unit_out
        character(len=*), intent(in) :: fortran_file, fortran_path
        
        write(unit_out, '(A)') '🔷 **Fortran:** [' // trim(fortran_file) // &
                              '](' // trim(fortran_path) // ')'
    end subroutine write_fortran_link
    
    subroutine write_python_link_if_exists(unit_out, example_name, python_path, python_exists)
        integer, intent(in) :: unit_out
        character(len=*), intent(in) :: example_name, python_path
        logical, intent(in) :: python_exists
        
        if (python_exists) then
            write(unit_out, '(A)') ''
            write(unit_out, '(A)') '🐍 **Python:** [' // trim(example_name) // &
                                  '.py](' // GITHUB_BASE_URL // trim(python_path) // ')'
        end if
        write(unit_out, '(A)') ''
    end subroutine write_python_link_if_exists
    
    subroutine write_source_code_block(unit_out, local_fortran_path)
        integer, intent(in) :: unit_out
        character(len=*), intent(in) :: local_fortran_path
        
        write(unit_out, '(A)') '```fortran'
        call copy_file_content(local_fortran_path, unit_out)
        write(unit_out, '(A)') '```'
        write(unit_out, '(A)') ''
    end subroutine write_source_code_block

end module fortplot_doc_source