Skip to content

Commit

Permalink
some sketches that come in handy
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielle-ohlson committed Apr 29, 2021
1 parent 8d1c353 commit 98bdbec
Show file tree
Hide file tree
Showing 4 changed files with 676 additions and 1 deletion.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/*.k
/*.kc
sketches/
sketches/*.k
sketches/*.kc
sketches/*.html
sketches/*.css
143 changes: 143 additions & 0 deletions sketches/half-gauge.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#!/bin/sh
':'; //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
'use strict';

//------------------------------------

const fs = require('fs');

let inFile = process.argv[2];
let outFile = process.argv[3];

const fullGauge = fs.readFileSync(inFile, 'utf8');
let lines = fullGauge.split('\n');
let halfGauge = [];

let rackCount = 0,
xferCount = 0;

// fn -> f(2n)
// fsn -> f(2n+1)
// bn -> b(2n+1)
// bs -> b(2n)

const commentCheck = (line, str, skipPush) => {
if (line.indexOf(';') !== -1 && line.indexOf(';') < line.indexOf(str)) {
if (!skipPush) halfGauge.push(line);
return true;
} else return false;
};

const replaceValue = (line, bn) => {
if (!commentCheck(line, bn)) {
let splitLine = line.split(bn);
let needle = bn.match(/\d+/g)[0];
let bed = bn.slice(0, bn.indexOf(needle));
//
if (line.includes('xfer') && (rackCount !== xferCount || xferCount === 0)) {
++xferCount;
if (rackCount < xferCount) {
//meaning rack was 0 & it wasn't specified
halfGauge.push(`rack 0`); //might be changed later
console.warn('inserting temp rack 0'); //remove
++rackCount;
}
}
//
if (bed === 'fs' || bed === 'b') {
return splitLine.join(`${bed.charAt(0)}${2 * needle + 1}`);
} else {
return splitLine.join(`${bed.charAt(0)}${2 * needle}`);
}
}
};
let arr = [1, 2];
let bedNeedle;
const testForBed = (line, bed) => {
if (typeof line === 'object') {
let lineMatch = line.find((str) => str.match(`${bed}[0-9]+`) !== null);
// if (line.some((str) => str.match(`${bed}[0-9]+`) !== null)) {
if (lineMatch !== undefined) {
bedNeedle = lineMatch;
return true;
}
} else {
if (line.match(`${bed}[0-9]+`) !== null) {
bedNeedle = line.match(`${bed}[0-9]+`)[0];
return true;
}
}
};
let initRack = false;
for (let i = 0; i < lines.length; ++i) {
if (lines[i].charAt(0) === ';' || lines[i].includes('x-')) {
halfGauge.push(lines[i]);
} else {
if (lines[i].includes('rack')) {
initRack = true; //?
if (!commentCheck(lines[i], 'rack')) {
let rackInfo = lines[i].split(' ');
let oldRack = parseInt(rackInfo[1]);
let newRack = 2 * oldRack - 1; //assuming the racking stays the same if > 1, but need to //check
findxfer: for (let r = i + 1; r < lines.length; ++r) {
//TODO: something similar for split ?
if (
(lines[r].includes('rack') && !commentCheck(lines[r], 'rack', true)) ||
(lines[r].includes('knit') && !commentCheck(lines[r], 'knit', true)) ||
(lines[r].includes('tuck') && !commentCheck(lines[r], 'tuck', true)) ||
(lines[r].includes('drop') && !commentCheck(lines[r], 'drop', true)) //? //check because seems like sliders could actually be involved in tuck
) {
console.warn(`not changing rack value based on xfer because a ${lines[r].split(' ')[0]} op occurs before any xfers.\n`); //remove //?
break findxfer;
}
/////
if (lines[r].includes('xfer') && !commentCheck(lines[r], 'xfer', true)) {
++rackCount;
let xferInfo = lines[r].split(' ');
if ((testForBed(xferInfo, 'fs') && testForBed(xferInfo, 'bs'))) { // both fs & bs
newRack = (2 * oldRack) + 1;
} else if (testForBed(xferInfo, 'fs') || testForBed(xferInfo, 'bs')) { // only one is either fs||bs, & other is b||f
newRack = 2 * oldRack;
}
break findxfer;
}
}
halfGauge.push(`rack ${newRack}`);
}
} else {
bedNeedle = null;
let newLine = lines[i];
if (testForBed(lines[i], 'fs')) {
newLine = replaceValue(newLine, bedNeedle);
} else if (testForBed(lines[i], 'f')) {
newLine = replaceValue(newLine, bedNeedle);
}
if (testForBed(lines[i], 'bs')) {
newLine = replaceValue(newLine, bedNeedle);
} else if (testForBed(lines[i], 'b')) {
newLine = replaceValue(newLine, bedNeedle);
}
if (!initRack && bedNeedle !== null) {
halfGauge.push('rack -1'); //equivalent to rack 0 for non-slider (aka when knitting) //TODO: double check to confirm that sliders are never engaged during knitting/tucking/missing
++rackCount; //?
initRack = true;
}
if (newLine.includes('xfer')) {
let prevRackIdx = halfGauge.map((line) => line.includes('rack ') && !commentCheck(line, 'rack', true)).lastIndexOf(true);
let prevRack = halfGauge[prevRackIdx];
prevRack = parseInt(prevRack.split(' ')[1]);
let frontN = parseInt(newLine.match('f[0-9]+')[0].slice(1));
let backN = parseInt(newLine.match('b[0-9]+')[0].slice(1));
if (prevRack !== frontN - backN) {
console.warn(`Changing rack value from ${prevRack} to ${frontN - backN}.\nOld line: ${lines[i]}\nNew line: ${newLine}\n`);
halfGauge.splice(prevRackIdx, 1, `rack ${frontN - backN}`);
}
}
halfGauge.push(newLine);
}
}
}
fs.writeFileSync(outFile, halfGauge.join('\n'));
169 changes: 169 additions & 0 deletions sketches/knitout-alter-kniterate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
#!/bin/sh
':'; //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
'use strict';

//------------------------------------
//TODO: add option too only do one of these things (or just replace carriers)
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});

let inFile, outFile, file, lines;
let defaultRollerAdvance = 400, defaultStitchNumber = 6, defaultSpeedNumber = 300;
let rollerAdvance, xferRollerAdvance, stitchNumber, xferStitchNumber, speedNumber, xferSpeedNumber;
let carriers = [];
let changedCarriers = [];
let carrierChange = ({from, to}) => ({
from: from,
to: to
});

// Create a promise based version of rl.question so we can use it in async functions
const question = (str) => new Promise(resolve => rl.question(str, resolve));

// all the steps involved, executed asynchronously
const steps = {
start: async () => {
inFile = await question(`Path to input file: `);
console.log('\nPress Enter to skip any of the following prompts.\n');
return steps.rollerAdvance();
},
rollerAdvance: async () => {
rollerAdvance = await question(`Roller advance per pass: `);
if (rollerAdvance) defaultRollerAdvance = rollerAdvance;
return steps.xferRollerAdvance();
},
xferRollerAdvance: async () => {
xferRollerAdvance = await question(`Roller advance for transfers: `);
return steps.stitchNumber();
},
stitchNumber: async () => {
stitchNumber = await question(`Main stitch number (for knit/tuck): `);
if (stitchNumber) defaultStitchNumber = stitchNumber;
return steps.xferStitchNumber();
},
xferStitchNumber: async () => {
xferStitchNumber = await question(`Stitch number for transfers: `);
return steps.speedNumber();
},
speedNumber: async () => {
speedNumber = await question(`Main speed number (for knit/tuck): `);
if (speedNumber) defaultSpeedNumber = speedNumber;
return steps.xferSpeedNumber();
},
xferSpeedNumber: async () => {
xferSpeedNumber = await question(`Speed number for transfers: `);
return steps.readFile();
},
readFile: async () => {
file = fs.readFileSync(inFile, { encoding: 'utf8'});
return steps.parse();
},
parse: async () => {
lines = file.split('\n');
let xStitch = false,
xSpeed = false,
xRoll = false,
xfer = false;
//
function chopOffComment(str) {
if (str.includes(';')) return str.split(';')[0];
else return str;
}
//
for (let line in lines) {
if (lines[line] === '') continue;
let info = lines[line].split(' ');
if (info[0] === 'in' || info[0] === 'inhook') {
if (!carriers.includes(info[1])) carriers.push(info[1]);
if (info[0] === 'inhook') {
lines[line] = `in ${info[1]}`;
}
if (!xStitch || !xSpeed || !xRoll) {
if (!xStitch) lines[line] = `x-stitch-number ${defaultStitchNumber}\n${lines[line]}`;
if (!xSpeed) lines[line] = `x-speed-number ${defaultSpeedNumber}\n${lines[line]}`;
if (!xRoll) lines[line] = `x-roller-advance ${defaultRollerAdvance}\n${lines[line]}`;
}
} else if (info[0] === 'x-stitch-number') {
xStitch = true;
if (stitchNumber) lines[line] = `x-stitch-number ${stitchNumber}`;
else defaultStitchNumber = chopOffComment(info[1]); //TODO: determine if this should be redefined...
} else if (info[0] === 'x-speed-number') {
xSpeed = true;
if (speedNumber) lines[line] = `x-speed-number ${speedNumber}`;
else defaultSpeedNumber = chopOffComment(info[1]);
} else if (info[0] === 'x-roller-advance') {
xRoll = true;
if (rollerAdvance) lines[line] = `x-roller-advance ${rollerAdvance}`;
else defaultRollerAdvance = chopOffComment(info[1]);
} else if (info[0] === 'releasehook') {
lines[line] = '';
} else if (info[0] === 'outhook') {
lines[line] = `out ${info[1]}`;
} else if (!xfer && info[0] === 'xfer') {
let replacementLine = '';
if (xferStitchNumber) replacementLine += `x-stitch-number ${xferStitchNumber}\n`;
if (xferSpeedNumber) replacementLine += `x-speed-number ${xferSpeedNumber}\n`;
if (xferRollerAdvance) replacementLine += `x-roller-advance ${xferRollerAdvance}\n`;
replacementLine += `${lines[line]}`;
lines[line] = replacementLine;
xfer = true;
}
//
if (xfer && info[0] !== 'xfer' && info[0] !== 'rack' && info[0].charAt(0) !== ';') {
let replacementLine = '';
if (xferStitchNumber) replacementLine += `x-stitch-number ${defaultStitchNumber}\n`;
if (xferSpeedNumber) replacementLine += `x-speed-number ${defaultSpeedNumber}\n`;
if (xferRollerAdvance) replacementLine += `x-roller-advance ${defaultRollerAdvance}\n`;
replacementLine += `${lines[line]}`;
lines[line] = replacementLine;
xfer = false;
}
}
lines = lines.join('\n');
return steps.changeCarriers();
},
changeCarriers: async () => {
let change = await question(`Would you like to change any of the carriers? [y/n] `);
if (change.toLowerCase() === 'y') {
for (let c in carriers) {
let newCarrier = await question(`Which carrier would you like to change '${carriers[c]}' to? `);
newCarrier = newCarrier.toString().match(/\d+/g)[0];
changedCarriers.push(carrierChange({ from: carriers[c], to: newCarrier }));
}
lines = lines.split('\n');
for (let line in lines) {
let info = lines[line].split(' ');
let comment = '';
if (info[info.length - 1].includes(';')) {
comment = info[info.length - 1].split(';');
info[info.length - 1] = comment[0];
comment = `;${comment[1]}`;
}
if (info[0] === 'in' || info[0] === 'out') {
lines[line] = `${info[0]} ${changedCarriers.find(c => c.from == info[1] ).to}${comment}`;
} else if (info[0] === 'knit' || info[0] === 'tuck' || info[0] === 'miss') { //TODO: deal with split
info[3] = changedCarriers.find(c => c.from == info[3]).to;
lines[line] = `${info.join(' ')}${comment}`;
}
}
lines = lines.join('\n');
}
return steps.writeFile();
},
writeFile: async () => {
outFile = await question(`Filename for output knitout: `);
fs.writeFileSync(outFile, lines);
return steps.end();
},
end: async () => {
rl.close();
},
};

// Start the program
steps.start();
Loading

0 comments on commit 98bdbec

Please sign in to comment.