Merge pull request #28 from jamesb93/docs-update

Docs update
This commit is contained in:
AlexHarker
2019-08-24 10:14:09 +01:00
committed by GitHub
20 changed files with 6847 additions and 384 deletions
+5 -15
View File
@@ -42,22 +42,12 @@ externals/
## Package Testing
test-builds/
## James/Documentation
## James Documentation
__pycache__/
Documentation/Max\ Documentation/_Notes
Documentation/Max\ Documentation/XML_Externals
Documentation/Max\ Documentation/help_file_templates
RawXML/
BuildXML.maxpat
category_databse.json
_Notes/
XML_Externals_
RawXML/
Documentation/Max\ Documentation/category_database.json
*.maxref.xml
*lookup.json
.vscode
object_relationships.txt
__tmp__/
refpages/
help_files/templates/
object_relationships.py
Max_Object_List.h
## Other
@@ -0,0 +1,488 @@
{
"fl.spatial~": {
"digest": "Generates multiplication factors for a number of speakers from an input coordinate triple."
},
"fl.coordinatesystem~": {
"digest": "Converts vectors of triples between cartesian and polar values."
},
"fl.unpack~": {
"digest": "Unpacks multi-stream input into individual streams."
},
"fl.streamid~": {
"digest": "Outputs consecutively numbered stream ids for each stream of a multi-stream connection when triggered."
},
"fl.pack~": {
"digest": "Packs multiple frame streams into a multi-stream output."
},
"fl.dispatch~": {
"digest": "Dispatches multiple input frame streams dynamically to multiple outputs. Each output can be independently connected to any one (or none) of a number of incoming input frame streams, or turned off."
},
"fl.route~": {
"digest": "Routes input frames to one of a number of outputs."
},
"fl.select~": {
"digest": "Selects between a number of input frame streams."
},
"fl.timedelta~": {
"digest": "Calculates the time interval between consecutive incoming frames."
},
"fl.timer~": {
"digest": "Calculates the time elapsed between trigger frame inputs and the subsequent reset frame."
},
"fl.now~": {
"digest": "Outputs the current time."
},
"fl.ticks~": {
"digest": "Counts how many frames have passed up to a specified value (0 based).."
},
"fl.argmin~": {
"digest": "Calculates the index of the minimum value of the input frame."
},
"fl.sort~": {
"digest": "Sorts an input frame in ascending or descending order.."
},
"fl.shift~": {
"digest": "Shifts an input frame either with padding, or cyclically."
},
"fl.standarddeviation~": {
"digest": "Calculates the standard deviation of the input frame."
},
"fl.geometricmean~": {
"digest": "Calculates the geometric mean of the input frame."
},
"fl.accumpoint~": {
"digest": "Calculates the point in a vector at which the sum reaches a given percentage of the total sum."
},
"fl.centroid~": {
"digest": "Calculates the centroid of the input frame."
},
"fl.medianfilter~": {
"digest": "Median filter an input frame."
},
"fl.percentile~": {
"digest": "Calculates any percentile (for example the median at 50%) of an input frame."
},
"fl.kurtosis~": {
"digest": "Calculates the kurtosis of the input frame."
},
"fl.nonzero~": {
"digest": "Outputs indices that are non-zero."
},
"fl.vmin~": {
"digest": "Calculates the minimum value of the input frame."
},
"fl.flatness~": {
"digest": "Calculates the flatness of the input frame."
},
"fl.skewness~": {
"digest": "Calculates the skewness of the input frame."
},
"fl.join~": {
"digest": "Concatenates all input frames into a single output frame."
},
"fl.length~": {
"digest": "Calculates the length of the input frame."
},
"fl.argmax~": {
"digest": "Calculates the index of the maximum value of the input frame."
},
"fl.mean~": {
"digest": "Calculates the mean of the input frame."
},
"fl.rms~": {
"digest": "Calculates the rms of the input frame."
},
"fl.pad~": {
"digest": "Pads an input frame with a fixed value at either the start the end, or both."
},
"fl.reverse~": {
"digest": "Reverses the order of a single frame's contents.."
},
"fl.pattern~": {
"digest": "Splits a frame sequentially into smaller frames based on the trigger input.."
},
"fl.sum~": {
"digest": "Calculates the sum of the input frame."
},
"fl.nanfilter~": {
"digest": "Replaces or removes NaNs in a vector."
},
"fl.vmax~": {
"digest": "Calculates the maximum value of the input frame."
},
"fl.split~": {
"digest": "Splits input frames into two parts, given a specified split point."
},
"fl.subframe~": {
"digest": "Output part of an input frame."
},
"fl.product~": {
"digest": "Calculates the product of the input frame."
},
"fl.crest~": {
"digest": "Calculates the crest factor of the input frame."
},
"fl.chop~": {
"digest": "Chops input frames into equally sized output frames."
},
"fl.peaks~": {
"digest": "Finds peaks in an input frame (spectrum)."
},
"fl.spread~": {
"digest": "Calculates the spread of the input frame."
},
"fl.complexminus~": {
"digest": "Subtracts the right complex pair of input frame values from the left complex pair of input frame values."
},
"fl.complexdivide~": {
"digest": "Divides the left complex pair of input frame values by the right complex pair of input frame values."
},
"fl.complexmultiply~": {
"digest": "Multiplies complexvalues in the two sets of input frames."
},
"fl.complexpow~": {
"digest": "Calculates left complex pair of input frame values to the power of right complex pair of input frame values."
},
"fl.complexplus~": {
"digest": "Adds complex values in the two sets of input frames."
},
"fl.read~": {
"digest": "Reads from a buffer~ given an input frame of sample positions."
},
"fl.info~": {
"digest": "Outputs the sample rate, number of channels and size of a buffer (in milliseconds). The size units can be changed.."
},
"fl.exp2~": {
"digest": "Calculates the exponent base 2 (2 to the power of) of each value in the input frame."
},
"fl.asinh~": {
"digest": "Calculates the hyperbolic arcsine of each value in the input frame."
},
"fl.log~": {
"digest": "Calculates the logarithm base e of each value in the input frame."
},
"fl.erf~": {
"digest": "Calculates the error function of each value in the input frame."
},
"fl.exp~": {
"digest": "Calculates the exponent base e (e to the power of) of each value in the input frame."
},
"fl.sin~": {
"digest": "Calculates the sine (for arguments in radians) of each value in the input frame."
},
"fl.log2~": {
"digest": "Calculates the logarithm base 2 of each value in the input frame."
},
"fl.asin~": {
"digest": "Calculates the arcsine (in radians) of each value in the input frame."
},
"fl.acos~": {
"digest": "Calculates the arccosine (in radians) of each value in the input frame."
},
"fl.cos~": {
"digest": "Calculates the cosine (for arguments in radians) of each value in the input frame."
},
"fl.sinh~": {
"digest": "Calculates the hyperbolic sine of each value in the input frame."
},
"fl.floor~": {
"digest": "Calculates the floor value of each value in the input frame."
},
"fl.trunc~": {
"digest": "Calculates the truncated value of each value in the input frame."
},
"fl.log10~": {
"digest": "Calculates the logarithm base 10 of each value in the input frame."
},
"fl.atanh~": {
"digest": "Calculates the hyperbolic arctangent of each value in the input frame."
},
"fl.sqrt~": {
"digest": "Calculates the square root of each value in the input frame."
},
"fl.acosh~": {
"digest": "Calculates the hyperbolic arccosine of each value in the input frame."
},
"fl.tan~": {
"digest": "Calculates the tangent (for arguments in radians) of each value in the input frame."
},
"fl.not~": {
"digest": "Calculates the logical not of each value in the input frame."
},
"fl.atan~": {
"digest": "Calculates the arctangent (in radians) of each value in the input frame."
},
"fl.tanh~": {
"digest": "Calculates the hyperbolic tangent of each value in the input frame."
},
"fl.erfc~": {
"digest": "Calculates the complimentary error function of each value in the input frame."
},
"fl.abs~": {
"digest": "Calculates the absolute value of each value in the input frame."
},
"fl.round~": {
"digest": "Calculates the rounded value of each value in the input frame."
},
"fl.cbrt~": {
"digest": "Calculates the cube root of each value in the input frame."
},
"fl.cosh~": {
"digest": "Calculates the hyperbolic cosine of each value in the input frame."
},
"fl.ceil~": {
"digest": "Calculates the ceiling value of each value in the input frame."
},
"fl.copysign~": {
"digest": "Outputs a frame with the magnitude values of the left input frame and the sign values of right input frame."
},
"fl.greaterthaneq~": {
"digest": "Calculates if left input frame values are greater than or equal to right input frame values (output is 1 for true and 0 for false)."
},
"fl.greaterthan~": {
"digest": "Calculates if left input frame values are greater than right input frame values (output is 1 for true and 0 for false)."
},
"fl.or~": {
"digest": "Calculates the logical or of the left and right input frame values."
},
"fl.and~": {
"digest": "Calculates the logical and of the left and right input frame values."
},
"fl.times~": {
"digest": "Multiplies values in the two input frames."
},
"fl.divide~": {
"digest": "Divides the left input frame values by the right input frame values."
},
"fl.minus~": {
"digest": "Subtracts the right input frame values from the left input frame values."
},
"fl.pow~": {
"digest": "Calculates left input frame values to the power of right input frame values."
},
"fl.atan2~": {
"digest": "For each pair of input values calculates the arctangent using two arguments (left operand is y, right operand is x)."
},
"fl.notequals~": {
"digest": "Compares frame values for inequality (output is 1 for true and 0 for false)."
},
"fl.lessthaneq~": {
"digest": "Calculates if left input frame values are greater than or equal to right input frame values (output is 1 for true and 0 for false)."
},
"fl.max~": {
"digest": "Calculates the maximums of pairs of values in the two input frames."
},
"fl.plus~": {
"digest": "Adds values in the two input frames."
},
"fl.modulo~": {
"digest": "Calculates the left input frame values modulo the right input frame values."
},
"fl.lessthan~": {
"digest": "Calculates if left input frame values are less than right input frame values (output is 1 for true and 0 for false)."
},
"fl.diff~": {
"digest": "Calculates the absolute differences between values in the two input frames."
},
"fl.equals~": {
"digest": "Compares frame values for equality (output is 1 for true and 0 for false)."
},
"fl.hypot~": {
"digest": "For each pair of input values calculates the hypotenuse of a right-angled triangle with sides of the given lengths."
},
"fl.min~": {
"digest": "Calculates the minimums of pairs of values in the two input frames."
},
"fl.uniform~": {
"digest": "Generates frames consisting of a single (uniform) value."
},
"fl.random~": {
"digest": "Generates frames of linearly distributed random values in the range [0-1]."
},
"fl.gaussian~": {
"digest": "Generates frames of gaussian distributed random values."
},
"fl.ramp~": {
"digest": "Generates frames that consist of linear ramps from [0-x]."
},
"fl.tomax~": {
"digest": "Turn frames into host messages. The maximum length of the output message may be limited by the host environment."
},
"fl.frommax~": {
"digest": "Turn host messages into frames."
},
"fl.sink~": {
"digest": "Outputs audio frames to the host environment by pasting them into an overlap-add buffer."
},
"fl.trace~": {
"digest": "Outputs audio frames (or values from the frame) to the host environment without overlapping, continuing the last value till a new frame arrives."
},
"fl.source~": {
"digest": "Captures audio from the host environment and outputs the most recent values as frames."
},
"fl.convolve~": {
"digest": "Convolve two input frames, (using frequency domain processing internally)."
},
"fl.multitaper~": {
"digest": "Calculates the multitaper power spectrum of a real input using the cosine tapers."
},
"fl.correlate~": {
"digest": "Calculate the correlation of two input frames, (using frequency domain processing internally)."
},
"fl.fft~": {
"digest": "Calculate the real Fast Fourier Transform of an input frame."
},
"fl.ifft~": {
"digest": "Calculate the inverse real Fast Fourier Transform of two input frames (comprising the real and imaginary values)."
},
"fl.window~": {
"digest": "Multiplies the incoming frame against a specified window."
},
"fl.store~": {
"digest": "Stores a vector frame in named memory for recall."
},
"fl.register~": {
"digest": "Store and recall a vector frame locally."
},
"fl.recall~": {
"digest": "Recall a vector frame from named memory for use."
},
"fl.ewmsd~": {
"digest": "Calculates a per sample exponentially weighted moving standard deviation."
},
"fl.timemedian~": {
"digest": "Outputs the median per sample over a given number of frames."
},
"fl.framedelta~": {
"digest": "Outputs the delta between two consecutive frames."
},
"fl.lag~": {
"digest": "Outputs vector-type frames with a lag set as an integer number of frames."
},
"fl.ewma~": {
"digest": "Calculates a per sample exponentially weighted moving average."
},
"fl.timemean~": {
"digest": "Outputs the mean per sample over a given number of frames."
},
"fl.timestddev~": {
"digest": "Outputs the standard deviation per sample over a given number of frames."
},
"fl.perblock~": {
"digest": "Schedules one frame at the start of each of the hosts audio blocks."
},
"fl.once~": {
"digest": "Schedules one frame at the begining of time, lasting forever."
},
"fl.audiotrigger~": {
"digest": "Translates non-zero samples into trigger frames."
},
"fl.future~": {
"digest": "Schedules frames in the future at a specified time."
},
"fl.interval~": {
"digest": "Schedules frames at regular intervals, which can be adjusted using the interval parameter."
},
"fl.chain~": {
"digest": "Schedules frames in specified times according to the input frame."
},
"fl.complexsinh~": {
"digest": "Calculates the hyperbolic sine of each complex value at the inputs."
},
"fl.complextan~": {
"digest": "Calculates the tangent (for arguments in radians) of each complex value at the inputs."
},
"fl.poltocar~": {
"digest": "Converts from polar values at the input to cartesian values at output."
},
"fl.complexcos~": {
"digest": "Calculates the cosine (for arguments in radians) of each complex value at the inputs."
},
"fl.complexsin~": {
"digest": "Calculates the sine (for arguments in radians) of each complex value at the inputs."
},
"fl.complexcosh~": {
"digest": "Calculates the hyperbolic cosine of each complex value at the inputs."
},
"fl.complexlog10~": {
"digest": "Calculates the logarithm base 10 of each complex value at the inputs."
},
"fl.complextanh~": {
"digest": "Calculates the hyperbolic tangent of each complex value at the inputs."
},
"fl.complexconj~": {
"digest": "Calculates the complex conjugate of each complex value at the inputs."
},
"fl.complexexp~": {
"digest": "Calculates the exponent base e (e to the power of) of each complex value at the inputs."
},
"fl.complexlog~": {
"digest": "Calculates the logarithm base e of each complex value at the inputs."
},
"fl.complexsqrt~": {
"digest": "Calculates the square root of each complex value at the inputs."
},
"fl.cartopol~": {
"digest": "Converts from cartesian values at the input to polar values at output."
},
"fl.wrap~": {
"digest": "Wraps the incoming frame into the range delimited by the low and high parameters.."
},
"fl.fold~": {
"digest": "Folds the incoming frame into the range delimited by the low and high parameters."
},
"fl.clip~": {
"digest": "Clips the incoming frame to the range delimited by the low and high parameters.."
},
"fl.lookup~": {
"digest": "Use one frame as a lookup table for another."
},
"fl.convert~": {
"digest": "Converts the input vector with the specified conversion."
},
"fl.constant~": {
"digest": "Outputs the specified useful constant."
},
"fl.map~": {
"digest": "Maps values in the input via a given scaling to corresponding output values."
},
"fl.samplerate~": {
"digest": "Convert values based on the sample rate / Output a value based on the sampling rate value."
},
"fl.onepolezero~": {
"digest": "Filters input frames using a one pole, one zero filter."
},
"fl.0dfsvf~": {
"digest": "Filters input frames using a zero delay state variable filter."
},
"fl.resonant~": {
"digest": "Filters input frames using a resonant filter."
},
"fl.sallenkey~": {
"digest": "Filters input frames using a sallen and key filter."
},
"fl.onepole~": {
"digest": "Filters input frames using a one pole filter."
},
"fl.complexexpr~": {
"digest": "Applies a mathematical expression to complex pairs of inputs."
},
"fl.expr~": {
"digest": "Applies a mathematical expression to the inputs."
},
"fl.filtertags~": {
"digest": "Filters tagged frames into two parts given a number of tags."
},
"fl.getparam~": {
"digest": "Retrieves parameter values from a connected object."
},
"fl.tag~": {
"digest": "Tags vectors with names ready to send to the parameter input of an object, or for routing purposes."
},
"fl.untag~": {
"digest": "Separates vectors from a tagged frame according to a given set of tags."
},
"fl.combinetags~": {
"digest": "Combines a number of tagged input frames into a single tagged output frame."
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -4,23 +4,26 @@ from FrameLibDocs.utils import get_path, cd_up
from FrameLibDocs.strippers import strip_space, strip_extension
root = cd_up(get_path(), 1)
print(root)
## Create the Max_Object_list.h and add skeleton
# Create the Max_Object_list.h and add skeleton
op = open(os.path.join(root, "Max_Object_List.h"), "w+")
op.write('#include "FrameLib_TypeList.h"')
op.write("\n \n")
op.write("using FrameLib_DSPList = detail::FrameLib_Typelist<")
op.write("\n \n")
## Directory formation
max_source_folder = root.replace(
"/Documentation/Max Documentation", "/FrameLib_Max_Objects/"
) ## Folder containing folders of categories
# Directory formation
max_source_folder = os.path.join(
cd_up(root, 2),
'FrameLib_Max_Objects',
)
# A list of the categories. Is used to find all the source files.
max_source_categories = os.listdir(
max_source_folder
) ## A list of the categories. Is used to find all the source files.
)
## Try removing unnecessary stuff, otherwise throw some info that it was not there
# Try removing unnecessary stuff, otherwise throw some info that it was not there
try:
max_source_categories.remove("_MaxSDK_")
except ValueError:
@@ -67,23 +70,23 @@ def write_comma(counter, ceiling):
op.write("\n")
## Recreate full paths to open and parse for type cases
# Recreate full paths to open and parse for type cases
counter = 0
for category_folder, name in source_file_list:
with open(os.path.join(category_folder, name), "r") as cpp:
print(os.path.join(category_folder, name))
# flatten it with no spaces whatsoever
source_file = (
cpp.read().replace("\n", "").replace(" ", "")
) # flatten it with no spaces whatsoever
)
search_area = source_file.split('extern"C"intC74_EXPORTmain(void){')[1]
## Do this just before info gets cleaved
# Do this just before info gets cleaved
fl_object_name = search_area.split("<")[1]
fl_object_name = fl_object_name.split(">")[0]
## if it contains ,kAllInputs remove
# if it contains ,kAllInputs remove
if "," in fl_object_name:
fl_object_name = fl_object_name.split(",")[0]
## a bit more pruning
# a bit more pruning
if fl_object_name == "FrameLib_MaxClass_ToMax":
fl_object_name = "FrameLib_ToHost"
elif fl_object_name == "FrameLib_MaxClass_FromMax":
@@ -11,7 +11,7 @@ def main(root):
"""
dir_path = root
object_path = os.path.join(cd_up(root, 2), "FrameLib_Max_Objects")
output_path = os.path.join(dir_path, "category_database.json")
output_path = os.path.join(dir_path, "__tmp__", "db", "category_database.json")
file_categories = os.listdir(object_path)
@@ -34,10 +34,12 @@ def main(root):
pass
file_categories.sort()
category_dict = dict({})
category_dict = {}
for item in file_categories:
files = os.listdir(f"{object_path}/{item}")
files = os.listdir(
os.path.join(object_path, item)
)
if "ibuffer" in files:
files.remove("ibuffer")
# some max categories already overlap with framelib categories (timing for example). This just maps Timing -> fl_timing to avoid any duplication issues
@@ -14,11 +14,11 @@ def main(root):
"""
### directories ###
dir_path = root
raw_xml_path = os.path.join(dir_path, "tmp")
raw_xml_path = os.path.join(dir_path, "__tmp__", "raw_xml")
move_to_path = os.path.join(
cd_up(root, 2), "Current Test Version", "FrameLib", "docs", "refpages"
)
category_database_path = os.path.join(dir_path, "category_database.json")
category_database_path = os.path.join(dir_path, "__tmp__", "db", "category_database.json")
yaml_file = os.path.join(root, "object_relationships.yaml")
object_info = None
@@ -55,10 +55,8 @@ def main(root):
bad_entries = [".DS_Store", "_c74_ref_modules.xml"]
# Directory stuff #
dir_path = root
print(root)
dir_path = os.path.join(cd_up(root, 2), "Current Test Version", "FrameLib")
ref_dir = os.path.join(dir_path, "docs", "refpages")
print(ref_dir)
obj_lookup = os.path.join(dir_path, "interfaces", "FrameLib-obj-dlookup.json")
worker = dParseAndBuild()
@@ -1,6 +1,6 @@
import xml.etree.ElementTree as et
import os
import yaml
import xml.etree.ElementTree as et
from FrameLibDocs.strippers import strip_space
from FrameLibDocs.utils import write_json, cd_up, thin_list
@@ -0,0 +1,7 @@
import os
import shutil
from FrameLibDocs.utils import cd_up, get_path
def main(root):
tmp = os.path.join(root, "__tmp__")
shutil.rmtree(tmp)
@@ -18,14 +18,14 @@ void write_info(FrameLib_Multistream* frameLibObject, std::string inputName)
{
std::string fileName(__FILE__);
std::string dirPath = dirname(const_cast<char *>(fileName.c_str()));
std::string tmpFolder = dirPath + "/tmp/";
std::string tmpFolder = dirPath + "/__tmp__/raw_xml/";
enum InfoFlags { kInfoDesciption = 0x01, kInfoInputs = 0x02, kInfoOutputs = 0x04, kInfoParameters = 0x08 };
bool verbose = true;
std::ofstream myfile;
std::string sp = " "; // code is more readable with sp rather than " "
std::string object = inputName; // refactor to not copy variable.
myfile.open (tmpFolder + object + "~" + ".maxref.xml"); // change to some temporary relative location
myfile.open (tmpFolder + object + "~.maxref.xml"); // change to some temporary relative location
std::string object_category = "!@#@#$";
std::string object_keywords = "boilerplate keywords";
std::string object_info;
@@ -3,6 +3,13 @@ import random as rn
import json
def check_make(folder_check):
"""
Takes a directory name, checks if it exists and makes.
"""
if not os.path.isdir(folder_check):
os.mkdir(folder_check)
def remove_ds(list_in):
if ".DS_Store" in list_in:
list_in.remove(".DS_Store")
@@ -62,6 +62,8 @@ Once you have created your FrameLib_YOUROBJECT.cpp, FrameLib_YOUROBJECT.h and fl
You will need to make your own help files and tutorials for the object however, which is not covered in the automatic building of FrameLib documentation.
Prior to building the documentation you will also need to add an entry for your object in the `object_relationships.yaml` file. This provides the build process with knowledge of objects which are related to yours as well as any keywords that you want to associate with your object, and will populate the Max documentation with this information. Follow the format used for the native FrameLib objects.
## An deeper explanation
@@ -5,16 +5,15 @@ parse_to_qlookup = __import__("4_parse_to_qlookup")
parse_to_tlookup = __import__("5_parse_to_tlookup")
parse_to_jlookup = __import__("6_parse_to_jlookup")
create_tutorial_coll = __import__("7_create_tutorial_coll")
import FrameLibDocs.utils as hp
cleanup = __import__("8_cleanup")
from FrameLibDocs.utils import cd_up, get_path, sign_off, space, hyp
import os
def main():
root = hp.cd_up(hp.get_path(), 1)
hp.sign_off()
hp.space()
## This script will only work with python 3. ##
root = cd_up(get_path(), 1)
sign_off()
space()
## Stage 0
## There is a prior stage here where make_object_list.py is called by Xcode.
@@ -24,44 +23,49 @@ def main():
## The JSON file is used by edit_raw_XML.py to assign object categories to the xml files.
print("1. Building Category Database")
create_category_database.main(root)
hp.hyp()
hyp()
## The purpose of this script is to set the categories for the Raw_XML files.
## C++ doesnt know about the categories at XML creation and its easier to iterate file structures in python.
## Edited XML files are copied from /tmp/ to the refpages directory
print("2. Editing XML Files")
edit_raw_XML.main(root)
hp.hyp()
hyp()
## This script creates a dictionary used to display specific object info in the extras Max Patch.
## Similar to the qlookup, but is specifically used to display the digest with mouse hovering
print("3. Building dlookup")
parse_to_dlookup.main(root)
hp.hyp()
hyp()
## This script creates a dictionary that contains specific object information.
## This provides the dynamic hover behaviour
print("4. Building qlookup")
parse_to_qlookup.main(root)
hp.hyp()
hyp()
## Creates a dictionary used to display names and descriptions of tutorials in the extras Max Patch.
## The tutorials are categorised by difficulty. {Beginner, Intermediate, Advanced}
print("5. Building tlookup")
parse_to_tlookup.main(root)
hp.hyp()
hyp()
## Creates a dict containing information about object parameters. This is used by the help file template.
print("6. Building jlookup")
parse_to_jlookup.main(root)
hp.hyp()
## Creates a coll containing the file names of the tutorials. Makes it a bit easier to load them.
print("7. Building tutorial name coll")
create_tutorial_coll.main(root)
hp.hyp()
hyp()
## Deletes all temporay files and cleans up process
print("8. Cleaning up")
cleanup.main(root)
hyp()
print(" ")
print("Completed all python scripts!!!")
print("Completed all python scripts.")
if __name__ == "__main__":
@@ -0,0 +1,14 @@
import os
from FrameLibDocs.utils import get_path, check_make, cd_up
root = cd_up(get_path(), 1)
# Directories
temporary = os.path.join(root, "__tmp__")
databases = os.path.join(temporary, "db")
raw_xml = os.path.join(temporary, "raw_xml")
# Check and make
check_make(temporary)
check_make(databases)
check_make(raw_xml)
@@ -1,63 +0,0 @@
import os
import yaml
import json
from helpers import cd_up, remove_ds, get_path, write_json
from strippers import strip_space, strip_extension
script_root = get_path()
package = cd_up(script_root, 2)
max_objects = os.path.join(package, "FrameLib_Max_Objects")
prefilled_info = {
"Binary": ["binary ops, operators"],
"Buffer": ["buffer"],
"Complex_Binary": ["complex numbers", "complex operators"],
"Complex_Unary": ["complex numbers", "complex operators"],
"Expressions": ["expression"],
"Filters": ["filters"],
"Generators": ["generators"],
"Host_Communication": ["conversion"],
"IO": ["conversion"],
"Mapping": ["scaling", "mapping"],
"Parameters": ["parameters"],
"Routing": ["routing"],
"Schedulers": ["timing, schedulers", "triggers"],
"Spatial": ["spatialiastion"],
"Spectral": ["FFT, windowing, frequency domain"],
"Storage": ["storage"],
"Streaming": ["multistreaming", "streams"],
"Ternary": ["ternary ops", "operators"],
"Time_Smoothing": ["time smoothing", "statistics"],
"Timing": ["timing"],
"Unary": ["unary ops", "operators"],
"Vector": ["vector"],
}
master_dict = {} # What will essentially become the YAML file by saving a dict as yaml
inner_dict = {"keywords": [], "seealso": []}
all_objects = os.walk(max_objects)
for root, dirs, files in all_objects:
for name, category in zip(files, root):
obj_name = os.path.splitext(name)[0]
category = os.path.basename(root)
if name[:2] == "fl":
inner_dict = {"keywords": [], "seealso": []}
other_files = os.listdir(root)
other_files.remove(name)
if ".DS_Store" in other_files:
other_files.remove(".DS_Store")
inner_dict["keywords"] = prefilled_info[category]
inner_dict["seealso"] = [os.path.splitext(x)[0] for x in other_files]
obj_dict = {obj_name: inner_dict}
master_dict.update(obj_dict)
# Now write the YAML file
yaml_file_dir = os.path.join(script_root, "object_relationships.yaml")
# We have to make an instance of a safe dumper and tell it where to ignore alias
noalias_dumper = yaml.dumper.SafeDumper
noalias_dumper.ignore_aliases = lambda self, master_dict: True
with open(yaml_file_dir, "w+") as outfile:
yaml.dump(master_dict, outfile, default_flow_style=False, Dumper=noalias_dumper)
+23 -233
View File
@@ -7,7 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
262AEADE23101D0E0016ECF3 /* Build_Max_Docs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 262AEADD23101D0E0016ECF3 /* Build_Max_Docs.cpp */; };
26107EEC2310610900BAC824 /* Build_Max_Docs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26107EEB2310610900BAC824 /* Build_Max_Docs.cpp */; };
B812606920D697A9000B81D9 /* FrameLib_Pack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B812606220D69573000B81D9 /* FrameLib_Pack.cpp */; };
B812606A20D697AD000B81D9 /* FrameLib_Unpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B812606620D69661000B81D9 /* FrameLib_Unpack.cpp */; };
B812606B20D697BB000B81D9 /* FrameLib_ComplexExpression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B85E1D3B20C82DDF00DEEE6E /* FrameLib_ComplexExpression.cpp */; };
@@ -20,10 +20,8 @@
B846DEE0231042D900E660FA /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B88F558E207AB15C007774AD /* Accelerate.framework */; };
B846DEE22310433F00E660FA /* FrameLib_OnePoleZero.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8BDF0531F2D2A1E00264316 /* FrameLib_OnePoleZero.cpp */; };
B846DEE32310434D00E660FA /* libframelib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B846DEDA231041E100E660FA /* libframelib.a */; };
B85426AC2175CA0C007FA185 /* FrameLib.sc in CopyFiles */ = {isa = PBXBuildFile; fileRef = B85426AB2175CA05007FA185 /* FrameLib.sc */; };
B88A482B2067DCC400CEB3AC /* FrameLib_SerialiseGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B88A48292067DCC400CEB3AC /* FrameLib_SerialiseGraph.cpp */; };
B88A482C2067DCC400CEB3AC /* FrameLib_SerialiseGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = B88A482A2067DCC400CEB3AC /* FrameLib_SerialiseGraph.h */; };
B88C0A3921733CA6007A65C0 /* FrameLib_SC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B88C0A1E21732710007A65C0 /* FrameLib_SC.cpp */; };
B88F5559207A58DA007774AD /* FrameLib_Reverse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B88F5558207A5873007774AD /* FrameLib_Reverse.cpp */; };
B88F558D207AAFBB007774AD /* HISSTools_FFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B85435731F65BF03001BA1AA /* HISSTools_FFT.cpp */; };
B89ABA961FA734C1006DAD53 /* FrameLib_FixedPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8B961801F0FDA9500D174F2 /* FrameLib_FixedPoint.cpp */; };
@@ -117,13 +115,6 @@
remoteGlobalIDString = B89ABA8F1FA73483006DAD53;
remoteInfo = framelib;
};
B83FCCED222FEC2A00B52C0D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = B8BA6FD12078D49200D3DB3D;
remoteInfo = framelib_objects;
};
B846DEDD2310423100E660FA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
@@ -143,22 +134,13 @@
);
runOnlyForDeploymentPostprocessing = 1;
};
B88C0A2F21733BF9007A65C0 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 12;
dstPath = ../classes;
dstSubfolderSpec = 0;
files = (
B85426AC2175CA0C007FA185 /* FrameLib.sc in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
262AEAD423101CE10016ECF3 /* Documentation */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Documentation; sourceTree = BUILT_PRODUCTS_DIR; };
262AEADD23101D0E0016ECF3 /* Build_Max_Docs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Build_Max_Docs.cpp; path = "Documentation/Max Documentation/Build_Max_Docs.cpp"; sourceTree = "<group>"; };
26107EEB2310610900BAC824 /* Build_Max_Docs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Build_Max_Docs.cpp; path = "Documentation/Max Documentation/Build_Max_Docs.cpp"; sourceTree = SOURCE_ROOT; };
26107EED231064C400BAC824 /* Max_Object_List.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Max_Object_List.h; path = "Documentation/Max Documentation/Max_Object_List.h"; sourceTree = SOURCE_ROOT; };
262AEAD423101CE10016ECF3 /* DocumentationTarget */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = DocumentationTarget; sourceTree = BUILT_PRODUCTS_DIR; };
5A3CAB132052E67E001082E3 /* FrameLib_Ternary_Objects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameLib_Ternary_Objects.h; sourceTree = "<group>"; };
5A3CAB142052E67E001082E3 /* FrameLib_Ternary_Template.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameLib_Ternary_Template.h; sourceTree = "<group>"; };
5AB54BBE2052E96E00325C14 /* fl.wrap~.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "fl.wrap~.cpp"; sourceTree = "<group>"; };
@@ -251,7 +233,6 @@
B843AAB419C070A1000D3476 /* fl.sink~.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = "fl.sink~.cpp"; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
B846DEDA231041E100E660FA /* libframelib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libframelib.a; sourceTree = BUILT_PRODUCTS_DIR; };
B846DEDB231041E100E660FA /* libframelib_objects.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libframelib_objects.a; sourceTree = BUILT_PRODUCTS_DIR; };
B846DEDC231041E100E660FA /* FrameLib.scx */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = FrameLib.scx; sourceTree = BUILT_PRODUCTS_DIR; };
B846E61119F15A12005E9718 /* FrameLib_Window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameLib_Window.h; sourceTree = "<group>"; };
B846E62219F15A57005E9718 /* fl.window~.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "fl.window~.cpp"; sourceTree = "<group>"; };
B847EB551FB474FF00CFA52D /* FrameLib_TimeBuffer_Template.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameLib_TimeBuffer_Template.h; sourceTree = "<group>"; };
@@ -573,13 +554,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
B88C0A2E21733BF9007A65C0 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
B89ABA8D1FA73483006DAD53 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -602,13 +576,13 @@
089C166AFE841209C02AAC07 /* plus~ */ = {
isa = PBXGroup;
children = (
2606E3CA23106020001957E3 /* Documentation */,
B80F698A19A77384008F748B /* Config_FrameLib.xcconfig */,
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
B89C1A4F2069A969009CA55B /* Frameworks */,
262AEAD523101CE10016ECF3 /* Products */,
262AEADD23101D0E0016ECF3 /* Build_Max_Docs.cpp */,
);
name = "plus~";
sourceTree = "<group>";
@@ -645,13 +619,22 @@
name = Source;
sourceTree = "<group>";
};
2606E3CA23106020001957E3 /* Documentation */ = {
isa = PBXGroup;
children = (
26107EEB2310610900BAC824 /* Build_Max_Docs.cpp */,
26107EED231064C400BAC824 /* Max_Object_List.h */,
);
name = Documentation;
path = "New Group";
sourceTree = "<group>";
};
262AEAD523101CE10016ECF3 /* Products */ = {
isa = PBXGroup;
children = (
262AEAD423101CE10016ECF3 /* Documentation */,
262AEAD423101CE10016ECF3 /* DocumentationTarget */,
B846DEDA231041E100E660FA /* libframelib.a */,
B846DEDB231041E100E660FA /* libframelib_objects.a */,
B846DEDC231041E100E660FA /* FrameLib.scx */,
);
name = Products;
sourceTree = "<group>";
@@ -1544,9 +1527,9 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
262AEAD323101CE10016ECF3 /* Documentation */ = {
262AEAD323101CE10016ECF3 /* DocumentationTarget */ = {
isa = PBXNativeTarget;
buildConfigurationList = 262AEAD923101CE10016ECF3 /* Build configuration list for PBXNativeTarget "Documentation" */;
buildConfigurationList = 262AEAD923101CE10016ECF3 /* Build configuration list for PBXNativeTarget "DocumentationTarget" */;
buildPhases = (
262AEAD023101CE10016ECF3 /* Sources */,
262AEAD123101CE10016ECF3 /* Frameworks */,
@@ -1557,27 +1540,9 @@
dependencies = (
B846DEDE2310423100E660FA /* PBXTargetDependency */,
);
name = Documentation;
name = DocumentationTarget;
productName = Documentation;
productReference = 262AEAD423101CE10016ECF3 /* Documentation */;
productType = "com.apple.product-type.tool";
};
B88C0A3021733BF9007A65C0 /* FrameLib */ = {
isa = PBXNativeTarget;
buildConfigurationList = B88C0A3521733BF9007A65C0 /* Build configuration list for PBXNativeTarget "FrameLib" */;
buildPhases = (
B88C0A2D21733BF9007A65C0 /* Sources */,
B88C0A2E21733BF9007A65C0 /* Frameworks */,
B88C0A2F21733BF9007A65C0 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
B83FCCEE222FEC2A00B52C0D /* PBXTargetDependency */,
);
name = FrameLib;
productName = FLTest2;
productReference = B846DEDC231041E100E660FA /* FrameLib.scx */;
productReference = 262AEAD423101CE10016ECF3 /* DocumentationTarget */;
productType = "com.apple.product-type.tool";
};
B89ABA8F1FA73483006DAD53 /* framelib */ = {
@@ -1627,10 +1592,6 @@
CreatedOnToolsVersion = 10.3;
ProvisioningStyle = Automatic;
};
B88C0A3021733BF9007A65C0 = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
};
B89ABA8F1FA73483006DAD53 = {
CreatedOnToolsVersion = 8.3.3;
ProvisioningStyle = Automatic;
@@ -1656,8 +1617,7 @@
targets = (
B89ABA8F1FA73483006DAD53 /* framelib */,
B8BA6FD12078D49200D3DB3D /* framelib_objects */,
B88C0A3021733BF9007A65C0 /* FrameLib */,
262AEAD323101CE10016ECF3 /* Documentation */,
262AEAD323101CE10016ECF3 /* DocumentationTarget */,
);
};
/* End PBXProject section */
@@ -1667,15 +1627,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
262AEADE23101D0E0016ECF3 /* Build_Max_Docs.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
B88C0A2D21733BF9007A65C0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
B88C0A3921733CA6007A65C0 /* FrameLib_SC.cpp in Sources */,
26107EEC2310610900BAC824 /* Build_Max_Docs.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1793,11 +1745,6 @@
target = B89ABA8F1FA73483006DAD53 /* framelib */;
targetProxy = B83F045F223A76AA00AF1F8E /* PBXContainerItemProxy */;
};
B83FCCEE222FEC2A00B52C0D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = B8BA6FD12078D49200D3DB3D /* framelib_objects */;
targetProxy = B83FCCED222FEC2A00B52C0D /* PBXContainerItemProxy */;
};
B846DEDE2310423100E660FA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = B8BA6FD12078D49200D3DB3D /* framelib_objects */;
@@ -2093,153 +2040,6 @@
};
name = "Public Testing";
};
B88C0A3621733BF9007A65C0 /* Development */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B88C0A1F21732753007A65C0 /* Config_FrameLib_SC.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACH_O_TYPE = mh_bundle;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Development;
};
B88C0A3721733BF9007A65C0 /* Deployment */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B88C0A1F21732753007A65C0 /* Config_FrameLib_SC.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACH_O_TYPE = mh_bundle;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Deployment;
};
B88C0A3821733BF9007A65C0 /* Public Testing */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B88C0A1F21732753007A65C0 /* Config_FrameLib_SC.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACH_O_TYPE = mh_bundle;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = "Public Testing";
};
B89ABA911FA73484006DAD53 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -2523,7 +2323,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
262AEAD923101CE10016ECF3 /* Build configuration list for PBXNativeTarget "Documentation" */ = {
262AEAD923101CE10016ECF3 /* Build configuration list for PBXNativeTarget "DocumentationTarget" */ = {
isa = XCConfigurationList;
buildConfigurations = (
262AEADA23101CE10016ECF3 /* Development */,
@@ -2533,16 +2333,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
B88C0A3521733BF9007A65C0 /* Build configuration list for PBXNativeTarget "FrameLib" */ = {
isa = XCConfigurationList;
buildConfigurations = (
B88C0A3621733BF9007A65C0 /* Development */,
B88C0A3721733BF9007A65C0 /* Deployment */,
B88C0A3821733BF9007A65C0 /* Public Testing */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
B89ABA951FA73484006DAD53 /* Build configuration list for PBXNativeTarget "framelib" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -10,13 +10,13 @@
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Script"
scriptText = "#!/bin/sh&#10;python3 ${SRCROOT}/Documentation/Max\ Documentation/make_object_list.py&#10;">
scriptText = "#!/bin/sh&#10;python3 ${SRCROOT}/Documentation/Max\ Documentation/_create_tmp.py&#10;python3 ${SRCROOT}/Documentation/Max\ Documentation/0_generate_Max_Object_list.h.py&#10;">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "Documentation"
BlueprintName = "Documentation"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
@@ -33,8 +33,8 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "Documentation"
BlueprintName = "Documentation"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
@@ -51,8 +51,8 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "Documentation"
BlueprintName = "Documentation"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</BuildActionEntry>
@@ -65,6 +65,15 @@
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
@@ -83,17 +92,7 @@
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Script"
scriptText = "#!/bin/bash&#10;&#10;python3 -B ${SRCROOT}/Documentation/Max\ Documentation/make_object_list.py"
shellToInvoke = "/bin/sh">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "26E2EC2F2298C85900F85222"
BuildableName = "PostPythonDocs"
BlueprintName = "PostPythonDocs"
ReferencedContainer = "container:framelib~.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
scriptText = "python3 ${SRCROOT}/Documentation/Max\ Documentation/_create_tmp.py&#10;python3 ${SRCROOT}/Documentation/Max\ Documentation/0_generate_Max_Object_List.h.py&#10;">
</ActionContent>
</ExecutionAction>
</PreActions>
@@ -102,29 +101,20 @@
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Script"
scriptText = "#!/bin/bash&#10;&#10;python3 -B ${SRCROOT}/Documentation/Max\ Documentation/_Build_All_Files.py"
shellToInvoke = "/bin/bash">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "26E2EC2F2298C85900F85222"
BuildableName = "PostPythonDocs"
BlueprintName = "PostPythonDocs"
ReferencedContainer = "container:framelib~.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
scriptText = "python3 ${SRCROOT}/Documentation/Max\ Documentation/_Build_All_Files.py">
</ActionContent>
</ExecutionAction>
</PostActions>
<MacroExpansion>
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "Documentation"
BlueprintName = "Documentation"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</MacroExpansion>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
@@ -138,8 +128,8 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "262AEAD323101CE10016ECF3"
BuildableName = "Documentation"
BlueprintName = "Documentation"
BuildableName = "DocumentationTarget"
BlueprintName = "DocumentationTarget"
ReferencedContainer = "container:framelib~-documentation.xcodeproj">
</BuildableReference>
</MacroExpansion>