#!/usr/bin/env cabal
{- cabal:
build-depends:
base >= 4.18 && < 5
, document-build >= 0.1 && < 0.2
, filepath >= 1.4.301.0 && < 1.6
, mtl >= 2.3.1 && < 2.4
ghc-options: -Wall
-}
{-# OPTIONS_GHC -Wall #-}
{- | The build file for every document project. It is the same file in every
project.
@
./build.hs [DIRECTORY]
cabal run build.hs -- [DIRECTORY]
@
builds the project in DIRECTORY (default: the current directory) into
@public@, with the rules below: the rules of every project, then the
exceptions for specific projects and files.
-}
module Main (main) where
import Control.Monad.Trans (lift)
import Data.Bool (bool)
import Data.List (isInfixOf, isPrefixOf)
import Document.Build
import System.FilePath (dropExtension, replaceExtension, takeExtension, takeFileName, (<.>))
main :: IO ()
main =
build projectDirectories (rules <> exceptions <> complete)
{- | Every file of @files@, @share@, @fonts@ and @src@ is built, in that order,
into @public@, with the fonts of @fonts@.
-}
projectDirectories :: Directories
projectDirectories =
Directories "public" ["files", "share", "fonts", "src"] (Just "fonts")
-- | The rules of every project.
rules :: Rules
rules =
withProject
( \project ->
foldMap (assetRules textExtensions (placeholders project)) ["files", "share"]
<> prepareRules textExtensions (placeholders project) "src"
)
<> onPaths (not . hasExtension ["md"]) (fontRules "fonts")
<> libreofficeRules
[ (["fodt", "odt"], ["pdf", "html", "docx", "txt"])
, (["fods", "ods"], ["pdf", "html", "xlsx"])
, (["fodg", "odg"], ["pdf", "html", "svg"])
, (["fodp", "odp"], ["pdf", "html", "pptx"])
]
<> libreofficeCounterpartRules
<> pandocHtmlRules ["fodt", "odt"] (\p -> dropExtension p <> ".pandoc.html") pandocStyle
<> markdownRules (flip replaceExtension) markdownConversions
<> bookRules ["front-cover", "book", "back-cover"]
<> imageJoinRules ["flight-notification"]
<> unlessAfterStep (== "pdf page 1") (pageCountRules (<> ".npages"))
<> pageOneRules (\p -> dropExtension p <> "_page1.pdf") (`replaceExtension` "png")
-- LibreOffice makes images named *_html_* for its HTML.
<> onPaths
(not . isInfixOf "_html_" . takeFileName)
( imageRules
["png", "jpg", "jpeg", "gif", "svg", "webp"]
["png", "jpg"]
[1200, 800, 600, 450, 350, 250, 200, 150, 100, 65, 45]
(flip replaceExtension)
(\n p -> dropExtension p <> "-" <> show n <> takeExtension p)
)
-- | The rules that run when the build is complete.
complete :: Rules
complete =
archiveRules (hasExtension ["npages"]) "npages.tar.gz"
<> outputTreeRules "outputs.json" "outputs.html" ((`placeholderValue` "CI_PROJECT_TITLE") <$> onFile "." projectPlaceholders)
-- | The extensions of the text files whose placeholders are replaced.
textExtensions :: [String]
textExtensions =
["fodt", "fods", "fodg", "fodp", "md", "txt", "html", "css", "svg"]
{- | The placeholders of a file in a project: those of the project, and those
of the last commit to change the file, with the names that the documents use.
-}
placeholders :: String -> Command' Placeholders
placeholders project =
(\f p -> overrides project (placeholderAliases aliases (f <> p)))
<$> filePlaceholders
<*> onFile "." projectPlaceholders
where
aliases =
[ ("COMMIT_TIME", "GIT_COMMIT_TIME")
, ("GITLAB_USER_NAME", "GIT_AUTHOR_NAME")
, ("GITLAB_USER_EMAIL", "GIT_AUTHOR_EMAIL")
, ("CI_COMMIT_SHA", "GIT_COMMIT_HASH")
]
-- | The placeholders of the project, from the variables that GitLab CI sets.
projectPlaceholders :: Command' Placeholders
projectPlaceholders =
environmentPlaceholders
[ ("CI_PAGES_DOMAIN", pure "")
, ("CI_PAGES_URL", pure "")
, ("CI_PROJECT_TITLE", directoryName)
, ("CI_PROJECT_URL", pure "")
, ("CI_PROJECT_VISIBILITY", pure "")
]
-- | The values of placeholders for specific projects.
overrides :: String -> Placeholders -> Placeholders
overrides project =
case project of
-- The default pages domain does not work for this project.
"system-f/media/elp/elp-forms" -> withPlaceholder "CI_PAGES_URL" "https://elp-forms.systemf.com.au/"
_ -> id
-- | The styles of the standalone HTML of LibreOffice text documents.
pandocStyle :: Command' [String]
pandocStyle =
lift $
(<>)
<$> (concatMap (\x -> ["-c", x]) <$> filesWithExtension ["css"] "css")
<*> whenFileExists "etc/lua-filter.lua" ["--lua-filter=etc/lua-filter.lua"]
{- | The formats of markdown files, with their pandoc options. Images are not
made into figures, and the main font is DejaVu Sans Mono.
-}
markdownConversions :: [(String, Command' [String])]
markdownConversions =
let options = ["--standalone", "-fmarkdown-implicit_figures", "-M", "mainfont=DejaVu Sans Mono"]
in [ ("pdf", pure (options <> xelatex))
, ("html", (options <>) <$> lift htmlOptions)
, ("docx", pure options)
, ("odt", pure options)
]
{- | The options of HTML from markdown: @etc/template.html@ as its template,
and the HTML files in @public/etc@: @header.html@ before the body,
@footer.html@ after it, and the others in the head.
-}
htmlOptions :: Build' [String]
htmlOptions =
let header = "public/etc/header.html"
footer = "public/etc/footer.html"
in do
template <- whenFileExists "etc/template.html" ["--template", "etc/template.html"]
etc <- filesWithExtension ["html"] "public/etc"
pure $
template
<> concatMap (\h -> ["-H", h]) (filter (`notElem` [header, footer]) etc)
<> bool [] ["-B", header] (header `elem` etc)
<> bool [] ["-A", footer] (footer `elem` etc)
-- | Rules for specific projects and files.
exceptions :: Rules
exceptions =
onProject
"system-f/media/elp/elp-certificate"
( onPaths
(\p -> isWithin "src" p && hasExtension textExtensions p)
(requirePlaceholders ["CI_PAGES_URL", "CI_PROJECT_URL", "COMMIT_TIME", "GITLAB_USER_NAME", "GITLAB_USER_EMAIL", "CI_COMMIT_SHA", "CI_PROJECT_VISIBILITY"])
)
<> onProjects isManual (aquilaA210 <> foldMap (uncurry splitPdf) manualSplits)
-- | Whether a project is an aircraft manual project.
isManual :: String -> Bool
isManual =
isPrefixOf "system-f/aircraft/manual/"
{- | Apply service bulletin SB-AT01-029 (B.01) to the Aquila A210 flight
manual FM-AT01-1010-100E (B.04).
-}
aquilaA210 :: Rules
aquilaA210 =
mergePdf
[("A", "FM_AT01_1010_100E_B04.pdf"), ("B", "SB_AT01_029_02-AFM_page_1-8_2-4_5.pdf")]
["A1-16", "B1", "A18-24", "B2", "B3", "A27-end"]
"FM_AT01_1010_100E_B04____SB_AT01_029_02-AFM_page_1-8_2-4_5.pdf"
{- | The sections that aircraft manuals are split into, from
'manualSections', as PDF files relative to the output directory.
-}
manualSplits :: [(FilePath, [(String, FilePath)])]
manualSplits =
[ (path <.> "pdf", fmap (\(r, s) -> (r, path <> s <.> "pdf")) sections)
| (path, sections) <- manualSections
, not (null sections)
]
{- | The sections of aircraft manuals: the path of each manual in the output
directory, without @.pdf@, and its sections, each a @pdftk@ page range and
the suffix of the file of the section. For example,
@("vh-bne/aquila-a210_vh-bne", [("1", "_cover")])@ splits page 1 of
@public/vh-bne/aquila-a210_vh-bne.pdf@ into
@public/vh-bne/aquila-a210_vh-bne_cover.pdf@.
-}
manualSections :: [(FilePath, [(String, String)])]
manualSections =
[ ("vh-ysa/normal-procedures", [])
, ("vh-ysa/emergency-procedures", [])
, ("vh-nqx/8kcab_vh-nqx", [])
,
( "FM_AT01_1010_100E_B04____SB_AT01_029_02-AFM_page_1-8_2-4_5"
,
[ ("1", "_section0")
, ("10-21", "_section1_general")
, ("22-41", "_section2_limitations")
, ("42-57", "_section3_emergency_procedures")
, ("58-77", "_section4_normal_procedures")
, ("78-110", "_section5_performance")
, ("111-124", "_section6_weight_and_balance")
, ("125-156", "_section7_system_description")
, ("157-164", "_section8_handling_service_maintenance")
, ("165-167", "_section9_supplements")
]
)
,
( "vh-bne/aquila-a210_vh-bne"
,
[ ("1", "_cover")
, ("2-9", "_introduction")
, ("10-21", "_section1_general")
, ("22-46", "_section2_limitations")
, ("47-62", "_section3_emergency_procedures")
, ("63-82", "_section4_normal_procedures")
, ("83-117", "_section5_performance")
, ("118-132", "_section6_weight_and_balance_equipment_list")
, ("133-164", "_section7_description_of_the_aircraft_and_its_systems")
, ("165-172", "_section8_handling_service_maintenance")
, ("173-254", "_section9_supplements")
, ("178-183", "_section9_supplements_ave4")
, ("184-189", "_section9_supplements_ave5")
, ("190-193", "_section9_supplements_ave10")
, ("194-203", "_section9_supplements_ave11")
, ("204-214", "_section9_supplements_ave12")
, ("215-226", "_section9_supplements_ave16")
, ("227-244", "_section9_supplements_ave23")
, ("245-254", "_section9_supplements_ave26")
]
)
,
( "Sling-2-POH-2.3-RSA-operating_handbook"
,
[ ("1", "_cover")
, ("2-9", "_introduction")
, ("10", "_table_of_contents")
, ("11-28", "_1_general_information")
, ("29-44", "_2_limitations")
, ("45-64", "_3_emergency_procedures")
, ("65-85", "_4_normal_procedures")
, ("86-91", "_5_performance")
, ("92-99", "_6_weight_and_balance")
, ("100-134", "_7_systems")
, ("135-142", "_8_airplane_ground_handling_service")
, ("143-192", "_9_supplementary_information")
]
)
,
( "24-4844/eurofox-3k_24-4844"
,
[ ("1", "_cover")
, ("2-4", "_introduction")
, ("5-8", "_table_of_contents")
, ("9", "_general_information")
, ("10-21", "_airplane_and_systems_description")
, ("22-25", "_operating_limitations")
, ("26-29", "_weight_and_balance_information")
, ("30-32", "_performance")
, ("33-41", "_emergency_procedures")
, ("42-57", "_normal_procedures")
, ("58-60", "_aircraft_ground_handling_and_servicing")
, ("61-63", "_required_placards_and_markings")
, ("64", "_supplementary_information")
]
)
,
( "24-5350/eurofox-3k_24-5350"
,
[ ("1", "_cover")
, ("2-3", "_introduction")
, ("4-7", "_table_of_contents")
, ("8", "_general_information")
, ("9-20", "_airplane_and_systems_description")
, ("21-24", "_operating_limitations")
, ("25-29", "_weight_and_balance_information")
, ("30-32", "_performance")
, ("33-41", "_emergency_procedures")
, ("42-57", "_normal_procedures")
, ("58-60", "_aircraft_ground_handling_and_servicing")
, ("61-63", "_required_placards_and_markings")
, ("64", "_supplementary_information")
]
)
,
( "24-8881/eurofox-3k_24-8881"
,
[ ("1", "_cover")
, ("2-10", "_introduction")
, ("11-14", "_table_of_contents")
, ("15-16", "_general_information")
, ("17-28", "_airplane_and_systems_description")
, ("29-32", "_operating_limitations")
, ("33-39", "_weight_and_balance_information")
, ("40-42", "_performance")
, ("43-51", "_emergency_procedures")
, ("52-67", "_normal_procedures")
, ("68-69", "_aircraft_ground_handling_and_servicing")
, ("70-72", "_required_placards_and_markings")
, ("73", "_supplementary_information")
]
)
,
( "a240-poh"
,
[ ("1", "_cover")
, ("4-6", "_table_of_contents")
, ("7-7", "_general_information")
, ("8-17", "_airplane_and_systems_description")
, ("18-20", "_operating_limitations")
, ("21-23", "_weight_and_balance_information")
, ("24-25", "_performance")
, ("26-34", "_normal_procedures")
, ("35-40", "_emergency_procedures")
, ("41-44", "_aircraft_ground_handling_and_servicing")
, ("45-45", "_supplementary_information")
, ("46-50", "_flight_training_supplement")
]
)
,
( "maintenance-manual"
,
[ ("1", "_cover")
, ("2", "_list_of_effective_pages")
, ("3", "_table_of_contents")
, ("4", "_foreword")
, ("5", "_common_conversions_and_abbreviations")
, ("6-13", "_section1_general_description")
, ("14-24", "_section2_ground_handling_servicing_lubrication_and_inspection")
, ("25-33", "_section3_structures_fuselage")
, ("34-41", "_section4_structures_wings_and_empennage")
, ("42-54", "_section5_structures_landing_gear_and_brakes_tricycle_gear")
, ("55-61", "_section6_structures_aileron_and_flap_control_system")
, ("62-65", "_section7_structures_elevator_control_system")
, ("66-69", "_section8_structures_elevator_trim_control_system")
, ("70-72", "_section9_structures_rudder_control_system")
, ("72-94", "_section10_engine")
, ("95-101", "_section11_fuel_system")
, ("102-103", "_section12_propeller")
, ("104-106", "_section13_utility_systems")
, ("107-114", "_section14_instruments_and_instrument_system")
, ("115-123", "_section15_electrical_systems")
, ("124", "_section16_structural_repair")
, ("125", "_section17_exterior_painting")
, ("126", "_section18_wiring_diagrams_general_wiring_scheme")
, ("127-128", "_section19_safety_directives_and_safety_monitoring_system")
, ("129-141", "_a220_taildragger_supplement")
]
)
, ("POH_Supplement_MTOW", [])
, ("Annex_01-151107", [])
, ("24-8300/foxbat-a22ls_24-8300", [])
, ("A-22LS_POH-S-N-146-R912iS", [])
, ("A22LS-POH-V5-Complete", [])
, ("23-2212/magnus-fusion-212_23-2212_manual", [])
,
( "vh-rmv/vans-rv14_vh-rmv"
,
[ ("1", "_cover")
, ("2-3", "_equipment_list")
, ("4-5", "_performance_specifications")
, ("7", "_aerobatic_information")
, ("8-9", "_preflight_inspection")
, ("10", "_starting_engine")
, ("11", "_before_takeoff")
, ("12", "_takeoff")
, ("13", "_landing")
, ("14", "_performance")
, ("15", "_engine_information")
, ("17-20", "_emergency_procedures")
, ("21-25", "_weight_and_balance")
]
)
,
( "vh-egy/cessna-152_vh-egy"
,
[ ("1-2", "_certificate_of_registration")
, ("3", "_cover")
, ("4", "_performance_specifications")
, ("5", "_table_of_contents")
, ("6-13", "_section1_general")
, ("14-22", "_section2_limitations")
, ("23-36", "_section3_emergency_procedures")
, ("37-57", "_section4_normal_procedures")
, ("58-77", "_section5_performance")
, ("78-98", "_section6_weight_and_balance")
, ("99-131", "_section7_airplane_and_systems_descriptions")
, ("132-144", "_section8_airplane_handling_and_maintenance")
, ("145-201", "_section9_supplements")
, ("202", "_stc_SA1000NW")
]
)
,
( "vh-nkj/cessna-152_vh-nkj"
,
[ ("1", "_vhnkj_load_data_sheet")
, ("5-6", "_cover")
, ("7", "_congratulations")
, ("8", "_performance_specifications")
, ("9", "_table_of_contents")
, ("10-17", "_section1_general")
, ("18-25", "_section2_limitations")
, ("26-40", "_section3_emergency_procedures")
, ("41-61", "_section4_normal_procedures")
, ("62-79", "_section5_performance")
, ("80-99", "_section6_weight_and_balance")
, ("100-132", "_section7_airplane_and_systems_descriptions")
, ("133-145", "_section8_airplane_handling_and_maintenance")
, ("146-205", "_section9_supplements")
]
)
, ("Cessna_172_C172N-1978-POH-S1to7-scanned", [])
,
( "cessna-172p"
,
[ ("1", "_cover")
, ("3", "_congratulations")
, ("4", "_performance_specifications")
, ("5-6", "_coverage_revisions_log_of_effective_pages")
, ("7", "_table_of_contents")
, ("8-16", "_section1_general")
, ("17-28", "_section2_limitations")
, ("29-45", "_section3_emergency_procedures")
, ("46-70", "_section4_normal_procedures")
, ("71-94", "_section5_performance")
, ("95-121", "_section6_weight_and_balance_equipment")
, ("122-158", "_section7_airplane_and_systems_descriptions")
, ("159-176", "_section8_airplane_handling_service_and_maintenance")
, ("177-190", "_section9_supplements")
]
)
,
( "vh-azq/vh-azq"
,
[ ("1-4", "_coverage_revision_log_of_effective_pages")
, ("5", "_table_of_contents")
, ("7-8", "_certificate_of_registration")
, ("9-17", "_section1_general")
, ("19-33", "_section2_limitations")
, ("35-52", "_section3_emergency_procedures")
, ("53-77", "_section4_normal_procedures")
, ("79-103", "_section5_performance")
, ("105-135", "_section6_weight_and_balance_equipment")
, ("137-175", "_section7_airplane_and_systems_descriptions")
, ("177-195", "_section8_airplane_handling_service_and_maintenance")
, ("197-410", "_section9_supplements")
]
)
,
( "skyhawk_pim-20130523"
,
[ ("1", "_notice")
, ("2-3", "_performance_specifications")
, ("5", "_cover")
, ("7", "_table_of_contents")
, ("9-38", "_section1_general")
, ("39-66", "_section2_operating_limitations")
, ("67-105", "_section3_emergency_procedures")
, ("107-154", "_section4_normal_procedures")
, ("155-176", "_section5_performance")
, ("177-200", "_section6_weight_and_balance_equipment")
, ("201-280", "_section7_airplane_and_systems_descriptions")
, ("281-305", "_section8_airplane_handling_service_and_maintenance")
, ("307-349", "_section9_supplements")
]
)
,
( "skyhawksp_pim-20130523"
,
[ ("1", "_notice")
, ("2-3", "_performance_specifications")
, ("5", "_cover")
, ("7", "_table_of_contents")
, ("9-38", "_section1_general")
, ("39-66", "_section2_operating_limitations")
, ("67-105", "_section3_emergency_procedures")
, ("107-154", "_section4_normal_procedures")
, ("155-178", "_section5_performance")
, ("179-202", "_section6_weight_and_balance_equipment")
, ("203-282", "_section7_airplane_and_systems_descriptions")
, ("283-307", "_section8_airplane_handling_service_and_maintenance")
, ("308-351", "_section9_supplements")
]
)
,
( "cessna-182p"
,
[ ("1", "_cover")
, ("2", "_list_of_effective_pages")
, ("3", "_congratulations")
, ("4", "_performance_specifications")
, ("5", "_table_of_contents")
, ("7-14", "_section1_general")
, ("15-25", "_section2_limitations")
, ("27-41", "_section3_emergency_procedures")
, ("43-64", "_section4_normal_procedures")
, ("65-91", "_section5_performance")
, ("93-117", "_section6_weight_and_balance_equipment")
, ("119-158", "_section7_airplane_and_systems_descriptions")
, ("159-172", "_section8_airplane_handling_service_and_maintenance")
, ("173-258", "_section9_supplements")
]
)
,
( "vh-tin/cessna-182p_vh-tin"
,
[ ("1", "_amendment_record_sheet")
, ("2-13", "_certificate_of_registration")
, ("14-15", "_cover")
, ("16-26", "_amendment_record_sheets")
, ("27-27", "_introduction")
, ("28-30", "_list_of_contents")
, ("31-31", "_definitions")
, ("32-34", "_section1_general_aeroplane_particulars")
, ("35-38", "_section2_operating_limitations")
, ("39-41", "_section3_handling")
, ("42-44", "_section4_performance")
, ("45-48", "_section5_instrument_and_equipment_installations")
, ("49-57", "_section6_loading_data")
, ("58-92", "_section7_supplements")
]
)
,
( "OM_912_Series_ED4_R2"
,
[ ("1", "_cover")
, ("2", "_rotax")
, ("3", "_table_of_contents")
, ("5", "_introduction")
, ("7-8", "_list_of_effective_pages")
, ("9-12", "_table_of_amendments")
, ("13-27", "_general_note")
, ("29-40", "_operating_instructions")
, ("41-48", "_abnormal_operation")
, ("49-62", "_standard_operation")
, ("63-72", "_performance_and_fuel_consumption")
, ("73-85", "_system_description")
, ("87-89", "_preservation_and_storage")
, ("91", "_supplement")
, ("93-94", "_index")
, ("96", "_back_cover")
]
)
,
( "si-912-016-r13"
,
[ ("1-2", "_1_planning_information_2_material_information")
, ("3-5", "_3_lubricant")
, ("6-8", "_4_coolant")
, ("9-14", "_5_fuel")
, ("15", "_6_general_engine_operation_requirements_7_summary_8_inquiries")
]
)
,
( "sv-d700_sv-d1000_sv-d1000t/SkyView_System_Installation_Guide-Rev_W_v14_0"
,
[ ("1", "_cover")
, ("3-4", "_changes_and_contacts")
, ("5-11", "_table_of_contents")
, ("13-18", "_introduction")
, ("19-34", "_system_planning")
, ("35-53", "_basic_skyview_display_operation")
, ("55-87", "_sv-d700_sv-d1000_sv-d1000t_installation_and_onfiguration")
, ("89-106", "_sv-adahrs-200_201_installation_and_configuration")
, ("107-114", "_sv-map-270_navigation_mapping_license_purchase_and_setup")
, ("115-191", "_sv-ems-220_221_installation_and_configuration")
, ("193-205", "_sv-gps-250_sv-gps-2020_gps_receiver_installation_and_configuration")
, ("207-213", "_sv-bat-320_installation")
, ("215-236", "_autopilot_servo_installation_configuration_and_calibration")
, ("237-275", "_sv-xpndr-261_262_installation_configuration_and_testing")
, ("277-288", "_sv-arinc-429_installation_and_configuration")
, ("289-293", "_vertical_power_vp-x_ntegration_and_onfiguration")
, ("295-304", "_sv-adsb-470_installation_configuration_and_testing")
, ("305-319", "_accessory_installation_and_configuration")
, ("321-339", "_sv-com-c25_installation_configuration_and_testing")
, ("341-362", "_sv-com-x83_installation_configuration_and_testing")
, ("363-371", "_sv-ap-panel_installation")
, ("373-375", "_sv-knob-panel_installation")
, ("377-385", "_sv-mag-236_installation_and_configuration")
, ("387-399", "_appendix_a_maintenance_and_troubleshooting")
, ("401-413", "_appendix_b_specifications")
, ("415-438", "_appendix_c_wiring_and_electrical_connections")
, ("439-440", "_appendix_d_sv-ems-220_221_sensor_input_mapping_worksheet")
, ("441-453", "_appendix_e_serial_data_output")
, ("455-458", "_appendix_f_user_data_logs")
, ("459", "_appendix_g_kavlico_pressure_sensor_part_numbers")
, ("461-463", "_appendix_h_sensor_debug_data")
, ("465-489", "_appendix_i_skyview_system_installation_guide_revision_history")
, ("491-496", "_appendix_j_checklists")
]
)
,
( "flightdek-d180/FlightDEK-D180_Pilot's_User_Guide_Rev_H"
,
[ ("1-2", "_cover")
, ("2-3", "_contact_information")
, ("4-7", "_table_of_contacts")
, ("8-10", "_introduction")
, ("11-15", "_product_overview")
, ("16-23", "_product_operation")
, ("24-37", "_available_pages")
, ("38-52", "_efis_operation")
, ("53-62", "_hsi_operation")
, ("63-79", "_autopilot_operation")
, ("80-85", "_alerts")
, ("86-89", "_ems_monitoring_functions")
, ("90-96", "_ems_operation")
, ("97-108", "_appendix")
]
)
,
( "efis-d100/EFIS-D100_Pilot's_User_Guide_Rev_H"
,
[ ("1", "_cover")
, ("2-3", "_contact_information")
, ("4-6", "_table_of_contents")
, ("7-9", "_introduction")
, ("10-14", "_product_overview")
, ("15-22", "_product_operation")
, ("23-33", "_available_pages")
, ("34-49", "_efis_operation")
, ("50-59", "_hsi_operation")
, ("60-76", "_autopilot_operation")
, ("77-80", "_alerts")
, ("81-89", "_appendix")
]
)
,
( "d500_d600/190-00601-02_K"
,
[ ("1", "_cover")
, ("2-10", "_foreword")
, ("11-16", "_table_of_contents")
, ("17-42", "_system_overview")
, ("43-82", "_primary_flight_display")
, ("83-158", "_multi_function_display")
, ("159-316", "_hazard_avoidance")
, ("317-368", "_additional_features")
, ("369-384", "_annunciations_and_alerts")
, ("385-392", "_symbols")
, ("393-400", "_glossary")
, ("401-408", "_appendix_a")
, ("409-418", "_index")
]
)
,
( "ekpiv_ekpiv_pro/EKP_pro_inglese_162"
,
[ ("1", "_cover")
, ("2-3", "_foreword")
, ("4-8", "_table_of_contents")
, ("5-15", "_introduction")
, ("16-21", "_the_basics")
, ("22-35", "_the_moving_maps")
, ("36-37", "_navigation_and_location")
, ("38-39", "_the_hsi_screen")
, ("40-44", "_flight_plan")
, ("45-47", "_the_global_positioning_system")
, ("48-51", "_waypoint_and_database")
, ("52-53", "_approach_data_procedures")
, ("54-59", "_calculator")
, ("60-61", "_the_checklists")
, ("62-63", "_simulator")
, ("64-65", "_the_communication")
, ("66-75", "_the_system_setup_menu")
, ("76-82", "_operating_requirements")
, ("83", "_ekp_iv_pro")
, ("84-95", "_appendices")
]
)
]