hsc3-0.21: Haskell SuperCollider
Safe HaskellSafe-Inferred
LanguageHaskell2010

Sound.Sc3.Common.Help

Description

Functions to access to the Sc3 Rtf & Html based help systems.

Synopsis

Rtf

sc3_rtf_help_dir :: IO FilePath Source #

Directory containing Sc3 Rtf help files.

sc3_rtf_find_file :: FilePath -> IO (Maybe FilePath) Source #

Find (case-insensitively) indicated file at sc3_rtf_help_dir. Runs the command "find -name" (so Unix only).

sc3_rtf_find_file "SinOsc.help.rtf"
sc3_rtf_find_file "lfsaw.help.rtf"
sc3_rtf_find_file "softClip.rtf"

sc3_rtf_to_scd :: FilePath -> FilePath -> IO () Source #

Run the command unrtf (so UNIX only) to convert an RTF file to a TEXT (.scd) file.

sc3_rtf_help_scd_open_emacs :: String -> IO () Source #

sc3_rtf_help_scd_open with emacsclient --no-wait.

sc3_rtf_help_scd_open_emacs "lfsaw"

Sc-Doc (Html)

sc3_scdoc_help_url :: String Source #

Url for online Sc-Doc SuperCollider documentation.

sc3_scdoc_help_dir :: IO String Source #

Read the environment variable Sc3_ScDoc_Html_Help_Dir. The default value is ~/.local/share/SuperCollider/Help.

sc3_scdoc_help_class :: String -> String Source #

Path to indicated Sc3 class help file.

>>> sc3_scdoc_help_class "SinOsc"
"Classes/SinOsc.html"

sc3_scdoc_help_operator :: String -> FilePath Source #

Generate path to indicated Sc3 operator help file.

>>> sc3_scdoc_help_operator "+"
"Overviews/Operators.html#+"

sc3_scdoc_help_method :: Char -> (String, String) -> FilePath Source #

Generate path to indicated Sc3 method help.

>>> sc3_scdoc_help_method '*' ("C","m")
"Classes/C.html#*m"

sc3_scdoc_help_class_method :: (String, String) -> FilePath Source #

Generate path to indicated Sc3 class method help.

>>> sc3_scdoc_help_class_method ("C","m")
"Classes/C.html#*m"

sc3_scdoc_help_instance_method :: (String, String) -> FilePath Source #

Generate path to indicated Sc3 instance method help.

>>> sc3_scdoc_help_instance_method ("C","m")
"Classes/C.html#-m"

sc3_scdoc_help_path :: String -> String Source #

Sc3 help path documenting x.

>>> sc3_scdoc_help_path "Operator.distort"
"Overviews/Operators.html#distort"
>>> sc3_scdoc_help_path "Collection.*fill"
"Classes/Collection.html#*fill"
>>> sc3_scdoc_help_path "Collection.inject"
"Classes/Collection.html#-inject"
>>> sc3_scdoc_help_path "SinOsc"
"Classes/SinOsc.html"

sc3_scdoc_help_open :: Bool -> String -> IO () Source #

Open Sc3 help path, either the local file or the online version. Use BROWSER or x-www-browser.

Base.System.get_env_default "BROWSER" "x-www-browser"
sc3_scdoc_help_open True (sc3_scdoc_help_path "SinOsc")
sc3_scdoc_help_open True (sc3_scdoc_help_path "Collection.*fill")
sc3_scdoc_help_open False (sc3_scdoc_help_path "Collection.inject")

sc3_scdoc_help_server_command_path :: String -> FilePath Source #

Generate path to indicated Sc3 instance method help. Adds initial forward slash if not present.

let r = "Reference/Server-Command-Reference.html#/b_alloc"
sc3_scdoc_help_server_command_path "b_alloc" == r

sc3_scdoc_help_server_command_open :: Bool -> String -> IO () Source #

sc3_scdoc_help_open of sc3_server_command_path

sc3_scdoc_help_server_command_open True "s_new"
sc3_scdoc_help_server_command_open False "/b_allocRead"

Fragments

on_lines_of :: ([String] -> [[String]]) -> String -> [String] Source #

Apply function at lines of string.

split_multiple_fragments :: [String] -> [[String]] Source #

Split text into fragments at empty lines. Hsc3 (and related projects) write help files as sets of distinct fragments. Fragments are separated by empty lines. A line containing the special character sequence ---- indicates the end of the fragments.

>>> on_lines_of split_multiple_fragments ";a\nb\n\n\n;c\nd"
[";a\nb\n",";c\nd\n"]

drop_post_graph_section :: [String] -> [String] Source #

The text '----' appearing anywhere in a line indicates the end of the graph fragments. The text '# ' appearing at the start of a line also indicates the end of the graph fragments.

>>> drop_post_graph_section ["a","b","c","","----d","e","f"]
["a","b","c",""]
>>> drop_post_graph_section ["a","b","c","","----d","# e","","f"]
["a","b","c",""]

is_md_help :: String -> Bool Source #

Some help files are in Markdown format. These are recognised by examing the first two characters, which must be a # and ' '.

data CodeBlockType Source #

There are two code block formats in markdown help files. The first indents the block using a single tab or four spaces. The second marks the start and end of the block by lines starting with three back ticks (`).

See: https://spec.commonmark.org/0.30/#indented-code-blocks and https://spec.commonmark.org/0.30/#fenced-code-blocks

md_help_get_code_blocks :: [String] -> [(CodeBlockType, [String])] Source #

Get code blocks from Markdown help file.

md_help_get_fenced_code_blocks :: [String] -> [[String]] Source #

Get indented code blocks from Markdown help file.

>>> s <- readFile "/home/rohan/sw/spl/Help/Reference/AllpassC.help.sl"
>>> is_md_help s
True
>>> let b = md_help_get_fenced_code_blocks (lines s)
>>> length b
3

read_file_fragments :: FilePath -> IO [String] Source #

Read text fragments from file.

read_file_set_fragments :: [FilePath] -> IO [String] Source #

Read text fragments from set of files.