#?##################################################################################################
#?#
#?# PythonicGcodeMachine - A Python G-code Toolkit
#?# Copyright (C) 2018 Fabrice Salvaire
#?#
#?# This program is free software: you can redistribute it and/or modify
#?# it under the terms of the GNU General Public License as published by
#?# the Free Software Foundation, either version 3 of the License, or
#?# (at your option) any later version.
#?#
#?# This program is distributed in the hope that it will be useful,
#?# but WITHOUT ANY WARRANTY; without even the implied warranty of
#?# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#?# GNU General Public License for more details.
#?#
#?# You should have received a copy of the GNU General Public License
#?# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#?#
#?##################################################################################################

####################################################################################################

#r# ===============
#r#  Query G-codes
#r# ===============
#r#
#r# For API see
#r#
#r# * :mod:`PythonicGcodeMachine.Gcode.Rs274`
#r# * :mod:`PythonicGcodeMachine.Gcode.Rs274.Config`
#r# * :mod:`PythonicGcodeMachine.Gcode.Rs274.Machine`

####################################################################################################

from pathlib import Path

from PythonicGcodeMachine.Gcode.Rs274.Machine import GcodeMachine

####################################################################################################

#r# We build a RS-274 G-code Machine

machine = GcodeMachine()

####################################################################################################

#r# We get G-code information

gcode = machine.config.gcodes['G0']

print('Modal group:', gcode.modal_group)
print('Execution order:', gcode.execution_order)
#o#

print('\nreStructuredText doc:\n')
print(gcode.doc)
#o#

#r# Convert the reStructuredText doc using `pypandoc <https://github.com/bebraw/pypandoc>`_ and
#r# `Pandoc <https://pandoc.org>`_

try:
    print('\nMarkdown doc:')
    print(gcode.convert_doc('md'))
except (ImportError, RuntimeError):
    pass
#o#

try:
    print('\nHTML doc:')
    print(gcode.convert_doc('html5'))
except (ImportError, RuntimeError):
    pass
#o#

6.1.3. Query G-codes

For API see

from pathlib import Path

from PythonicGcodeMachine.Gcode.Rs274.Machine import GcodeMachine

We build a RS-274 G-code Machine

machine = GcodeMachine()

We get G-code information

gcode = machine.config.gcodes['G0']

print('Modal group:', gcode.modal_group)
print('Execution order:', gcode.execution_order)
Modal group: #1: (G0 G1 G2 G3 G38.2 G80 G81 G82 G83 G84 G85 G86 G87 G88 G89) Meaning: None
Execution order: #20 Meaning: perform motion, as modified (possibly) by G53
print('\nreStructuredText doc:\n')
print(gcode.doc)
reStructuredText doc:

**Rapid Linear Motion — G0**

For rapid linear motion, program G0 X… Y… Z… A… B… C…, where all the axis words are optional,
except that at least one must be used. The G0 is optional if the current motion mode is G0. This
will produce coordinated linear motion to the destination point at the current traverse rate (or
slower if the machine will not go that fast). It is expected that cutting will not take place
when a G0 command is executing.

**It is an error if:**

* all axis words are omitted.

If cutter radius compensation is active, the motion will differ from the above; see Appendix
B. If G53 is programmed on the same line, the motion will also differ; see Section 3.5.12.

Convert the reStructuredText doc using pypandoc and Pandoc

try:
    print('\nMarkdown doc:')
    print(gcode.convert_doc('md'))
except (ImportError, RuntimeError):
    pass
Markdown doc:

**Rapid Linear Motion — G0**

For rapid linear motion, program G0 X… Y… Z… A… B… C…, where all the
axis words are optional, except that at least one must be used. The G0
is optional if the current motion mode is G0. This will produce
coordinated linear motion to the destination point at the current
traverse rate (or slower if the machine will not go that fast). It is
expected that cutting will not take place when a G0 command is
executing.

**It is an error if:**

-  all axis words are omitted.

If cutter radius compensation is active, the motion will differ from the
above; see Appendix B. If G53 is programmed on the same line, the motion
will also differ; see Section 3.5.12.
try:
    print('\nHTML doc:')
    print(gcode.convert_doc('html5'))
except (ImportError, RuntimeError):
    pass
HTML doc: