@ -0,0 +1,34 @@ |
||||
Analysis |
||||
======== |
||||
|
||||
This section gives information about the last compilation. By default, a |
||||
new analysis is run at each compilation. |
||||
|
||||
The analysis tab gives detailed information about the contract code. It |
||||
can help you avoid code mistakes and to enforce best practices. |
||||
|
||||
![image](images/remix_analysistab.png) |
||||
|
||||
Here is the list of analyzers: |
||||
|
||||
> - Security: |
||||
> : - Transaction origin: Warns if tx.origin is used |
||||
> - Check effects: Avoid potential reentrancy bugs |
||||
> - Inline assembly: Use of Inline Assembly |
||||
> - Block timestamp: Semantics maybe unclear |
||||
> - Low level calls: Semantics maybe unclear |
||||
> - Block.blockhash usage: Semantics maybe unclear |
||||
> |
||||
> - Gas & Economy: |
||||
> : - Gas costs: Warns if the gas requirements of the functions |
||||
> are too high |
||||
> - This on local calls: Invocation of local functions via |
||||
> this |
||||
> |
||||
> - Miscellaneous: |
||||
> : - Constant functions: Checks for potentially constant |
||||
> functions |
||||
> - Similar variable names: Checks if variable names are too |
||||
> similar |
||||
> |
||||
|
@ -0,0 +1,28 @@ |
||||
Compiling contracts |
||||
=================== |
||||
|
||||
By default Remix triggers a compilation each time the current file is |
||||
changed or another file is selected. If the contract has a lot of |
||||
dependencies and takes a long time to compile, it is possible to disable |
||||
the autocompilation. |
||||
|
||||
![image](images/remix_compiletab.png) |
||||
|
||||
After each compilation, a list is updated with all the newly compiled |
||||
contracts. |
||||
|
||||
Details modal dialog displays detailed information about the current |
||||
selected contract. |
||||
|
||||
From this tab, you can also publish your contract to Swarm (only non |
||||
abstract contracts can be published). |
||||
|
||||
Published data notably contains the `abi` and solidity source code. |
||||
|
||||
After a contract is published, you can find its metadata information |
||||
using the bzz URL located in the details modal dialog `SWARM LOCATION`. |
||||
|
||||
Compilation Errors and Warning are displayed below the contract section. |
||||
At each compilation, the static analysis tab builds a report. It is very |
||||
valuable when addressing reported issues even if the compiler doesn't |
||||
complain. (see ../analysis\_tab) |
@ -0,0 +1,12 @@ |
||||
Debugging |
||||
========= |
||||
|
||||
This module allows you to debug the transaction. It can be used to |
||||
deploy transactions created from Remix and already mined transactions. |
||||
(debugging works only if the current environment provides the necessary |
||||
features). |
||||
|
||||
![image](images/remix_debuggertab.png) |
||||
|
||||
For more information about debugging, click on the following link: |
||||
../tutorial\_debug |
@ -0,0 +1,46 @@ |
||||
File Explorer |
||||
============= |
||||
|
||||
The file explorer lists by default all the files stored in your browser. |
||||
You can see them in the browser folder. You can always rename, remove or |
||||
add new files to the file explorer. |
||||
|
||||
![image](images/remix_file_explorer_browser.png) |
||||
|
||||
Note that clearing the browser storage will permanently delete all the |
||||
solidity files you wrote. To avoid this, you can use Remixd, which |
||||
enables you to store and sync files in the browser with your local |
||||
computer (for more information see ../tutorial\_remixd\_filesystem) |
||||
|
||||
![image](images/remix_file_explorer_menu.png) |
||||
|
||||
We will start by reviewing at the icons at the top left - from left to |
||||
the right: |
||||
|
||||
Create new File |
||||
--------------- |
||||
|
||||
Creates a new file in the browser explorer. |
||||
|
||||
Add Local File |
||||
-------------- |
||||
|
||||
Allows you to select files from the local file system and import them to |
||||
the Remix browser storage. |
||||
|
||||
Publish to Gist |
||||
--------------- |
||||
|
||||
Publishes files from the browser storage to an anonymous public gist. |
||||
|
||||
Copy to another instance |
||||
------------------------ |
||||
|
||||
Enables you to copy files from the browser storage to another instance |
||||
(URL) of Remix. |
||||
|
||||
Connect to Localhost |
||||
-------------------- |
||||
|
||||
Allows to use file located in your file system (see |
||||
../tutorial\_remixd\_filesystem). |
@ -0,0 +1,62 @@ |
||||
Remix - Solidity IDE |
||||
==================== |
||||
|
||||
Remix is an IDE for the smart contract programming language Solidity and |
||||
has an integrated debugger and testing environment. |
||||
|
||||
An up to date online version is available at |
||||
[remix.ethereum.org](http://remix.ethereum.org) |
||||
|
||||
This page will host documentation and tutorial about features Remix |
||||
provides. |
||||
|
||||
Please go to [solidity.readthedocs.io](http://solidity.readthedocs.io) |
||||
for any information regarding `Solidity` |
||||
|
||||
Overview |
||||
-------- |
||||
|
||||
Remix provides an integrated development environment (IDE) for smart |
||||
contract development. It focuses on the development and deployment of |
||||
Solidity written smart contracts. |
||||
|
||||
Remix is a good solution if you intend to: |
||||
|
||||
> - Develop smart contracts (remix integrates a solidity editor). |
||||
> - Debug a smart contract's execution. |
||||
> - Access the state and properties of already deployed smart |
||||
> contract. |
||||
> - Debug already committed transaction. |
||||
> - Analyze solidity code to reduce coding mistakes and to enforce |
||||
> best practices. |
||||
> - Together with Mist (or any tool which inject web3), Remix can be |
||||
> used to test and debug a Dapp (see ../tutorial\_mist) |
||||
|
||||
Developing smart contract requires a deep understanding of the |
||||
associated Blockchain technology. |
||||
|
||||
!! Don't use Remix against a production network unless you are |
||||
completely sure what you are doing !! |
||||
|
||||
This documentation describes all the features remix provides. The GUI |
||||
can be separated in 4 parts. Click on one the link to get more |
||||
information. |
||||
|
||||
> - ../file\_explorer |
||||
> - ../solidity\_editor |
||||
> - ../terminal |
||||
> - ../tabs\_panel |
||||
> : - ../compile\_tab |
||||
> - ../run\_tab |
||||
> - ../settings\_tab |
||||
> - ../debugger\_tab |
||||
> - ../analysis\_tab |
||||
> - ../support\_tab |
||||
> |
||||
Quick Start |
||||
----------- |
||||
|
||||
(see ../quickstart\_javascriptvm) |
||||
|
||||
Tutorial |
||||
-------- |
@ -0,0 +1,104 @@ |
||||
Quick Start using the JavaScript VM |
||||
=================================== |
||||
|
||||
There are 3 type of environments Remix can be plugged to: |
||||
`Javascript VM`, `Injected provider`, or `Web3 provider`. (see |
||||
../run\_tab) |
||||
|
||||
Both `Web3 provider` and `Injected provider` require the use of an |
||||
external tool. |
||||
|
||||
The external tool for `Web3 provider` is an Ethereum node the tools for |
||||
`Injected provider` are Mist or Metamask. |
||||
|
||||
The `JavaScript VM` mode is convenient because each execution runs in |
||||
your browser. Thus reloading the page will restart Remix with an empty |
||||
state. |
||||
|
||||
So for performance purposes, it might also be better to use an external |
||||
node. |
||||
|
||||
Selecting the VM mode |
||||
--------------------- |
||||
|
||||
Make sure the VM mode is selected. All accounts displayed in `Accounts` |
||||
should have 100 ether. |
||||
|
||||
Sample contract |
||||
--------------- |
||||
|
||||
``` {.sourceCode .none} |
||||
pragma solidity ^0.4.16; |
||||
contract testContract { |
||||
|
||||
uint value; |
||||
function testContract(uint _p) { |
||||
value = _p; |
||||
} |
||||
|
||||
function setP(uint _n) payable { |
||||
value = _n; |
||||
} |
||||
|
||||
function setNP(uint _n) { |
||||
value = _n; |
||||
} |
||||
|
||||
function get () constant returns (uint) { |
||||
return value; |
||||
} |
||||
} |
||||
``` |
||||
|
||||
This contract is very basic. The goal is to quickly start to create and |
||||
to interact with a sample contract. |
||||
|
||||
Deploying an instance |
||||
--------------------- |
||||
|
||||
The `Compile tab` displays information related to the current contract |
||||
(note that there can be more than one) (see ../compile\_tab). |
||||
|
||||
Moving on, in the `Run tab` select, `JavaScript VM` to specify that you |
||||
are going to deploy an instance of the contract in the `JavaScript VM` |
||||
state. |
||||
|
||||
![image](images/remix_quickstart_javascriptvm_creation.png) |
||||
|
||||
The constructor of `testContract` needs a parameter (of type `uint`). |
||||
Give any value and click on `Create`. |
||||
|
||||
The transaction which deploys the instance of `testContract` is created. |
||||
|
||||
In a "normal" blockchain, it can take several seconds to execute. This |
||||
is the time for the transaction to be mined. However, because we are |
||||
using the `JavaScript VM`, our execution is immediate. |
||||
|
||||
The terminal will inform you about the transaction. You can see details |
||||
there and start debugging. |
||||
|
||||
The newly created instance is displayed in the `run tab`. |
||||
|
||||
![image](images/remix_quickstart_javascriptvm_creationTransaction.png) |
||||
|
||||
Interacting with an instance |
||||
---------------------------- |
||||
|
||||
This new instance contains 3 actions which corresponds to the 3 |
||||
functions (`setP`, `setPN`, `get`). Clicking on `SetP` or `SetPN` will |
||||
create a new transaction. |
||||
|
||||
Note that `SetP` is `payable` (red action) : it is possible to send |
||||
value (Ether) to the contract. |
||||
|
||||
`SetPN` is not payable (light red action) : it is not possible to send |
||||
value (Ether) to the contract. |
||||
|
||||
Clicking on `get` will not execute a transaction (blue action). It is |
||||
not necessary to do so because `get` does not modify the state (variable |
||||
`value`) of this instance. |
||||
|
||||
As `get` is `constant` you can see the return value just below the |
||||
action. |
||||
|
||||
![image](images/remix_quickstart_javascriptvm_callinginstance.png) |
@ -0,0 +1,296 @@ |
||||
Running transactions |
||||
==================== |
||||
|
||||
The Run tab is an important section of Remix. It allows you to send |
||||
transactions to the current environment. |
||||
|
||||
![image](images/remix_runtab.png) |
||||
|
||||
Run Setup |
||||
--------- |
||||
|
||||
The following settings allow you to directly influence the transaction |
||||
execution: |
||||
|
||||
> - Environment: |
||||
> : - `JavaScript VM`: All the transactions will be executed in |
||||
> a sandbox blockchain in the browser. This means nothing |
||||
> will be persisted and a page reload will restart a new |
||||
> blockchain from scratch, the old one will not be saved. |
||||
> - `Injected Provider`: Remix will connect to an injected |
||||
> web3 provider. `Mist` and `Metamask` are example of |
||||
> providers that inject web3, thus can be used with this |
||||
> option. |
||||
> - `Web3 Provider`: Remix will connect to a remote node. You |
||||
> will need to provide the URL address to the selected |
||||
> provider: geth, parity or any Ethereum client. |
||||
> |
||||
> - Account: the list of accounts associated with the current |
||||
> environment (and their associated balances). |
||||
> - Gas Limit: the maximum amount of gas that can be set for all the |
||||
> transactions created in Remix. |
||||
> - Value: the amount of value for the next created transaction (this |
||||
> value is always reset to 0 after each transaction execution). |
||||
> |
||||
> ![image](images/remix_runtab_example.png) |
||||
|
||||
Initiate Instance |
||||
----------------- |
||||
|
||||
This section contains the list of compiled contracts and 2 actions: |
||||
|
||||
- `At Address` assumes the given address is an instance of the |
||||
selected contract. It is then possible to interact with an already |
||||
deployed contract. There's no check at this point, so be careful |
||||
when using this feature, and be sure you trust the contract at that |
||||
address. |
||||
- `Create` send a transaction that deploys the selected contract. When |
||||
the transaction is mined, the newly created instance will be added |
||||
(this might take several seconds). Note that if the `constructor` |
||||
has parameters, you need to specify them. |
||||
|
||||
Pending Instances |
||||
----------------- |
||||
|
||||
Validating a transaction take several seconds. During this time, the GUI |
||||
shows it in a pending mode. When transaction is mined the number of |
||||
pending transactions is updated and the transaction is added to the log |
||||
(see ../terminal) |
||||
|
||||
Instance List |
||||
------------- |
||||
|
||||
This section contains a list of instances to interact with. |
||||
|
||||
Several cases apply: |
||||
: - The called function is declared as `constant` or `pure` in |
||||
Solidity. The action has a blue background, clicking it does not |
||||
create a new transaction. Clicking it is not necessary because |
||||
there are not state changes - but it will update the return |
||||
value of the function. |
||||
- The called function has no special keywords. The action has a |
||||
light red background, clicking on does create a new transaction. |
||||
But this transaction cannot accept any amount of Ether. |
||||
- The called function is declared as `payable` in Solidity. The |
||||
action has a red background, clicking it does create a new |
||||
transaction and this transaction can accept value. |
||||
|
||||
For more information about Solidity modifier, see [Solidity |
||||
modifier](http://solidity.readthedocs.io/en/develop/miscellaneous.html?highlight=pure#modifiers) |
||||
. |
||||
|
||||
If a function requires input parameters, it is required to specify them. |
||||
|
||||
USING ABI |
||||
--------- |
||||
|
||||
Using `Create` or `At Address` is a classic use case of Remix. It is |
||||
possible though to interact with a contract by using its ABI. The ABI is |
||||
a JSON array which describe its interface. |
||||
|
||||
To interact with a contract using the ABI, create a new file in Remix |
||||
with extension `*.abi` and copy the ABI content to it. Then in the input |
||||
next to `At Address`, put the Address of the contract you want to |
||||
interact with. Click on `At Address`, a new "connection" with the |
||||
contract will popup below. |
||||
|
||||
USING THE RECORDER |
||||
------------------ |
||||
|
||||
The Recorder allows to save a bunch of transactions in a JSON file and |
||||
rerun them later either in the same environment or in another. |
||||
|
||||
Saving to JSON allows to easily check the transaction list, tweak input |
||||
parameters, change linked library, etc... |
||||
|
||||
We can find many use cases for the recorder, for instance: |
||||
: - After having coded and tested contracts in a constrained |
||||
environment (like the JavaScript VM), it could be interesting to |
||||
redeploy them easily in a more persisted environment (like a |
||||
Geth node) in order to check whether everything behaves normally |
||||
in a classic environment. |
||||
- Deploying contract does often require more than creating one |
||||
transaction. |
||||
- Working in a dev environment does often require to setup the |
||||
state in a first place. |
||||
|
||||
![image](images/remix_recorder.png) |
||||
|
||||
Saving a record ends up with the creation of this type of content (see |
||||
below): |
||||
|
||||
In that specific record, 3 transactions are executed: |
||||
|
||||
The first corresponds to the deployment of the lib `testLib`. |
||||
|
||||
The second corresponds to the deployment of the contract `test`, the |
||||
first parameter of the constructor is set to 11. That contract depends |
||||
on a library. The linkage is done using the property `linkReferences`. |
||||
In that case we use the addres of the previously created library : |
||||
`created{1512830014773}`. the number is the id (timestamp) of the |
||||
transaction that leads to the creation of the library. |
||||
|
||||
The third parameter corresponds to the call to te function `set` of the |
||||
contract `test` (the property to is set to: `created{1512830015080}`) . |
||||
Input parameters are `1` and |
||||
`0xca35b7d915458ef540ade6068dfe2f44e8fa733c` |
||||
|
||||
all these transactions are created using the value of the accounts |
||||
`account{0}`. |
||||
|
||||
``` {.sourceCode .none} |
||||
{ |
||||
"accounts": { |
||||
"account{0}": "0xca35b7d915458ef540ade6068dfe2f44e8fa733c" |
||||
}, |
||||
"linkReferences": { |
||||
"testLib": "created{1512830014773}" |
||||
}, |
||||
"transactions": [ |
||||
{ |
||||
"timestamp": 1512830014773, |
||||
"record": { |
||||
"value": "0", |
||||
"parameters": [], |
||||
"abi": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a", |
||||
"contractName": "testLib", |
||||
"bytecode": "60606040523415600e57600080fd5b60968061001c6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b604a6060565b6040518082815260200191505060405180910390f35b6000610d809050905600a165627a7a7230582022d123b15248b8176151f8d45c2dc132063bcc9bb8d5cd652aea7efae362c8050029", |
||||
"linkReferences": {}, |
||||
"type": "constructor", |
||||
"from": "account{0}" |
||||
} |
||||
}, |
||||
{ |
||||
"timestamp": 1512830015080, |
||||
"record": { |
||||
"value": "100", |
||||
"parameters": [ |
||||
11 |
||||
], |
||||
"abi": "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec", |
||||
"contractName": "test", |
||||
"bytecode": "60606040526040516020806102b183398101604052808051906020019091905050806000819055505061027a806100376000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632f30c6f61461006757806338cc48311461009e57806362738998146100f357806387cc10e11461011c575b600080fd5b61009c600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610145565b005b34156100a957600080fd5b6100b1610191565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100fe57600080fd5b6101066101bb565b6040518082815260200191505060405180910390f35b341561012757600080fd5b61012f6101c4565b6040518082815260200191505060405180910390f35b8160008190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905090565b600073__browser/ballot.sol:testLib____________636d4ce63c6000604051602001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b151561022e57600080fd5b6102c65a03f4151561023f57600080fd5b505050604051805190509050905600a165627a7a72305820e0b2510bb2890a0334bfe5613d96db3e72442e63b514cdeaee8fc2c6bbd19d3a0029", |
||||
"linkReferences": { |
||||
"browser/ballot.sol": { |
||||
"testLib": [ |
||||
{ |
||||
"length": 20, |
||||
"start": 511 |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
"name": "", |
||||
"type": "constructor", |
||||
"from": "account{0}" |
||||
} |
||||
}, |
||||
{ |
||||
"timestamp": 1512830034180, |
||||
"record": { |
||||
"value": "1000000000000000000", |
||||
"parameters": [ |
||||
1, |
||||
"0xca35b7d915458ef540ade6068dfe2f44e8fa733c" |
||||
], |
||||
"to": "created{1512830015080}", |
||||
"abi": "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec", |
||||
"name": "set", |
||||
"type": "function", |
||||
"from": "account{0}" |
||||
} |
||||
} |
||||
], |
||||
"abis": { |
||||
"0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a": [ |
||||
{ |
||||
"constant": true, |
||||
"inputs": [], |
||||
"name": "get", |
||||
"outputs": [ |
||||
{ |
||||
"name": "", |
||||
"type": "uint256" |
||||
} |
||||
], |
||||
"payable": false, |
||||
"stateMutability": "view", |
||||
"type": "function" |
||||
} |
||||
], |
||||
"0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec": [ |
||||
{ |
||||
"constant": true, |
||||
"inputs": [], |
||||
"name": "getInt", |
||||
"outputs": [ |
||||
{ |
||||
"name": "", |
||||
"type": "uint256" |
||||
} |
||||
], |
||||
"payable": false, |
||||
"stateMutability": "view", |
||||
"type": "function" |
||||
}, |
||||
{ |
||||
"constant": true, |
||||
"inputs": [], |
||||
"name": "getFromLib", |
||||
"outputs": [ |
||||
{ |
||||
"name": "", |
||||
"type": "uint256" |
||||
} |
||||
], |
||||
"payable": false, |
||||
"stateMutability": "view", |
||||
"type": "function" |
||||
}, |
||||
{ |
||||
"constant": true, |
||||
"inputs": [], |
||||
"name": "getAddress", |
||||
"outputs": [ |
||||
{ |
||||
"name": "", |
||||
"type": "address" |
||||
} |
||||
], |
||||
"payable": false, |
||||
"stateMutability": "view", |
||||
"type": "function" |
||||
}, |
||||
{ |
||||
"constant": false, |
||||
"inputs": [ |
||||
{ |
||||
"name": "_t", |
||||
"type": "uint256" |
||||
}, |
||||
{ |
||||
"name": "_add", |
||||
"type": "address" |
||||
} |
||||
], |
||||
"name": "set", |
||||
"outputs": [], |
||||
"payable": true, |
||||
"stateMutability": "payable", |
||||
"type": "function" |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "_r", |
||||
"type": "uint256" |
||||
} |
||||
], |
||||
"payable": true, |
||||
"stateMutability": "payable", |
||||
"type": "constructor" |
||||
} |
||||
] |
||||
} |
||||
} |
||||
``` |
@ -0,0 +1,17 @@ |
||||
Settings |
||||
======== |
||||
|
||||
This section displays the current compiler version and allows one to |
||||
change to another version. |
||||
|
||||
![image](images/remix_settingstab.png) |
||||
|
||||
Settings, available here: |
||||
|
||||
> - Text wrap: controls if the text in the editor should be wrapped. |
||||
> |
||||
> - Enable optimization: defines if the compiler should enable |
||||
> optimization during compilation. Enabling this option saves execution |
||||
> gas. It is useful to enable optimization for contracts ready to be |
||||
> deployed in production but could lead to some inconsistencies when |
||||
> debugging such a contract. |
@ -0,0 +1,18 @@ |
||||
Solidity Editor |
||||
=============== |
||||
|
||||
The Remix editor recompiles the code each time the current file is |
||||
changed or another file is selected. It also provides syntax |
||||
highlighting mapped to solidity keywords. |
||||
|
||||
![image](images/remix_editor.png) |
||||
|
||||
Here's the list of some important features: |
||||
|
||||
- It display opened files as tabs. |
||||
- Compilation Warning and Error are displayed in the gutter |
||||
- Remix saves the current file continuously (5s after the last |
||||
changes) |
||||
- +/- on the top left corner enable you to increase/decrease the font |
||||
size of the editor |
||||
|
@ -0,0 +1,9 @@ |
||||
Support |
||||
======= |
||||
|
||||
This section provides a link to Remix Issues where users can report a |
||||
bug or suggest a feature, as well as providing other useful links. It |
||||
also displays a [Remix developers' |
||||
channel](http://gitter.im/ethereum/remix) |
||||
|
||||
![image](images/remix_supporttab.png) |
@ -0,0 +1,10 @@ |
||||
Tabs Panel |
||||
========== |
||||
|
||||
- ../compile\_tab |
||||
- ../run\_tab |
||||
- ../settings\_tab |
||||
- ../debugger\_tab |
||||
- ../analysis\_tab |
||||
- ../support\_tab |
||||
|
@ -0,0 +1,20 @@ |
||||
Terminal |
||||
======== |
||||
|
||||
![image](images/remix_terminal.png) |
||||
|
||||
Features, available in the terminal: |
||||
|
||||
- It integrates a JavaScript interpreter and the `web3` object. It |
||||
enables the execution of the JavaScript script which interacts with |
||||
the current context. (note that `web3` is only available if the |
||||
`web provider` or `injected provider` mode is selected). |
||||
- It displays important actions made while interacting with the Remix |
||||
IDE (i.e. sending a new transaction). |
||||
- It displays transactions that are mined in the current context. You |
||||
can choose to display all transactions or only transactions that |
||||
refers to the contracts Remix knows (e.g transaction created from |
||||
the Remix IDE). |
||||
- It allows searching for the data and clearing the logs from the |
||||
terminal. |
||||
|
@ -0,0 +1,222 @@ |
||||
Debugging a Transaction |
||||
======================= |
||||
|
||||
The goal of this tutorial is to explain how to debug transaction using |
||||
Remix. |
||||
|
||||
Start debugging |
||||
--------------- |
||||
|
||||
There are two different ways to start debugging, each way correspond to |
||||
a different use case. |
||||
|
||||
### From the Transaction GUI |
||||
|
||||
We will not explain in detail here how to write or deploy contract. Let |
||||
us start with a basic contract (replace this one by your's): |
||||
|
||||
``` {.sourceCode .none} |
||||
contract Donation { |
||||
address owner; |
||||
event fundMoved(address _to, uint _amount); |
||||
modifier onlyowner { if (msg.sender == owner) _; } |
||||
address[] _giver; |
||||
uint[] _values; |
||||
|
||||
function Donation() { |
||||
owner = msg.sender; |
||||
} |
||||
|
||||
function donate() payable { |
||||
addGiver(msg.value); |
||||
} |
||||
|
||||
function moveFund(address _to, uint _amount) onlyowner { |
||||
uint balance = this.balance; |
||||
uint amount = _amount; |
||||
if (_amount <= this.balance) { |
||||
if (_to.send(this.balance)) { |
||||
fundMoved(_to, _amount); |
||||
} else { |
||||
throw; |
||||
} |
||||
} else { |
||||
throw; |
||||
} |
||||
} |
||||
|
||||
function addGiver(uint _amount) internal { |
||||
_giver.push(msg.sender); |
||||
_values.push(_amount); |
||||
} |
||||
} |
||||
``` |
||||
|
||||
For the purpose of this tutorial, we will run the `JavaScript VM` |
||||
(that's the default mode when you don't use Remix with Mist or |
||||
Metamask). This simulates a custom blockchain. You could do the same |
||||
using a proper backend node. |
||||
|
||||
Now, let's deploy the contract: |
||||
|
||||
Right panel / Red button `Create` |
||||
|
||||
![image](remix1.png) |
||||
|
||||
Then we should call the `Donate` function (that will send Ether to the |
||||
contract). |
||||
|
||||
Let's set the amount of Ether: |
||||
|
||||
Right panel / second tab from the left - fill in the ´´value´´ input (´1 |
||||
ether´ for instance) |
||||
|
||||
![image](remix_valueinput.png) |
||||
|
||||
Then click on `Donate`. As we are using the `JavaScript VM`, everything |
||||
goes almost instantly. |
||||
|
||||
Remix displays also some information related to each transaction result. |
||||
In the terminal, the transaction is logged and you can start debugging |
||||
it. |
||||
|
||||
![image](remix_startdebugging.png) |
||||
|
||||
### From the Debugger |
||||
|
||||
The debugger can be found in the right panel / 5th tab from the left. |
||||
|
||||
You can start a debug session by providing either a `transaction hash` |
||||
or a `block number` and `transaction index`. |
||||
|
||||
![image](remix3.png) |
||||
|
||||
Click the `play` button to start debugging. |
||||
|
||||
Using the debugger |
||||
------------------ |
||||
|
||||
The debugger allows one to see detailed informations about the |
||||
transaction's execution. It uses the editor (left panel) to display the |
||||
location in the source code where the current execution is. |
||||
|
||||
The transaction panel displays basic information about the current |
||||
transaction. |
||||
|
||||
![image](remix_debugtransactioninfo.png) |
||||
|
||||
The navigation part contains a slider and buttons that can be used to |
||||
step through the transaction execution. |
||||
|
||||
From the left to the right: |
||||
|
||||
step over back, step into back, step into forward, step over forward, |
||||
jump out (jump out of the current call), jump to the previous |
||||
breakpoint, jump to the next breakpoint. |
||||
|
||||
![image](remix_navigation.png) |
||||
|
||||
11 panels give detailed information about the execution: |
||||
|
||||
### Instructions |
||||
|
||||
![image](remix_debuginstructions.png) |
||||
|
||||
The Instructions panel displays the bytecode of the current executing |
||||
contract- with the current step highlighted. |
||||
|
||||
Important note: When this panel is hidden, the slider will have a |
||||
courser granularity and only stop at expression boundaries, even if they |
||||
are compiled into multiple EVM instructions. When the panel is |
||||
displayed, it will be possible to step over every instruction, even |
||||
those that refers to the same expression. |
||||
|
||||
### Solidity Locals |
||||
|
||||
![image](remix_soliditylocals.png) |
||||
|
||||
The Solidity Locals panel displays local variables associated with the |
||||
current context. |
||||
|
||||
### Solidity State |
||||
|
||||
![image](remix_soliditystate.png) |
||||
|
||||
The Solidity State panel displays state variables of the current |
||||
executing contract. |
||||
|
||||
### Low level panels |
||||
|
||||
These panels display low level informations about the execution: |
||||
|
||||
> - Stack |
||||
> - Storages Changes |
||||
> - Memory |
||||
> - Call Data |
||||
> - Call Stack |
||||
> - Return Value (only if the current step is a RETURN opcode) |
||||
> - Full Storages Changes (only at the end of the execution - display |
||||
> every storage change of every modified contract) |
||||
|
||||
### Reverted Transaction |
||||
|
||||
A transaction could be reverted (either because of out of gas exception, |
||||
Solidity `throw` or low level exception). |
||||
|
||||
In that case it is important to be aware of the exception and to locate |
||||
where the exception is in the source code. |
||||
|
||||
Remix will warn you when the execution throws an exception. The |
||||
`warning` button will jump to the last opcode before the exception |
||||
happened. |
||||
|
||||
![image](remix_executionexception.png) |
||||
|
||||
### Breakpoints |
||||
|
||||
The two last buttons from the navigation area are used to jump either |
||||
back to the previous breakpoint or forward to the next breakpoint. |
||||
|
||||
Breakpoints can be added and removed by clicking on the line number. |
||||
|
||||
![image](remix_breakpoint.png) |
||||
|
||||
When a debug session is started, the execution will jump to the first |
||||
encountered breakpoint. |
||||
|
||||
Important note: If you add a breakpoint to a line that declares a |
||||
variable, it might be triggered twice: Once for initializing the |
||||
variable to zero and second time for assigning the actual value. As an |
||||
example, assume you are debugging the following contract: |
||||
|
||||
``` {.sourceCode .none} |
||||
contract ctr { |
||||
function hid () { |
||||
uint p = 45; |
||||
uint m; |
||||
m = 89; |
||||
uint l = 34; |
||||
} |
||||
} |
||||
``` |
||||
|
||||
And let's says that breakpoints are set for the lines |
||||
|
||||
`uint p = 45;` |
||||
|
||||
`m = 89;` |
||||
|
||||
`uint l = 34;` |
||||
|
||||
then clicking on `Jump to next breakpoint` will stop at the following |
||||
lines in the given order: |
||||
|
||||
> `uint p = 45;` (declaration of p) |
||||
> |
||||
> `uint l = 34;` (declaration of l) |
||||
> |
||||
> `uint p = 45;` (45 assigned to p) |
||||
> |
||||
> `m = 89;` (89 assigned to m) |
||||
> |
||||
> `uint l = 34;` (34 assigned to l) |
@ -0,0 +1,34 @@ |
||||
Importing Source Files in Solidity |
||||
================================== |
||||
|
||||
This tutorial will show you how to import local and external files. |
||||
|
||||
The compilation result will also contain contracts implemented in the |
||||
imported files. |
||||
|
||||
For a detailed explanation of the `import` keyword see the `Solidity` |
||||
[documentation](https://solidity.readthedocs.io/en/develop/layout-of-source-files.html?highlight=import#importing-other-source-files) |
||||
|
||||
Importing a local file |
||||
---------------------- |
||||
|
||||
Other files in Remix can be imported just by specifying their path. |
||||
Please use ./ for relative paths to increase portability. |
||||
|
||||
![image](tuto_basicimport.png) |
||||
|
||||
Importing from Github |
||||
--------------------- |
||||
|
||||
It is possible to import files directly from github with URLs like |
||||
`https://github.com/<owner>/<repo>/<path to the file>`. |
||||
|
||||
![image](tuto_importgit.png) |
||||
|
||||
Importing from Swarm |
||||
-------------------- |
||||
|
||||
Files can be imported using all URLs supported by swarm. If you do not |
||||
have a swarm node, swarm-gateways.net will be used instead. |
||||
|
||||
![image](tuto_importswarm.png) |
@ -0,0 +1,309 @@ |
||||
Debugging a Dapp using Remix - Mist - Geth |
||||
========================================== |
||||
|
||||
The ultimate goal of this tutorial is to debug transactions that have |
||||
been created by a dapp front end. |
||||
|
||||
It is easy in Remix to debug a transaction created from its own GUI. |
||||
However, setting up an environment that allows you to debug transactions |
||||
created outside of Remix, require a bit more of complexity. |
||||
|
||||
We will need four tools for that : |
||||
|
||||
> - Geth - this is the center piece and provides the blockchain |
||||
> environment. We will basically run geth in a dev mode. |
||||
> - Mist - this is the Ethereum dapp browser. We will use it to browse |
||||
> our front end. |
||||
> - Remix - this is the Ethereum IDE. We will use it to develop our |
||||
> Solidity contract. |
||||
> - Any code editor you want - in order to write your front end :) |
||||
|
||||
Install the environment |
||||
----------------------- |
||||
|
||||
### Install Mist |
||||
|
||||
Mist is the Ethereum browser and the entry point of a Dapp. |
||||
|
||||
Please download [the latest |
||||
version](http://github.com/ethereum/mist/releases) (at least 0.8.9). |
||||
|
||||
Basically we will always run our front end in Mist (note that it is also |
||||
possible to use [Metamask](http://metamask.io)). |
||||
|
||||
### Install Geth |
||||
|
||||
[Geth](http://github.com/ethereum/go-ethereum/releases) is the official |
||||
Ethereum client. |
||||
|
||||
Running the environment |
||||
----------------------- |
||||
|
||||
### Run Geth |
||||
|
||||
We will run a test node. This node will have a new empty state and will |
||||
not be synced to the main or ropsten network. |
||||
|
||||
geth --ipcpath <test-chain-directory>/geth.ipc --datadir <test-chain-directory> --dev console |
||||
|
||||
`<test-chain-directory>` is the folder where keys and chain data will be |
||||
stored. |
||||
|
||||
`--ipcpath` defines the end point that other apps (like Mist) use to |
||||
talk to geth. |
||||
|
||||
`--datadir` specifies the data directory. |
||||
|
||||
`--dev` sets the node into private chain mode and adds some debugging |
||||
flags. |
||||
|
||||
Then we need to create accounts and mine a bit to generate some Ether: |
||||
|
||||
// from the geth console : |
||||
personal.newAccount() // You can execute this command several time if you need more than one account. |
||||
miner.start() // generate some Ether. |
||||
miner.stop() // stop mining after 30s-60s - we could also keep mining. |
||||
|
||||
Next time we run Geth, we will only need to mine transactions (no need |
||||
to recreate account). |
||||
|
||||
### Run Mist |
||||
|
||||
If we run Mist without any argument, its internal Geth node will run. As |
||||
we have our own we need to specify the ipc path of the node installed |
||||
above. |
||||
|
||||
mist --rpc <test-chain-directory>/geth.ipc |
||||
|
||||
(yes the option is --rpc) |
||||
|
||||
Once Mist is started, verify that it is connected to the test node |
||||
(that's very important!!). |
||||
|
||||
On the bottom left, check that the network is `Private-net` and that the |
||||
block number is the same as reported by the test node we are currently |
||||
running. Run the following command in the Geth Console to check: |
||||
web3.eth.blockNumber. |
||||
|
||||
![image](mist1.png) |
||||
|
||||
Clicking on Wallet will allow you to send transactions and check account |
||||
balances (if you are currently mining you should see the balance |
||||
increasing). |
||||
|
||||
### Starting Remix |
||||
|
||||
In Mist click on `Develop` / `Open Remix IDE` |
||||
|
||||
Remix will open in a new window. If this is the first time it is run, |
||||
the `Ballot` contract will be loaded. |
||||
|
||||
Now, we need to check if Remix is connected to Mist: |
||||
|
||||
Right panel / third tab from the left, `Injected Provider` should be |
||||
checked. |
||||
|
||||
![image](remix4.png) |
||||
|
||||
Right panel / second tab from the left, `Transaction Origin` should |
||||
contain accounts we have previously created in Geth. |
||||
|
||||
![image](remix5.png) |
||||
|
||||
Developing contract / front end |
||||
------------------------------- |
||||
|
||||
### Donation contract - Dapp Back end |
||||
|
||||
Here is a sample solidity contract. |
||||
|
||||
Copy and paste the following inside remix: |
||||
|
||||
``` {.sourceCode .none} |
||||
contract Donation { |
||||
address owner; |
||||
event fundMoved(address _to, uint _amount); |
||||
modifier onlyowner { if (msg.sender == owner) _; } |
||||
address[] _giver; |
||||
uint[] _values; |
||||
|
||||
function Donation() { |
||||
owner = msg.sender; |
||||
} |
||||
|
||||
function donate() payable { |
||||
addGiver(msg.value); |
||||
} |
||||
|
||||
function moveFund(address _to, uint _amount) onlyowner { |
||||
uint balance = this.balance; |
||||
uint amount = _amount; |
||||
if (_amount <= this.balance) { |
||||
if (_to.send(this.balance)) { |
||||
fundMoved(_to, _amount); |
||||
} else { |
||||
throw; |
||||
} |
||||
} else { |
||||
throw; |
||||
} |
||||
} |
||||
|
||||
function addGiver(uint _amount) internal { |
||||
_giver.push(msg.sender); |
||||
_values.push(_amount); |
||||
} |
||||
} |
||||
``` |
||||
|
||||
### Dapp Front end |
||||
|
||||
and here is the front end: |
||||
|
||||
``` {.sourceCode .none} |
||||
<div> |
||||
<div>Donation Contract</div> |
||||
<br/> |
||||
<input id='contractaddress' placeholder='contract address'></intput> |
||||
<br/> |
||||
<div> |
||||
<br/> |
||||
<input id='fromGive' placeholder='from' ></intput><input placeholder='amount' id='valueGive'></intput><button id="fallbackbtn" onclick="donate()">give</button> |
||||
<br/> |
||||
<br/> |
||||
<input id='fromMoveFund' placeholder='from' ></intput><input id='moveFundTo' placeholder='move to' ></intput><input id='amountToMove' placeholder='amount' ></intput><button id="movefundbtn" onclick="movefund()">moveFund</button> |
||||
<br/> |
||||
<br/> |
||||
<div id='wait' ></div> |
||||
</div> |
||||
<br/> |
||||
<br/> |
||||
<div id='log'> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
function donate () { |
||||
var donation = contractspec.at(document.getElementById('contractaddress').value) |
||||
donation.donate({ |
||||
from: document.getElementById('fromGive').value, |
||||
value: document.getElementById('valueGive').value |
||||
}, function (error, txHash) { |
||||
tryTillResponse(txHash, function (error, receipt) { |
||||
alert('done ' + txHash) |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
function movefund () { |
||||
var donation = contractspec.at(document.getElementById('contractaddress').value) |
||||
donation.moveFund( |
||||
document.getElementById('moveFundTo').value, |
||||
document.getElementById('amountToMove').value, |
||||
function (error, txHash) { |
||||
tryTillResponse(txHash, function (error, receipt) { |
||||
alert('done ' + txHash) |
||||
}) |
||||
}) |
||||
} |
||||
|
||||
var contractspec = web3.eth.contract([{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"moveFund","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"donate","outputs":[],"payable":true,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"fundMoved","type":"event"}]); |
||||
|
||||
function tryTillResponse (txhash, done) { |
||||
document.getElementById('wait').innerHTML = 'waiting for the transaction to be mined ...' |
||||
web3.eth.getTransactionReceipt(txhash, function (err, result) { |
||||
if (!err && !result) { |
||||
// Try again with a bit of delay |
||||
setTimeout(function () { tryTillResponse(txhash, done) }, 500) |
||||
} else { |
||||
document.getElementById('wait').innerHTML = '' |
||||
var log = document.createElement("div") |
||||
log.innerHTML = JSON.stringify(result) |
||||
document.getElementById('log').appendChild(log) |
||||
done(err,result) |
||||
} |
||||
}) |
||||
} |
||||
</script> |
||||
``` |
||||
|
||||
I would suggest serving this file using `http-serve`, but you can use |
||||
any web server you like. |
||||
|
||||
Example: Dapp Front End <https://github.com/ltfschoen/dapp_front_end> |
||||
|
||||
### Important notice ! |
||||
|
||||
The variable `contractspec` contains the abi of the `donation` contract. |
||||
This means that if you change something in the contract interface |
||||
(function names, parameters, ...) you need to copy the new abi from |
||||
remix to the front end. |
||||
|
||||
Deploying |
||||
--------- |
||||
|
||||
Right panel / Red button `Create` |
||||
|
||||
![image](remix1.png) |
||||
|
||||
This creates a new transaction that deploys the `Donation` contract |
||||
(Mist will ask for the usual passphrase check). |
||||
|
||||
Wait for the transaction to be mined (don't forget to activate mining |
||||
`miner.start()`). Once this is done, you can use it by executing the |
||||
`moveFund` and `donate` function. But this is not what we want to |
||||
achieve. We want to run and debug those functions from the front end. |
||||
|
||||
Remix also display the address of the contract. Save it, we'll need this |
||||
address later. |
||||
|
||||
![image](remix2.png) |
||||
|
||||
Debugging |
||||
--------- |
||||
|
||||
From Mist, browse the above front end. In the first field, paste the |
||||
address of the newly created contract. Now, let's call the first |
||||
function (label `give`). |
||||
|
||||
You will need an account and a value. |
||||
|
||||
The account could be any account that is declared in the Wallet section |
||||
of Mist. This is the sender of the transaction that we are going to |
||||
create. The value should be no more than the actual balance of the |
||||
account - the unit is in wei, so just put `100` (100 wei), that should |
||||
be fine. |
||||
|
||||
Click on `Give` and wait for the transaction to be mined. |
||||
|
||||
The HTML block with id `log` is filled by all the transactions created |
||||
from the front end. It was easier for the purpose of this tutorial to |
||||
just log transactions in a div but you can have your own logging |
||||
mechanism. |
||||
|
||||
There is only one field that we need, this is the `transactionHash`. |
||||
|
||||
Copy it and switch to Remix. On the right side, the fifth panel shows a |
||||
small "bug" icon, that is the debugger. |
||||
|
||||
Paste the hash into the transaction field and click on the `play` |
||||
button. |
||||
|
||||
![image](remix3.png) |
||||
|
||||
You are now entering a debug session for the call to `donate`. |
||||
|
||||
Debugging in Remix is easier than with common tools like gdb because you |
||||
can freely move in time. Use the slider to change the current step and |
||||
click on the panels below to expand them and explore the curret state, |
||||
local variables, etc. There are also breakpoints to move between |
||||
sections of the code quickly, but more on all that later. |
||||
|
||||
At the time of this writing, there is an issue that could break the |
||||
contract creation. The a workaround for that at |
||||
<https://github.com/ethereum/go-ethereum/issues/3653> . Please follow |
||||
the workaround or wait for this issue to be closed. |
||||
|
||||
Also, although retrieving a contract's storage when Remix is using the |
||||
JavaScript VM is working well, there is still work to be done when Remix |
||||
is using eth or geth as backend. |
@ -0,0 +1,45 @@ |
||||
Accessing a shared folder in Remix IDE using Remixd |
||||
=================================================== |
||||
|
||||
Remixd is an npm module. Its purpose is to give the remix web |
||||
application access to a folder from your local computer. |
||||
|
||||
The code of Remixd can be checked out |
||||
[here](https://github.com/ethereum/remixd) . |
||||
|
||||
Remixd can be globally installed using the following command: |
||||
`npm install -g remixd`. |
||||
|
||||
Then `remixd -s <absolute-path-to-the-shared-folder>` will start Remixd |
||||
and share the given folder. |
||||
|
||||
The folder is shared using a websocket connection between `Remix IDE` |
||||
and `Remixd`. |
||||
|
||||
Be sure the user executing Remix has read/write permission on the |
||||
folder. |
||||
|
||||
> **warning** |
||||
|
||||
> Remixd provides full read and write access to the given folder for any |
||||
> application that can access the TCP port 65520 on your local host. |
||||
|
||||
From `Remix IDE`, you will need to activate the connection. |
||||
|
||||
Click on the `localhost connection` icon: |
||||
|
||||
![image](remixd_noconnection.png) |
||||
|
||||
A modal dialog will ask confirmation |
||||
|
||||
![image](remixd_alert.png) |
||||
|
||||
Accepting this dialog will start a session. Once the connection is made, |
||||
the status will update and the connection icon should shows up in green. |
||||
|
||||
Hovering the icon will give more connection status information. |
||||
|
||||
At this point if the connection is successful, the shared folder will be |
||||
available in the file explorer. |
||||
|
||||
![image](remixd_connectionok.png) |
@ -0,0 +1,216 @@ |
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# User-friendly check for sphinx-build
|
||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) |
||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) |
||||
endif |
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help |
||||
help: |
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " applehelp to make an Apple Help Book"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
@echo " coverage to run coverage check of the documentation (if enabled)"
|
||||
|
||||
.PHONY: clean |
||||
clean: |
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
.PHONY: html |
||||
html: |
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
.PHONY: dirhtml |
||||
dirhtml: |
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
.PHONY: singlehtml |
||||
singlehtml: |
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
.PHONY: pickle |
||||
pickle: |
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
.PHONY: json |
||||
json: |
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
.PHONY: htmlhelp |
||||
htmlhelp: |
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
.PHONY: qthelp |
||||
qthelp: |
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Remix.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Remix.qhc"
|
||||
|
||||
.PHONY: applehelp |
||||
applehelp: |
||||
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||
@echo
|
||||
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||
"~/Library/Documentation/Help or install it in your application" \
|
||||
"bundle."
|
||||
|
||||
.PHONY: devhelp |
||||
devhelp: |
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/Remix"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Remix"
|
||||
@echo "# devhelp"
|
||||
|
||||
.PHONY: epub |
||||
epub: |
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
.PHONY: latex |
||||
latex: |
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
.PHONY: latexpdf |
||||
latexpdf: |
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: latexpdfja |
||||
latexpdfja: |
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: text |
||||
text: |
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
.PHONY: man |
||||
man: |
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
.PHONY: texinfo |
||||
texinfo: |
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
.PHONY: info |
||||
info: |
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
.PHONY: gettext |
||||
gettext: |
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
.PHONY: changes |
||||
changes: |
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
.PHONY: linkcheck |
||||
linkcheck: |
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
.PHONY: doctest |
||||
doctest: |
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
.PHONY: coverage |
||||
coverage: |
||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
||||
@echo "Testing of coverage in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/coverage/python.txt."
|
||||
|
||||
.PHONY: xml |
||||
xml: |
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
.PHONY: pseudoxml |
||||
pseudoxml: |
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
@ -0,0 +1,283 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# |
||||
# Remix documentation build configuration file, created by |
||||
# sphinx-quickstart on Mon Feb 20 12:16:16 2017. |
||||
# |
||||
# This file is execfile()d with the current directory set to its |
||||
# containing dir. |
||||
# |
||||
# Note that not all possible configuration values are present in this |
||||
# autogenerated file. |
||||
# |
||||
# All configuration values have a default; values that are commented out |
||||
# serve to show the default. |
||||
|
||||
import sys |
||||
import os |
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory, |
||||
# add these directories to sys.path here. If the directory is relative to the |
||||
# documentation root, use os.path.abspath to make it absolute, like shown here. |
||||
#sys.path.insert(0, os.path.abspath('.')) |
||||
|
||||
# -- General configuration ------------------------------------------------ |
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here. |
||||
#needs_sphinx = '1.0' |
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be |
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom |
||||
# ones. |
||||
extensions = [] |
||||
|
||||
# Add any paths that contain templates here, relative to this directory. |
||||
templates_path = ['_templates'] |
||||
|
||||
# The suffix(es) of source filenames. |
||||
# You can specify multiple suffix as a list of string: |
||||
# source_suffix = ['.rst', '.md'] |
||||
source_suffix = '.md' |
||||
|
||||
# The encoding of source files. |
||||
#source_encoding = 'utf-8-sig' |
||||
|
||||
# The master toctree document. |
||||
master_doc = 'index' |
||||
|
||||
# General information about the project. |
||||
project = u'Remix' |
||||
copyright = u'2017, yann300' |
||||
author = u'yann300' |
||||
|
||||
# The version info for the project you're documenting, acts as replacement for |
||||
# |version| and |release|, also used in various other places throughout the |
||||
# built documents. |
||||
# |
||||
# The short X.Y version. |
||||
version = u'1' |
||||
# The full version, including alpha/beta/rc tags. |
||||
release = u'1' |
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation |
||||
# for a list of supported languages. |
||||
# |
||||
# This is also used if you do content translation via gettext catalogs. |
||||
# Usually you set "language" from the command line for these cases. |
||||
language = None |
||||
|
||||
# There are two options for replacing |today|: either, you set today to some |
||||
# non-false value, then it is used: |
||||
#today = '' |
||||
# Else, today_fmt is used as the format for a strftime call. |
||||
#today_fmt = '%B %d, %Y' |
||||
|
||||
# List of patterns, relative to source directory, that match files and |
||||
# directories to ignore when looking for source files. |
||||
exclude_patterns = ['_build'] |
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all |
||||
# documents. |
||||
#default_role = None |
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text. |
||||
#add_function_parentheses = True |
||||
|
||||
# If true, the current module name will be prepended to all description |
||||
# unit titles (such as .. function::). |
||||
#add_module_names = True |
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the |
||||
# output. They are ignored by default. |
||||
#show_authors = False |
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use. |
||||
pygments_style = 'sphinx' |
||||
|
||||
# A list of ignored prefixes for module index sorting. |
||||
#modindex_common_prefix = [] |
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents. |
||||
#keep_warnings = False |
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing. |
||||
todo_include_todos = False |
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------- |
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for |
||||
# a list of builtin themes. |
||||
html_theme = 'alabaster' |
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme |
||||
# further. For a list of options available for each theme, see the |
||||
# documentation. |
||||
#html_theme_options = {} |
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory. |
||||
#html_theme_path = [] |
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to |
||||
# "<project> v<release> documentation". |
||||
#html_title = None |
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title. |
||||
#html_short_title = None |
||||
|
||||
# The name of an image file (relative to this directory) to place at the top |
||||
# of the sidebar. |
||||
#html_logo = None |
||||
|
||||
# The name of an image file (relative to this directory) to use as a favicon of |
||||
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 |
||||
# pixels large. |
||||
#html_favicon = None |
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here, |
||||
# relative to this directory. They are copied after the builtin static files, |
||||
# so a file named "default.css" will overwrite the builtin "default.css". |
||||
html_static_path = ['_static'] |
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or |
||||
# .htaccess) here, relative to this directory. These files are copied |
||||
# directly to the root of the documentation. |
||||
#html_extra_path = [] |
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, |
||||
# using the given strftime format. |
||||
#html_last_updated_fmt = '%b %d, %Y' |
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to |
||||
# typographically correct entities. |
||||
#html_use_smartypants = True |
||||
|
||||
# Custom sidebar templates, maps document names to template names. |
||||
#html_sidebars = {} |
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to |
||||
# template names. |
||||
#html_additional_pages = {} |
||||
|
||||
# If false, no module index is generated. |
||||
#html_domain_indices = True |
||||
|
||||
# If false, no index is generated. |
||||
#html_use_index = True |
||||
|
||||
# If true, the index is split into individual pages for each letter. |
||||
#html_split_index = False |
||||
|
||||
# If true, links to the reST sources are added to the pages. |
||||
#html_show_sourcelink = True |
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. |
||||
#html_show_sphinx = True |
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. |
||||
#html_show_copyright = True |
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will |
||||
# contain a <link> tag referring to it. The value of this option must be the |
||||
# base URL from which the finished HTML is served. |
||||
#html_use_opensearch = '' |
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml"). |
||||
#html_file_suffix = None |
||||
|
||||
# Language to be used for generating the HTML full-text search index. |
||||
# Sphinx supports the following languages: |
||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' |
||||
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' |
||||
#html_search_language = 'en' |
||||
|
||||
# A dictionary with options for the search language support, empty by default. |
||||
# Now only 'ja' uses this config value |
||||
#html_search_options = {'type': 'default'} |
||||
|
||||
# The name of a javascript file (relative to the configuration directory) that |
||||
# implements a search results scorer. If empty, the default will be used. |
||||
#html_search_scorer = 'scorer.js' |
||||
|
||||
# Output file base name for HTML help builder. |
||||
htmlhelp_basename = 'Remixdoc' |
||||
|
||||
# -- Options for LaTeX output --------------------------------------------- |
||||
|
||||
latex_elements = { |
||||
# The paper size ('letterpaper' or 'a4paper'). |
||||
#'papersize': 'letterpaper', |
||||
|
||||
# The font size ('10pt', '11pt' or '12pt'). |
||||
#'pointsize': '10pt', |
||||
|
||||
# Additional stuff for the LaTeX preamble. |
||||
#'preamble': '', |
||||
|
||||
# Latex figure (float) alignment |
||||
#'figure_align': 'htbp', |
||||
} |
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples |
||||
# (source start file, target name, title, |
||||
# author, documentclass [howto, manual, or own class]). |
||||
latex_documents = [ |
||||
(master_doc, 'Remix.tex', u'Remix Documentation', |
||||
u'yann300', 'manual'), |
||||
] |
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of |
||||
# the title page. |
||||
#latex_logo = None |
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts, |
||||
# not chapters. |
||||
#latex_use_parts = False |
||||
|
||||
# If true, show page references after internal links. |
||||
#latex_show_pagerefs = False |
||||
|
||||
# If true, show URL addresses after external links. |
||||
#latex_show_urls = False |
||||
|
||||
# Documents to append as an appendix to all manuals. |
||||
#latex_appendices = [] |
||||
|
||||
# If false, no module index is generated. |
||||
#latex_domain_indices = True |
||||
|
||||
|
||||
# -- Options for manual page output --------------------------------------- |
||||
|
||||
# One entry per manual page. List of tuples |
||||
# (source start file, name, description, authors, manual section). |
||||
man_pages = [ |
||||
(master_doc, 'remix', u'Remix Documentation', |
||||
[author], 1) |
||||
] |
||||
|
||||
# If true, show URL addresses after external links. |
||||
#man_show_urls = False |
||||
|
||||
|
||||
# -- Options for Texinfo output ------------------------------------------- |
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples |
||||
# (source start file, target name, title, author, |
||||
# dir menu entry, description, category) |
||||
texinfo_documents = [ |
||||
(master_doc, 'Remix', u'Remix Documentation', |
||||
author, 'Remix', 'One line description of project.', |
||||
'Miscellaneous'), |
||||
] |
||||
|
||||
# Documents to append as an appendix to all manuals. |
||||
#texinfo_appendices = [] |
||||
|
||||
# If false, no module index is generated. |
||||
#texinfo_domain_indices = True |
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'. |
||||
#texinfo_show_urls = 'footnote' |
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu. |
||||
#texinfo_no_detailmenu = False |
After Width: | Height: | Size: 302 KiB |
After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 195 KiB |
After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 195 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 201 KiB |
After Width: | Height: | Size: 304 KiB |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 336 KiB |
After Width: | Height: | Size: 195 KiB |
@ -0,0 +1,263 @@ |
||||
@ECHO OFF |
||||
|
||||
REM Command file for Sphinx documentation |
||||
|
||||
if "%SPHINXBUILD%" == "" ( |
||||
set SPHINXBUILD=sphinx-build |
||||
) |
||||
set BUILDDIR=_build |
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . |
||||
set I18NSPHINXOPTS=%SPHINXOPTS% . |
||||
if NOT "%PAPER%" == "" ( |
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% |
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% |
||||
) |
||||
|
||||
if "%1" == "" goto help |
||||
|
||||
if "%1" == "help" ( |
||||
:help |
||||
echo.Please use `make ^<target^>` where ^<target^> is one of |
||||
echo. html to make standalone HTML files |
||||
echo. dirhtml to make HTML files named index.html in directories |
||||
echo. singlehtml to make a single large HTML file |
||||
echo. pickle to make pickle files |
||||
echo. json to make JSON files |
||||
echo. htmlhelp to make HTML files and a HTML help project |
||||
echo. qthelp to make HTML files and a qthelp project |
||||
echo. devhelp to make HTML files and a Devhelp project |
||||
echo. epub to make an epub |
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter |
||||
echo. text to make text files |
||||
echo. man to make manual pages |
||||
echo. texinfo to make Texinfo files |
||||
echo. gettext to make PO message catalogs |
||||
echo. changes to make an overview over all changed/added/deprecated items |
||||
echo. xml to make Docutils-native XML files |
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes |
||||
echo. linkcheck to check all external links for integrity |
||||
echo. doctest to run all doctests embedded in the documentation if enabled |
||||
echo. coverage to run coverage check of the documentation if enabled |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "clean" ( |
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i |
||||
del /q /s %BUILDDIR%\* |
||||
goto end |
||||
) |
||||
|
||||
|
||||
REM Check if sphinx-build is available and fallback to Python version if any |
||||
%SPHINXBUILD% 1>NUL 2>NUL |
||||
if errorlevel 9009 goto sphinx_python |
||||
goto sphinx_ok |
||||
|
||||
:sphinx_python |
||||
|
||||
set SPHINXBUILD=python -m sphinx.__init__ |
||||
%SPHINXBUILD% 2> nul |
||||
if errorlevel 9009 ( |
||||
echo. |
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx |
||||
echo.installed, then set the SPHINXBUILD environment variable to point |
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you |
||||
echo.may add the Sphinx directory to PATH. |
||||
echo. |
||||
echo.If you don't have Sphinx installed, grab it from |
||||
echo.http://sphinx-doc.org/ |
||||
exit /b 1 |
||||
) |
||||
|
||||
:sphinx_ok |
||||
|
||||
|
||||
if "%1" == "html" ( |
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "dirhtml" ( |
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "singlehtml" ( |
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "pickle" ( |
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished; now you can process the pickle files. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "json" ( |
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished; now you can process the JSON files. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "htmlhelp" ( |
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished; now you can run HTML Help Workshop with the ^ |
||||
.hhp project file in %BUILDDIR%/htmlhelp. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "qthelp" ( |
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^ |
||||
.qhcp project file in %BUILDDIR%/qthelp, like this: |
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Remix.qhcp |
||||
echo.To view the help file: |
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Remix.ghc |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "devhelp" ( |
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "epub" ( |
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "latex" ( |
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "latexpdf" ( |
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex |
||||
cd %BUILDDIR%/latex |
||||
make all-pdf |
||||
cd %~dp0 |
||||
echo. |
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "latexpdfja" ( |
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex |
||||
cd %BUILDDIR%/latex |
||||
make all-pdf-ja |
||||
cd %~dp0 |
||||
echo. |
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "text" ( |
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The text files are in %BUILDDIR%/text. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "man" ( |
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "texinfo" ( |
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "gettext" ( |
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "changes" ( |
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.The overview file is in %BUILDDIR%/changes. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "linkcheck" ( |
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Link check complete; look for any errors in the above output ^ |
||||
or in %BUILDDIR%/linkcheck/output.txt. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "doctest" ( |
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Testing of doctests in the sources finished, look at the ^ |
||||
results in %BUILDDIR%/doctest/output.txt. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "coverage" ( |
||||
%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Testing of coverage in the sources finished, look at the ^ |
||||
results in %BUILDDIR%/coverage/python.txt. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "xml" ( |
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml. |
||||
goto end |
||||
) |
||||
|
||||
if "%1" == "pseudoxml" ( |
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml |
||||
if errorlevel 1 exit /b 1 |
||||
echo. |
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. |
||||
goto end |
||||
) |
||||
|
||||
:end |
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 198 KiB |
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 203 KiB |
After Width: | Height: | Size: 213 KiB |
After Width: | Height: | Size: 192 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 268 KiB |
After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 265 KiB |
After Width: | Height: | Size: 283 KiB |
After Width: | Height: | Size: 266 KiB |
After Width: | Height: | Size: 265 KiB |
After Width: | Height: | Size: 270 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 266 KiB |
After Width: | Height: | Size: 249 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 117 KiB |